集群角色
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集群还是可以用的。
- 双机房部署,这个时候,只能让好的服务器,多部署节点了
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。