【ZooKeeper Notes 24】Leader选举杂记1

无论使用哪种Leader选举方法,一个机器要想成为Leader,都必须具备以下两点:

- Leader一定是所有机器中zxid最新的。

- 集群中必须大于等于quorum台机器同意。


当一个Leader被选出后,那么其余的机器都会和这个机器来连接上,并开始同步状态。如果一个Follower落后的状态过多的话,那么就会将整个snapshot同步给他。


新的Leader会根据当前最大的zxid来确定下次开始的zxid。当所有的Follower已经和Leader保持同步之后,Leader会向所有的Follower发出“NEW_LEADER”的提议,一旦过半的机器接受了这个提议,

也就是说这个提议能够被提交,接下去Leader才被真正激活,并开始对外服务:开始接收新的请求并处理。


这个算法听起来有点复杂,但实际上,只要遵守一下5点就可以选出Leader

- Follower在和Leader保持同步之后,就会对“NEW_LEADER”提议响应ACK。

- A follower will only ACK a NEW_LEADER proposal with a given zxid from a single server.

- 一旦集群中已经有过半的机器响应了ACK, 那么Leader就会提交“NEW_LEADER”提议

- 一旦“NEW_LEADER”已经被提交,也就是说,Leader选举完毕,Leader确定后,之后Follower就会提交所有来自Leader的状态变更。

- 在“NEW_LEADER”提议被提交之前,也就是说在完成Leader选举之前,Leader将不再接收任何来自客户端的任何请求。


基于以上的5个规则,即使在Leader选举的时候出现问题,也不会有事。因为只要“NEW_LEADER”提议没有被过半的机器接受,那么就不会提交。因此,在这种情况下,剩下的所有机器会开始新一轮的Leader选举。


你可能感兴趣的:(zookeeper)