为什么 zookeeper 集群的节点数是奇数
zookeeper 集群通常是用来对用户的分布式应用程序提供协调服务的,为了保证数据的一致性,对 zookeeper 集群进行了这样三种角色划分:leader、follower、observer分别对应着主、从、观察者。
1 | leader : 负责进行投票的发起和决议,更新系统状态。 |
集群可以保证在每台机器数据保持一致的情况下,客户端每次发起的查询操作,集群节点都能返回同样的结果。但是对于客户端发起的增、删、改等能改变数据的操作,如果集群中的多台机器各自修改数据,那么就无法保证数据的一致性。
那么,对于增、删、改操作, zookeeper 集群规定只有 leader 节点才有权利去执行修改数据的操作,而 follower 节点即使接收到客户端发起的数据修改操作,也要将其转交给 leader 来处理, leader节点接收到修改数据的请求后,会向所有 follower 节点广播一条消息,让其执行操作, follower 节点执行完后,需要向 leader 节点回复执行结果。当 leader 节点收到半数以上的 follower 节点的确认消息后,便会判定该操作执行完毕,然后向所有 follower 节点广播该操作已经生效。
所以在 zookeeper 集群中, leader 节点是不可缺少的, leader 节点也是由所有 follower 节点选举产生,而且只有一个。
//todo leader节点选取逻辑
zookeeper 集群中 leader 的选取逻辑,要求 可用节点数量 > 总节点数量 / 2,注意,这里是 > ,并非 >= 。
为什么集群节点数量要奇数个,主要从以下两个方面考虑。
防脑裂导致集群不可用
在一个 zookeeper 集群中,可以有多个 follower 和 observe 节点,但是有且只能有一个 leader 节点。如果 leader 节点不可用或者宕机,剩下的所有节点机器会投票产生新的 leader 节点。
集群脑裂: 一个集群由于网络不通或者其他原因分裂成多个小集群的现象。
容错率和成本控制
https://www.cnblogs.com/lishiqi-blog/p/12314111.html
https://www.cnblogs.com/ysocean/p/9860529.html
https://blog.csdn.net/jiangxiulilinux/article/details/96433560