开发者学堂课程【大数据 ZooKeeper 快速入门: ZooKeeper 集群选举:非全新集群选举】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/549/detail/7573
ZooKeeper 集群选举:非全新集群选举
非全新集群就是 ZooKeeper 集群已经正常启动并且运行了一段时间且提供服务,中途有机器 down 掉,需要重新选举时,选举过程就需要加入数据 ID、服务器 ID 和逻辑时钟。
数据 ID:数据新的 version 就大,数据每次更新都会更新 version。
在 ZooKeeper 中数据每次更新都会更新 version 版本,因此数据 id 越大表示保存的数据越全,那么在恢复的时候可以尽最大的可能去恢复更多的数据,因此数据 id 大的,优势比较大。
服务器 ID:就是配置的 myid 中的值,每个机器一个。
逻辑时钟:这个值从 О 开始递增,每次选举对应一个值。如果在同一次选举中,这个值是一致的。
如果中间有一次落下了,那么逻辑值就会不一样,因此针对非全新集群,选举标准就改变了。
选举的标准就变成:
1、逻辑时钟小的选举结果被忽略,重新投票;
首先统计逻辑时钟是不是一样,如果某台机器中途 down 掉后,重新修复后再去选举的话逻辑时钟已经落后了。
因此,根据逻辑时钟过滤掉中途一些没有参与选举的,或者上一次选举没有参加的。
2、统一逻辑时钟后,数据 id 大的胜出;
数据 id 就是数据新旧程度,比如恰好有两台机器,它们的逻辑时钟一样,数据 id 也一样,这种情况下还没有产生出谁胜出因此进入第3条。
3、数据 id 相同的情况下,服务器 id 大的胜出;
根据这个规则选出 leader。
用一句话可以概括为:优中选优。数据最大的,、选举一次没落下的、服务器 id 最大的意外着数据是最新的,状态是最好的,这样可以保证服务器稳定。
针对非全新集群选举要注意,选举条件变为了三个:数据ID、服务器 ID 以及逻辑时钟。