为什么大数据集群搭建时奇数台机器最好

奇数台机器的原因是由于zookeeper的选举规则:leader选举导致,

要求 可用节点数量 >总节点数量/2 (注意非≥)

处于这种规则有两种考虑:

一、 防止由脑裂造成的集群不可用

首先,什么是脑裂?集群的脑裂通常是发生在节点之间通信不可达的情况下,集群会分裂成不同的小集群,小集群各自选出自己的master节点,导致原有的集群出现多个master节点的情况,这就是脑裂。

              举例:集群节点为4个和5个,脑裂为两个小集群分别举例。

              (a)当集群节点为4个时,脑裂后

(1)      A:1个节点 ,B:3个节点 或A、B互换

(2)      A:2个节点 ,B:2个节点

 第一种情况,满足选举条件,第二种情况两个小集群的数量都=总节点数量/2,无法选举出leader,导致zookeeper彻底不提供服务,使得集群失效。

(a)当集群节点为4个时,脑裂后

(1)      A:1个节点 ,B:3个节点 或A、B互换

(2)      A:2个节点 ,B:2个节点

两种情况总有一个集群满足 可用节点数量>总节点数量/2,所以zk总能选举出leader,仍然对外提供服务,只不过一部分节点失效了而已。

二、容错能力相同的情况下,奇数台更节省资源

举两个例子,来考虑那种情况更节省资源

 (1) 假如zookeeper集群1 ,有3个节点,3/2=1.5 ,  即zookeeper想要正常对外提供服务(即leader选举成功),至少需要2个节点是正常的。换句话说,3个节点的zookeeper集群,允许有一个节点宕机。

 (2) 假如zookeeper集群2,有4个节点,4/2=2 , 即zookeeper想要正常对外提供服务(即leader选举成功),至少需要3个节点是正常的。换句话说,4个节点的zookeeper集群,也允许有一个节点宕机。

总结:集群1与集群2都有 允许1个节点宕机 的容错能力,但是集群2比集群1多了1个节点。在相同容错能力的情况下,本着节约资源的原则,zookeeper集群的节点数维持奇数个更好一些。

posted @ 2021-04-09 09:46  nohert  阅读(523)  评论(0编辑  收藏  举报