【郑州校区】大数据基础加强阶段2之ZooKeeper 选举机制 zookeeper 默认的算法是 FastLeaderElection,采用投票数大于半数则胜出的逻辑。 6.1 . 概念 服务器 ID 比如有三台服务器,编号分别是 1,2,3。编号越大在选择算法中的权重越大。 选举状态 LOOKING,竞选状态。 FOLLOWING,随从状态,同步 leader 状态,参与投票。 OBSERVING,观察状态,同步 leader 状态,不参与投票。LEADING,领导者状态。 数据 ID 服务器中存放的最新数据 version。 值越大说明数据越新,在选举算法中数据越新权重越大。逻辑时钟 也叫投票的次数,同一轮投票过程中的逻辑时钟值是相同的。每投完一次票这个数据就会增加,然后与接收到的其它服务器返回的投票信息中的数值相比, 根据不同的值做出不同的判断。
6.2 . 全新集群选举假设目前有 5 台服务器,每台服务器均没有数据,它们的编号分别是 1,2,3,4,5,按编号依次启动,它们的选择举过程如下: l 服务器 1 启动,给自己投票,然后发投票信息,由于其它机器还没有启动所以它收不到反馈信息,服务器 1 的状态一直属于 Looking。 l 服务器 2 启动,给自己投票,同时与之前启动的服务器 1 交换结果,由于服务器 2 的编号大所以服务器 2 胜出,但此时投票数没有大于半数, 所以两个服务器的状态依然是 LOOKING。 l 服务器 3 启动,给自己投票,同时与之前启动的服务器 1,2 交换信息, 由于服务器 3 的编号最大所以服务器 3 胜出,此时投票数正好大于半数, 所以服务器 3 成为领导者,服务器 1,2 成为小弟。 l 服务器 4 启动,给自己投票,同时与之前启动的服务器 1,2,3 交换信息, 尽管服务器 4 的编号大,但之前服务器 3 已经胜出,所以服务器 4 只能成为小弟。 l 服务器 5 启动,后面的逻辑同服务器 4 成为小弟。 6.3 . 非全新集群选举对于运行正常的 zookeeper 集群,中途有机器 down 掉,需要重新选举时, 选举过程就需要加入数据 ID、服务器 ID 和逻辑时钟。 数据 ID:数据新的 version 就大,数据每次更新都会更新 version。服务器 ID:就是我们配置的 myid 中的值,每个机器一个。 逻辑时钟:这个值从 0 开始递增,每次选举对应一个值。 如果在同一次选举中,这个值是一致的。 这样选举的标准就变成: 1、逻辑时钟小的选举结果被忽略,重新投票; 2、统一逻辑时钟后,数据 id 大的胜出; 3、数据 id 相同的情况下,服务器 id 大的胜出; 根据这个规则选出 leader。 传智播客·黑马程序员郑州校区地址 河南省郑州市 高新区长椿路11号大学科技园(西区)东门8号楼三层
|