zookeeper集群

集群角色

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

集群配置

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

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安装及简单命令code

为何是奇数

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

容灾部署

zookeeper的过半设计原则,很好的解决了单点的问题,可是若是节点都在同一机房的话,仍是会由于不可抵抗的天然因素,致使所有节点不可用,这个时候,咱们就能够多地部署,好比三机房部署,双机房部署。ip

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