ZooKeeper集群部署

130 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第7天,点击查看活动详情

ZooKeeper集群中所有的结点作为一个整体对分布式应用提供服务,集群中每个结点之间都互相连接。节点之间有两个的角色:Leader和Follower。在整个集群运行过程中,只有一个Leader,其他节点的都是Follower。

当zookeeper集群部署时,每个节点在都要了解集群中其他节点ip和的端口信息,即每个zookeeper docker容器之间是点对点互相访问。本文使用host网络模式搭建集群。

创建zookeeper配置文件, 如下:

# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
dataDir=/data
# the port at which the clients will connect
clientPort=2181

# 集群模式下,会多了 server.id=host:port1:port2 的配置
# 以下3个ip需要根据实际修改
server.1=127.0.0.1:2888:3888
server.2=127.0.0.2:2888:3888
server.3=127.0.0.3:2888:3888

2181端口用于ZooKeeper 客户端和服务端之间的通信

2888端口 用于指定 Follower 与 Leader 进行通信和数据同步的端口

3888端口 用于领导者选举。

确保每台服务器的端口都没有被占用, 并且互相之间能够telnet通.

保存后, 将配置文件分别复制到3个节点的相应位置, 三个节点的zookeeper启动命令如下:

# 10.0.0.100
docker run --restart always --name zookeeper_node1 --log-opt max-size=500m --net=host -v $PWD/zookeeper/zoo.cfg:/conf/zoo.cfg -v $PWD/zookeeper/data:/data -v $PWD/logs/zookeeper:/datalog -e ZOO_MY_ID=1 -d zookeeper:3.4.10

# 10.0.0.200
docker run --restart always --name zookeeper_node2 --log-opt max-size=500m --net=host -v $PWD/zookeeper/zoo.cfg:/conf/zoo.cfg -v $PWD/zookeeper/data:/data -v $PWD/logs/zookeeper:/datalog -e ZOO_MY_ID=2 -d zookeeper:3.4.10

# 10.0.0.300
docker run --restart always --name zookeeper_node3 --log-opt max-size=500m --net=host -v $PWD/zookeeper/zoo.cfg:/conf/zoo.cfg -v $PWD/zookeeper/data:/data -v $PWD/logs/zookeeper:/datalog -e ZOO_MY_ID=3 -d zookeeper:3.4.10

这里需要传入一个环境变量ZOO_MY_ID, 其值与配置文件中的ip在执行命令时需要对应起来

启动之后分别进入到3个zookeeper容器中, 查看集群建立状态

cd  /zookeeper-3.4.10/bin
./zkServer.sh status 

正常情况下会看到1个leader, 2个follower

ZooKeeper JMX enabled by default
Using config: /conf/zoo.cfg
Mode: leader

ZooKeeper JMX enabled by default
Using config: /conf/zoo.cfg
Mode: follower
 
ZooKeeper JMX enabled by default
Using config: /conf/zoo.cfg
Mode: follower

应用的连接方式:

zookeeper://10.0.0.100:2181?backup=10.0.0.200:2181,10.0.0.300:2181   # 带dubbo注册中心协议
10.0.0.100:2181,10.0.0.200:2181,10.0.0.300:2181    # 不带dubbo注册中心协议