zookeeper集群搭建

为什么 zookeeper 集群的节点数是奇数

zookeeper 集群通常是用来对用户的分布式应用程序提供协调服务的,为了保证数据的一致性,对 zookeeper 集群进行了这样三种角色划分:leader、follower、observer分别对应着主、从、观察者。

1
2
3
leader : 负责进行投票的发起和决议,更新系统状态。
follower : 用于接收客户端请求并向客户端返回结果以及在选举过程中参与投票。
observer : 通常是针对于查询操作做负载的。 observer 与 follower 节点最大的不同在于 observer 没有投票权,在客户端发起的增删改操中, leader 节点是不会把消息传递给 observer 让其投票的。但是查询操作跟 follower 一样,客户端的查询到了 observer 节点, observer 节点会去访问 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

----------本文结束感谢您的阅读----------
xiaolong wechat
一只程序猿对世界的不完全理解