zk中有两种角色Leader 和 FllowerLeader是集群各台电脑投票选举出来的。事务【非常重要】一通操作要么同时成立要么都不成立。zookeeper:LeaderZookeeper 集群工作的核心。 1、事务请求写操作的唯一调度和处理者保证集群事务处理的顺序性 举例 比如添加了一个节点删除了节点修改了数据 都是事务操作。 2、集群内部各个服务器的调度者。 3、对于 create setData delete 等有写操作的请求需要统一转发给leader 处理 leader 需要决定编号、执行操作这个过程称为一个事务。 类似于村长Fllower- 处理客户端非事务读操作请求转发事务请求写操作给 Leader - 参与集群 Leader 选举投票 2n-1台可以做集群投票。 1 3 5 7 9 .... - 此外针对访问量比较大的 zookeeper 集群 还可新增观察者角色。 类似于村民Observer- 观察者角色观察 Zookeeper 集群的最新状态变化并将这些状态同步过来其对于非事务请求可以进行独立处理对于事务请求则会转发给 Leader服务器进行处理。 - 不会参与任何形式的投票只提供非事务服务(读数据)通常用于在不影响集群事务处理能力的前提下提升集群的非事务处理能力。 类似于外来人员喝汤了选举的关键看这三个值epoch zxid myid 先比较 epoch 谁大谁是领导 --资历 逻辑时钟 参与过的选举的次数 类似于老党员 zxid 如果epoch 相等就看谁的zxid大谁就是领导 zxid 代表的是事务的次数 如果这个值很大就表示这个机器上的数据比较的新 如果zxid 也相等就看每台电脑上的myid了如果myid谁大谁是领导。 如何查看epoch呢我现在的集群中有三台zk,为什么第二台是领导 zk01 1 zk02 2 zk03 3 启动第一台第一台开始选举自己投自己一票因为超过半数才有效所以zk01不是领导 此时的状态是选举中。 启动第二台先投自己一票然后第一台开始投票比较两者之间谁的myid大 谁的大就投给谁zk02再得一票第二台两票超过了半数领导出现了zk02. 启动第三台发现有领导了投了吧当fllower吧。