1、环境说明
ZooKeeper-server:10.10.36.126
dubbo-admin-server:10.10.36.128
ZooKeeper1:2181,2881,3881
ZooKeeper2:2182,2882,3882
ZooKeeper3:2183,2883,3883
2、ZooKeeper安装
tar -zxvf zookeeper-3.4.9.tar.gz
mv zookeeper-3.4.9 ./zookeeper/node-01
mv zookeeper-3.4.9 ./zookeeper/node-02
mv zookeeper-3.4.9 ./zookeeper/node-03
cd node-01
mkdir data
mkdir logs
vi ./data/myid
内容:
1
(node-02中为2,node-03中为3)
cp ./conf/zoo_sample.cfg ./conf/zoo.cfg
vi ./confzoo.cfg
dataDir=/home/wangzi/soft/zookeeper/node-01/data
dataLogDir=/home/wangzi/soft/zookeeper/node-01/logs
clientPort=2181
server.1=10.10.36.126:2881:3881
server.2=10.10.36.126:2882:3882
server.3=10.10.36.126:2883:3883
node-02修改如下:
dataDir=/home/wangzi/soft/zookeeper/node-02/data
dataLogDir=/home/wangzi/soft/zookeeper/node-02/logs
clientPort=2182
server.1=10.10.36.126:2881:3881
server.2=10.10.36.126:2882:3882
server.3=10.10.36.126:2883:3883
node-03修改:
dataDir=/home/wangzi/soft/zookeeper/node-03/data
dataLogDir=/home/wangzi/soft/zookeeper/node-03/logs
clientPort=2183
server.1=10.10.36.126:2881:3881
server.2=10.10.36.126:2882:3882
server.3=10.10.36.126:2883:3883
参数说明:
tickTime=2000
tickTime 这个时间是作为 Zookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每
个 tickTime 时间就会发送一个心跳。
initLimit=10
initLimit 这个配置项是用来配置 Zookeeper 接受客户端(这里所说的客户端不是用户连接 Zookeeper
服务器的客户端,而是 Zookeeper 服务器集群中连接到 Leader 的 Follower 服务器)初始化连接时最长
能忍受多少个心跳时间间隔数。当已经超过 10 个心跳的时间(也就是 tickTime)长度后 Zookeeper 服
务器还没有收到客户端的返回信息,那么表明这个客户端连接失败。总的时间长度就是 10*2000=20 秒。
syncLimit=5
syncLimit 这个配置项标识 Leader 与 Follower 之间发送消息,请求和应答时间长度,最长不能超过多少
个 tickTime 的时间长度,总的时间长度就是 5*2000=10 秒。
dataDir=/home/wusc/zookeeper/node-01/data
dataDir顾名思义就是Zookeeper保存数据的目录,默认情况下Zookeeper将写数据的日志文件也保存在
这个目录里。
clientPort=2181
clientPort 这个端口就是客户端(应用程序)连接 Zookeeper 服务器的端口,Zookeeper 会监听这个端
口接受客户端的访问请求。
server.A=B:C:D
A 是一个数字,表示这个是第几号服务器(与./data/myid中的内容一致);
B 是这个服务器的 IP 地址(或者是与 IP 地址做了映射的主机名);
C 第一个端口用来集群成员的信息交换,表示这个服务器与集群中的 Leader 服务器交换信息的端口;
D 是在 leader 挂掉时专门用来进行选举 leader 所用的端口。
3、配置防火墙
打开2181,2182,2183,2881,2882,2883,3881,3882,3883端口
firewall-cmd --zone=public --add-port=2181/tcp --permanent
... ...
firewall-cmd --reload
4、配置dubbo管控台
dubbo管控台的安装已在之前的博客中说明,此处不再赘述
vi ./dubbo-admin-tomcat/webapps/ROOT/WEB-INF/dubbo.properties
修改内容如下:
dubbo.registry.address=zookeeper://10.10.36.126:2181?backup=10.10.36.126:2182,10.10.36.126:2183
5、启动zookeeper
./bin/zkServer.sh start
jps
输出如下:
4563 QuorumPeerMain
4635 Jps
4604 QuorumPeerMain
4526 QuorumPeerMain
可以得知zookeeper启动成功
6、配置服务提供者
<dubbo:registry protocol="zookeeper" address="10.10.36.126:2181,10.10.36.126:2182,10.10.36.126:2183" />
7、查看各zookeeper的状态信息
$ ./node-01/bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /home/wangzi/soft/zookeeper/node-01/bin/../conf/zoo.cfg
Mode: follower
$ ./node-02/bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /home/wangzi/soft/zookeeper/node-02/bin/../conf/zoo.cfg
Mode: follower
$ ./node-03/bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /home/wangzi/soft/zookeeper/node-03/bin/../conf/zoo.cfg
Mode: leader
可以得知node-03是主节点,而01和02是从节点
这时,关闭node-03,服务运行正常,再次查看状态
$ ./node-01/bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /home/wangzi/soft/zookeeper/node-01/bin/../conf/zoo.cfg
Mode: follower
$ ./node-02/bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /home/wangzi/soft/zookeeper/node-02/bin/../conf/zoo.cfg
Mode: leader
此时node-02是主节点,node-01是从节点,服务运行正常
如此时关闭node-02,查看01的状态
$ ./node-01/bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /home/wangzi/soft/zookeeper/node-01/bin/../conf/zoo.cfg
Error contacting service. It is probably not running
node-01的状态已经查询不到,但服务依然运行正常,这种情况下,如果重启dubbo管控台,将启动不成功,处于等待状态。
开启node-02或node-03,node-01的状态立马可以查询到,并且dubbo管控台启动成功。
注:zookeeper集群必须半数以上处于正常状态时,才可以推选出主节点,此时的集群才是处于高可用状态。