ZooKeeper
1. ZK工作原理
Zookeeper的核心是原子广播,这个机制保证了各个server之间的同步。实现这个机制的协议叫做Zab协议。
两种模式:
- 恢复模式(选主)
- 广播模式(状态同步)
1.1 选举
节点有三种类型,leader,follower,observer
leader:主节点,负责进行投票的发起和决议,更新系统状态
follower:从节点,在主节点挂了之后会参与选举。
observer:观察者,不参与选举过程,只是用来连接client,分担压力。
选举过程采取的是半数通过的机制,因此一般都是推荐奇数台机器。
当每次加入新机器的时候就会进入恢复模式,去寻找新的leader,然后进行状态同步。一旦选择了leader那么就会进入广播模式,进行数据的转发。
1.2 同步
广播模式需要保证proposal被按顺序处理,因此zk采用了递增的事务id号(zxid)来保证。所有的提议(proposal)都在被提出的时候加上了zxid。
zxid为64位的数字,高32位epoch用来表示leader的关系,低32位来用来递增计数,来保证提议的顺序。
2 特点
2.1 Zookeeper 的读写机制
» Zookeeper是一个由多个server组成的集群
» 一个leader,多个follower
» 每个server保存一份数据副本
» 全局数据一致
» 分布式读写
» 更新请求转发,由leader实施
3. 节点类型
» Znode有两种类型,短暂的(ephemeral)和持久的(persistent)
» Znode的类型在创建时确定并且之后不能再修改
» 短暂znode的客户端会话结束时,zookeeper会将该短暂znode删除,短暂znode不可以有子节点
» 持久znode不依赖于客户端会话,只有当客户端明确要删除该持久znode时才会被删除
» Znode有四种形式的目录节点
» PERSISTENT(持久的)
» EPHEMERAL(暂时的)
» PERSISTENT_SEQUENTIAL(持久化顺序编号目录节点)
» EPHEMERAL_SEQUENTIAL(暂时化顺序编号目录节点)