学习是一种浮躁的事情,要静下心来慢慢的品味。 -- 小徐
官网:http://zookeeper.apache.org/
zookeeper 主要负责管理机器的正常运行,如果一台机器突然死掉,利用zookeeper的机制可以快速的启动另一台备份的机器,zookeeper在这一方面做出了杰出的贡献,底层实现的算法是fast paxos 与baxic paxos算法,当zookeeper失去太多的leader或者太多的follower时会进入回复的状态,进行选举。
ZNode用来描述ZooKeeper中的数据节点,它持有一个状态数据结构(stat),此结构中包含数据更新的版本号、访问权限(ACL)更新的版本号、时间戳。这些版本号和时间戳使ZooKeeper可以验证缓存有效性和协调更新。每当ZNode中的数据更新时,版本号都会递增。
ZooKeeper主要的职责为管理用户提交的数据,以及为用户程序提供数据节点监听服务。
Zookeeper 有两种角色分别是leader 与follower (obsever), 在选举时机器超过一半即可存活,一般的机器配置成单个数
1、每台机器上保存的数据一致,用户不管访问那台机器获取的数据信息都是一致的
2、分布式的读写,更细请求转发都是由leader转发的
3、数据更新原子性,一次数据的更新要不成功要不失败
4、每个节点在zookeeper中叫做znode,并且其有一个唯一的路径标识
5、实时性,在一定的范围内,client能读取到最新的数据。
6、数据更新原子性,一次数据更新要么成功(半数以上节点成功),要么失败
那么,初始化的时候,是按照上述的说明进行选举的,但是当zookeeper运行了一段时间之后,有机器down掉,重新选举时,选举过程就相对复杂了,在选举时zookeeper有Fast Paxos与Basic Paxos算法来辅助选举,系统默认的选举算法为fast paxos。
需要加入数据version、leader id和逻辑时钟。
数据version:数据新的version就大,数据每次更新都会更新version。
Leader id:就是我们配置的myid中的值,每个机器一个。
逻辑时钟:这个值从0开始递增,每次选举对应一个值,也就是说: 如果在同一次选举中,那么这个值应该是一致的 ; 逻辑时钟值越大,说明这一次选举leader的进程更新.
选举的标准就变成:
1、逻辑时钟小的选举结果被忽略,重新投票
2、统一逻辑时钟后,数据id大的胜出
3、数据id相同的情况下,leader id大的胜出
根据这个规则选出leader。
Zookeeper有两种节点四种模式,有持久的一临时的两种节点,持久节点(PERSISTENT)、持久顺序节点(PERSISTENT_SEQUENTIAL)、临时节点(EPHEMERAL)、临时顺序节点(EPHEMERAL_SEQUENTIAL)四种模式。
ZK的节点有5种操作权限:
CREATE、READ、WRITE、DELETE、ADMIN 也就是 增、删、改、查、管理权限,这5种权限简写为crwda(即:每个单词的首字符缩写)。
代码显示所示zookeeper的权限: