Zookeeper的选举机制
0、为什么要进行Leader选举?
**Leader 主要作用是保证分布式数据一致性,即每个节点的存储的数据同步。**遇到以下两种情况需要进行Leader选举:
1)服务器初始化启动
2)服务器运行期间无法和Leader保持连接,Leader节点崩溃,逻辑时钟崩溃。
1、服务器初始化时Leader选举
zookeeper由于其自身的性质(半数存活机制),一般建议选取奇数个节点进行搭建分布式服务器集群。以3个节点组成的服务器集群为例,说明服务器初始化时的选举过程。启动第一台安装zookeeper的节点时,无法单独进行选举,启动第二台时,两节点之间进行通信,开始选举Leader。
1)每个Server投出一票。他们两都选自己为Leader,投票的内容为(SID,ZXID)。SID即Server的id,安装zookeeper时配置文件中所配置的myid;ZXID,事务id,为节点的更新程度,ZXID越大,代表Server对Znode的操作越新。由于服务器初始化,每个Sever上的Znode为0,所以Server1投的票为(1,0),Server2为(2,0)。
两Server将各自投票发给集群中其他机器。
2)每个Server接收来自其他Server的投票。集群中的每个Server先判断投票有效性,如检查是不是本轮的投票,是不是来Looking状态的服务器投的票。