本文主要介绍Zookeeper集群的配置和运行
启动Zookeeper的单机模式是非常简单的,它在用作开发、测试和评估时间很方便。然而在生产环境下,为了保障服务的高可用性应该要使用集群模式。
有关Zookeeper的简介和单机模式示例请参考:
Zookeeper简介和入门示例
在集群模式下,所有配置文件和单机相比是基本相同的,只有一点细微的差别。
本文的运行环境
OS: CentOS 7
Zookeeper: 3.4.9
server-1: 192.168.1.106
server-2: 192.168.1.107
server-3: 192.168.1.108
编辑zoo.cfg文件
- server-1的配置文件
vi /usr/local/zookeeper/conf/zoo.cfg
tickTime=2000
dataDir=/var/zookeeper
clientPort=2181
initLimit=10
syncLimit=5
# 集群定义
server.1=0.0.0.0:2888:3888
server.2=192.168.1.107:2888:3888
server.3=192.168.1.108:2888:3888
initLimit
允许各follower和leader之间的连接时间,超过tickTime*initLimit时会重新投票选举leadersyncLimit
leader和follower之间的能容忍的心跳检测时间,超过tickTime*syncLimit则从follower列表里剔除超时的follower
server.X中的X是指服务器的数字代号,在服务器启动的时候会去dataDir(这里是/var/zookeeper)目录查找myid文件,myid文件里就存储这个代号
关于集群定义里汲及到两个端口:2888和3888
第一个通讯端口2888是服务器之间通讯使用的,第二个端口3888是选举新leader使用的。
- server-2
tickTime=2000
dataDir=/var/zookeeper
clientPort=2181
initLimit=10
syncLimit=5
server.1=192.168.1.106:2888:3888
server.2=0.0.0.0:2888:3888
server.3=192.168.1.108:2888:3888
- server-3
tickTime=2000
dataDir=/var/zookeeper
clientPort=2181
initLimit=10
syncLimit=5
server.1=192.168.1.106:2888:3888
server.2=192.168.1.107:2888:3888
server.3=0.0.0.0:2888:3888
在每台服务器下加入myid
touch /var/zookeeper/myid
vi /var/zookeeper/myid
里面填的是当前服务器的数字
第一台为配置文件填的server.1的1,第二台为2,依至类推
开放防火墙端口
- CentOS7
firewall-cmd --zone=public --add-port=2181/tcp --permanent
firewall-cmd --zone=public --add-port=2888/tcp --permanent
firewall-cmd --zone=public --add-port=3888/tcp --permanent
systemctl restart firewalld.service
- CentOS6
-A INPUT -m state --state NEW -m tcp -p tcp --dport 2183 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 2883 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3883 -j ACCEPT
service iptables restart
启动Zookeeper集群
- 分别在各个节点使用 zkServer.sh start 启动
zkServer.sh start
查看各个服务节点Zookeeper的状态
- 使用zkServer.sh status命令
[root@server-1 ~]# zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Mode: leader
[root@server-2 ~]# zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Mode: follower
[root@server-3 ~]# zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Mode: follower
注:控制台输出[root@server-1 ~],这个server-1可以在/etc/hostname中修改
验证Zookeeper集群
在三台服务器的控制台上打开zk客户端
zkCli.sh
server-1
[zk: localhost:2181(CONNECTED) 0] ls /
[zookeeper]
server-2
[zk: localhost:2181(CONNECTED) 0] ls /
[zookeeper]
server-3
[zk: localhost:2181(CONNECTED) 0] ls /
[zookeeper]
在其中一台服务上增加znode
- server-1
[zk: localhost:2181(CONNECTED) 1] create /massive this_is_cluster
Created /massive
[zk: localhost:2181(CONNECTED) 2] ls /
[massive, zookeeper]
[zk: localhost:2181(CONNECTED) 3]
其它节点查看
- server-2
[zk: localhost:2181(CONNECTED) 1] ls /
[massive, zookeeper]
- server-3
[zk: localhost:2181(CONNECTED) 1] ls /
[massive, zookeeper]