集群角色

Leader:为客户端提供读写服务
Follow:为客户端提供读服务
Observer:为客户端提供读服务,不参与投票,也不参与“过半写成功”策略,因为既提升了集群的读性能,又不影响写性能。

集群配置

在172.17.0.2中的conf下的zoo.cfg,添加以下三行

server.1=172.17.0.2:2888:3888
server.2=172.17.0.3:2888:3888
server.3=172.17.0.4:2888:3888

zoo.cfg配置格式为server.id=host:port:port,有几个节点,就写几行配置。

  • id:是用来标识当前节点在集群的机器序号,就是下面的myid文件的内容,这个内容只能是数字,并且范围为1-255。
  • host:就是节点的ip地址
  • 第一个port:follow节点与leader节点交换信息的端口
  • 第二个port:选举leader时,各个节点互相通信的端口

在dataDir指定的目录下,创建一个myid文件,内容就是当前节点的server id。进入dataDir目录,查看文件

[root@d775e33fffb5 conf]# cd /tmp/zookeeper/
[root@d775e33fffb5 zookeeper]# ls
myid version-2 zookeeper_server.pid

配置observer。
在zoo.cfg中加入下面一行数据

peerType=observer

zoo.cfg配置格式为server.id=host:port:port:observer
配置完成后,就可以看到对nodes的操作,会同步到其他节点上,这边不做演示了,简单演示命令参考zookeeper安装及简单命令

为什么是奇数

官方建议,集群的个数是奇数,是因为在zookeeper集群中,有一半节点存活,那zookeeper集群就是可用的。
我们假设当前有5个节点,为了保证可用性,我们最多允许挂掉2个。
如果当前是6个节点,也还是运行挂掉2个,因为如果是3个,就没有超过一半的节点存活。
从容灾能力来说,5个和6个,都是允许2个服务挂掉,但是6就多部署了一个,浪费了资源。

容灾部署

zookeeper的过半设计原则,很好的解决了单点的问题,但是如果节点都在同一机房的话,还是会因为不可抵抗的自然因素,导致全部节点不可用,这个时候,我们就可以多地部署,比如三机房部署,双机房部署。

  • 三机房部署,根据过半设计原则,只要两个机房的数量,超过一半,那第三个机房不可用,zookeeper集群还是可用的。所以假设总数是9,第三个机房由于不能超过一半,那他就是4,其他两个机房就是5的,比如1,4或2,3。这样任意一个机房不可用,剩余的两个机房肯定都大于等于5,zookeeper集群还是可以用的。
  • 双机房部署,这个时候,只能让好的服务器,多部署节点了

大军
847 声望183 粉丝

学而不思则罔,思而不学则殆