为什么大数据集群搭建时推荐奇数台服务器
为什么大数据集群搭建时推荐奇数台服务器
前提:zookeeper选举leader的规则是,要求 可用节点数量 >总节点数量/2 (注意非≥)
注:为什么规则要求 可用节点数量 > 集群总结点数量/2 ?
- 如果不这样限制,在集群出现脑裂的时候,可能会出现多个子集群同时服务的情况(即子集群各组选举出自己的leader), 这样对整个zookeeper集群来说是紊乱的。
- 换句话说,如果遵守上述规则进行选举,即使出现脑裂,集群最多也只能回出现一个子集群可以提供服务的情况(能满足节点数量> 总结点数量/2 的子集群最多只会有一个)。
所以要限制 可用节点数量 > 集群总结点数量/2 。
推荐奇数台服务器主要考虑一下两个方面:
防止脑裂造成集群不可用
首先,什么是脑裂?集群的脑裂通常是发生在节点之间通信不可达的情况下,集群会分裂成不同的小集群,小集群各自选出自己的master节点,导致原有的集群出现多个master节点的情况,这就是脑裂。
下面分别以奇数台服务器和偶数台服务器举例,脑裂为两个小集群;
当集群有4个节点时,脑裂后集群情况:
第一种情况:A 一个节点 B 三个节点 (或者相反)
第二种情况:A 两个节点 B 两个节点
首先看第一种情况,两个集群,A有一个节点,B有3个节点, 1<5/2, 3>5/2 B满足选举条件,依然可以选举leader对外提供服务;第二种情况, A有两个节点,B有两个节点,2=5/2,无法选出leader,因此导致zookeeper无法对外提供服务,导致集群失效;
在生产环境中,允许节点不可用,但是集群不能提供服务是致命的;
当集群有5个节点时,脑裂后的集群情况:
- 第一种情况:A 1个节点 B 4个节点 (或者相反)
- 第二种情况:A 2个节点 B 3个节点 (或者相反)
第一种情况,A集群,1<5/2 因此无法选出leader,B集群,4 >5/2,因此可以选出leader,集群仍然可以对外提供服务;
第二种情况,A集群,2=5/2 因此无法选出leader ,B集群,3>5/2,因此可以选出leader,集群仍然可以对外提供服务;
当集群有基数台节点时,无论分裂成那种情况,总是可以选出leader使集群仍然可以对外提供服务,但是当集群节点为偶数台时,最坏情况下集群不可用;
在容错能力相同的情况下,奇数台更节省资源。
leader选举,要求 可用节点数量 > 总节点数量/2 。注意 是 > , 不是 ≥。
举两个例子:
(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集群的节点数维持奇数个更好一些。