MENU

Zookeeper学习整理笔记之一

Zookeeper介绍

zookeeper是一个致力于提供一个高性能、高可用的,而且具有严格的顺序访问控制能力的分布式协调服务。
分布式应用程序基于zookeeper实现数据发布/订阅、负载均衡、命名服务、分布式协调与通知、集群管理、Dubbo注册中心、Master选举、分布式锁、分布式队列等。

Zookeeper分布式一致性保证

  • 顺序一致性:从一个客户端发起的事务请求,最终将会严格按照其发起顺序被应用到Zookeeper中。
  • 原子性:整个集群所有机器要么都成功应用了某一个事务,要么都没有应用,一定不会出现集群中部分机器应用了该事务,而另外一部分没有应用的情况。
  • 单一视图:无论客户端连接的是哪个Zookeeper服务器,其看到的服务端数据模型都是一致性的。
  • 可靠性:一旦服务端成功地应用了一个事务,并完成对客户端的响应,那么该事务所引起的服务端状态变更将会被一直保留下来,除非有另外一个事务又对其进行了变更。
  • 实时性:Zookeeper仅仅保证在一定的时间段内,客户端最终一定能够从服务端上读到最新的数据状态。

Zookeeper基本概念

  • 集群角色:通常分布式系统,典型的集群模式是Master/Slave模式(主备模式)。
    Master能够处理所有写操作的机器,而通过异步复制方式获取最新数据并且提供服务的机器为Slave机器。而在zookeeper中引入Leader、Follower、Observer三种角色。
    • Leader:是整个Zookeeper集群工作机制的核心,事务请求的唯一调度和处理者,保证集群事务处理的顺序性。集群内部各服务器的调度者。
    • Follower:处理客户端非事务请求,转发事务请求给Leader服务器;参与事务请求Proposal的投票;参与Leader选举投票。
    • Observer:工作职责与Follower基本一致,但Observer不参与任何形式的投票,包括事务请求Proposal的投票和Leader选举投票。只提供非事务服务,通常用于在不影响集群事务处理能力的前提下提升集群的非事务处理能力。
  • 会话(Session):Zookeeper中,默认开放2181端口,客户端通过一个TCP长连接与服务端保持连接,客户端可以通过心跳检测与服务器保持有效会话,能够向Zookeeper服务器发送请求并接受响应,还能通过该连接接收来自服务器的Watch事件通知。
  • 数据节点(ZNode):数据模型中的数据单元,是一颗树,又斜杠(/)进行分割路径。ZNode分为临时节点以及持久节点。SEQUENTIAL该属性自动在其节点后面添加一个由父节点维护的自增整型数字。
  • 版本:Zookeeper中的版本有点像乐观锁中的version,但是包含的版本信息更多。Zookeeper维护一个Stat的数据结构,里边记录ZNode的三个数据版本,分别version(当前ZNode的版本)、cversion(当前ZNode子节点的版本)、aversion(当前ZNode的ACL版本)。
  • Watcher(事件监听器):Zookeeper允许用户在指定节点上注册Watcher事件,当被触发时候,Zookeeper服务端会将事件通知到感兴趣的客户端上去,该机制是实现分布式协调服务的重要特性。
  • ACL(权限控制):
    • CREATE 创建子节点的权限
    • READ 获取节点数据和子节点列表的权限
    • WRITE 更新节点数据的权限
    • DELETE 删除子节点的权限
    • ADMIN 设置节点ACL的权限

基本命令使用

  • create命令

      create [-s] [-e] path data acl 
      # -s代表顺序节点
      # -e代表临时节点
      # 默认不添加即代表持久节点
    
  • ls命令

    ls path [watch] # path表示的是指定数据节点的节点路径
    
  • get命令

    # 使用get命令,可以获取ZooKeeper指定节点的数据内容和属性信息
    get path [watch]
    
  • set命令

    # data为更新的内容。version参数,节点的数据有版本概念,说明本次更新操作是基于ZNode的哪一个数据版本进行的。
    set path data [version]
    
  • delete命令

    delete path [version]
    # 要删除某个节点,必须保证该节点下的没有子节点
    
返回文章列表 文章二维码 打赏
本页链接的二维码
打赏二维码