zhaoyu@home:~$

zk

zk是一个分布式数据一致性解决方案。典型的应用有数据发布订阅,负载均衡,命名服务,集群管理,master选举,分布式锁等。zk可以保证如下 分布式一致性特性。

  • 顺序一致性

    从同一个客户端发起的事务请求,最终会严格按照其发起的顺序被应用到zk中。

  • 原子性

    所有的事务请求的处理结果在所有机器上应用的结果是一致的,即要么所有机器都成功引用了某个事务,要么都没有应用。

  • 可靠性

    服务器成功应用了一个事务,那么这个事务会被保存下来。

  • 实时性

    一旦事务被应用,那么客户端能够立即从服务器上读取到这个事务的变更。

zk的严格的顺序访问控制使得客户端能够基于zk实现复杂的同步原语。

zk的基本概念

集群角色

典型的集群模式就是master/slave模式,master负责所有的写操作,slave通过异步复制方式获取新的数据,并提供读取服务。
但是在zk中,使用了Leader,Follower,Observer三个角色,zk集群中通过leader选取过程选取一个机器作为Leader,为客户端提供读和写 服务,其他机器称为Follower和Observer,他们都提供读服务。区别在于Observer不参与Leader选举过程,也不参与写操作的过半写操作策略

会话

zk的客户端和服务器会建立一个TCP长链接。通过心跳检测和服务器保持有效的会话。同时通过该链接接受来自服务器的Watch时间通知。会话的 sessionTimeout值设置会话的超时时间。当服务器压力太大、网络故障,链接会断开。

数据节点(ZNode)

集群中的机器我们也会称为节点,但是这里的数据节点不是指机器节点,是指数据模型中的数据单元,我们称为ZNode。zk中的所有数据都存放在内存中, 数据模型是一颗树(ZNode Tree),有斜杠进行分割,如/foo/path1。ZNode又分为持久节点和临时节点,持久节点指创建后除非主动移除,这个 ZNode会一致保存在zk上,临时节点则不一样,它会和会话绑定,一旦会话失效,这个客户端创建的所有临时节点都会被移出。

ACL(Access Control Lists)

zk使用ACL控制权限,类似于UNIX文件系统中的权限控制,有如下5中:

  • CREATE: 创建子节点的权限。
  • READ: 获得节点数据和子节点列表的权限。
  • WRITE: 更新节点数据的权限。
  • DELETE: 删除子节点的权限。
  • ADMIN: 设置节点ACL的权限。

其中CREATE和DELETE都是针对子节点的。

Watcher

Watcher(时间监听器)允许用户在指定节点上注册一些Watcher,在一些特定事件触发的时候,zk服务器会将事件通知到感兴趣的客户端上。是zk实现 分布式协调服务的重要特性。

版本

zk会将ZNode维护为一个stat的数据结构,stat中记录了ZNode的三个数据版本,分别是version(ZNode的当前版本)、cversion(当前Znode的子节点版本), aversion(当前ZNode的ACL版本)。

zkclient连接服务器

zkCli.sh  -timeout 5000  -r  -server  ip:2181