Zookeeper集群为何是奇数

1. 简介

在 ZooKeeper 集群中,会有三种角色,Leader、 Follower、 Observer 分别对应着总统、议员、观察者。

半数以上投票通过:客户端的增删改操作无论访问到了哪台ZooKeeper服务器,最终都会被转发给Leader服务器,再由Leader服务器分给ZooKeeper 集群中所有Follower服务器去投票(投票指的是在内存中做增删改操作),半数投票通过就被认为操作可执行(commit),否则不可执行。

Observer观察者服务器是针对于查询操作做负载的,Observer与Follower服务器最大的不同在于Observer没有投票权,在客户端发起的增删改操中,Leader服务器是不会把消息传递给Observer服务器让其投票的。但是查询操作跟Follower一样,客户端的查询到了Observer服务器节点,Observer服务器去访问Leader服务器取最新的数据然后返回给客户端。其中Observer并不计算在投票机器数目中,半数工作不包括Observer机器数。

2. 容错

由于在增删改操作中需要半数以上服务器通过,来分析以下情况:

  • 2台服务器,至少2台正常运行才行(2的半数为1,半数以上最少为2),正常运行1台服务器都不允许挂掉。
  • 3台服务器,至少2台正常运行才行(3的半数为1.5,半数以上最少为2),正常运行可以允许1台服务器挂掉。
  • 4台服务器,至少3台正常运行才行(4的半数为2,半数以上最少为3),正常运行可以允许1台服务器挂掉。
  • 5台服务器,至少3台正常运行才行(5的半数为2.5,半数以上最少为3),正常运行可以允许2台服务器挂掉。
  • 6台服务器,至少3台正常运行才行(6的半数为3,半数以上最少为4),正常运行可以允许2台服务器挂掉。

通过以上可以发现,3台服务器和4台服务器都最多允许1台服务器挂掉,5台服务器和6台服务器都最多允许2台服务器挂掉。但是明显4台服务器成本高于3台服务器成本,6台服务器成本高于5台服务器成本,这是由于半数以上投票通过决定的。

3. 防脑裂

一个ZooKeeper集群中,可以有多个Follower、Observer 服务器,但是必需只能有一个Leader服务器。如果Leader服务器挂掉了,剩下的服务器集群会通过半数以上投票选出一个新的Leader服务器

集群互不通讯情况:

  • 一个集群3台服务器,全部运行正常,但是其中1台裂开了,和另外2台无法通讯。3台机器里面2台正常运行过半票可以选出一个Leader。

  • 一个集群4台服务器,全部运行正常,但是其中2台裂开了,和另外2台无法通讯。4台机器里面2台正常工作没有过半票以上达到3,无法选出Leader正常运行。

  • 一个集群5台服务器,全部运行正常,但是其中2台裂开了,和另外3台无法通讯。5台机器里面3台正常运行过半票可以选出一个Leader。

  • 一个集群6台服务器,全部运行正常,但是其中3台裂开了,和另外3台无法通讯。6台机器里面3台正常工作没有过半票以上达到4,无法选出Leader正常运行。

通可以上分析可以看出,为什么ZooKeeper集群数量总是单出现,主要原因还是在于防脑裂。如果出现脑裂,ZooKeeper集群就无法正常运行了。

你可能感兴趣的:(Zookeeper集群为何是奇数)