2、Zookeeper高可用集群的容灾

2.1 服务器数量的奇数与偶数

       无论是写操作投票,还是Leader选举投票,都必须过半才能通过,也就是说若出现超过半数的主机宕机,则永远无法通过。基于该理论,由3台主机构成的集群最多允许1台宕机,由5台主机构成的集群最多允许2台宕机,由6台主机构成的集群最多也是允许2台宕机。即5台和6台主机构成的集群容灾能力是一样的。

 

        所以,基于容灾能力的原因,建议还是使用奇数服务器数量去构成集群,以避免资源的浪费。

        但是,从系统吞吐量上来说,6台主机的性能一定高于5台主机。所以,从这个角度看,6台主机并没有浪费资源。

 

2.2 容灾设计方案

       对于一个高可用的系统,除了要设置多台主机部署为一个集群来避免单点问题外,还需要考虑将集群部署在多个机房、多个楼宇。对于多个机房、多个楼宇中的集群也不是随意部署的。

       下面就多个机房的部署进行分析:

       在多机房部署中,要充分考虑“过半原则”,即尽量确保zk集群有过半机器能够正常运行。

(1)三机房部署

        在生产环境下,三机房部署是最常见的、容灾性最好的部署方案。

        假定zk集群中机器总数(不含Observer)为N,三个机房中部署的机器数量分别为N1、N2、N3。

        AN1的值

        N1 = (N - 1)/ 2。即要保证第一机房中具有刚不到半数的主机。

        15台,N1 = (15 – 1)/2 = 7

 

        BN2的值

        N2的值是一个取值范围,1 ~ (N – N1)/ 2。

        (15 – 7)/2 = 4

 

        CN3的值

        N3 = N – N1 – N2。 15 – 7 - 3 = 5

 

(2)双机房部署

       zk官网没有给出较好的双机房部署容灾方案。只能让其中一个机房部署的zk主机数超过半数,使其成为主机房,而另一个机房部署的zk主机数少于一半。当然,若主机房出现问题,那么整个集群都会瘫痪。

 

2.3 扩容与缩容

       水平扩展对于提高系统服务能力,是一种非常重要的方式。但zk对于水平扩容与缩容多的并不完美,主机数量的变化需要修改配置文件后整个集群进行重启。集群重启的方式有两种:

2.3.1 整体重启

       整体重启是指:将整个集群停止,然后更新集群所有主机的配置后再次重启集群。该方式会使集群停止对外服务,所以该方式要慎用。

2.3.2 部分重启

       部分重启是指:每次重启只重启小部分主机,注意不能过半数,因为重启的主机过半,则意味剩余的主机不会过半,那么剩下的主机将无法产生合法投票结果,即若出现宕机则无法进行选举,不宕机无法提供写服务。