1.准备zookeeper镜像

docker pull jplock/zookeeper:3.4.8

2.自定义网络

docker network create zookeeper

自定义网络本身就维护好了主机名和ip的对应关系(ip和域名都能ping通),相比于默认使用的bridge网络(只能ping通ip)。

由于docker容器内部的ip是有可能会发生改变的,在配置zookeeper集群时,可以使用容器名代替ip,在增加或减少集群数量或者zookeeper宕机时不影响集群的使用以及修改原本的配置文件。

3.根据镜像创建三个容器

docker run -d --name zookeeper1 -p 2181:2181 --network zookeeper jplock/zookeeper:3.4.8
docker run -d --name zookeeper2 -p 2182:2181 --network zookeeper jplock/zookeeper:3.4.8
docker run -d --name zookeeper3 -p 2183:2181 --network zookeeper jplock/zookeeper:3.4.8

参数说明:-d 后台运行容器并返回容器ID

                --name:容器名字

                --network:连接的网络

查看容器是否加入局域网

docker network inspect zookeeper

 4.确保容器直接能互相ping通 

进入容器实例

docker exec -it zookeeper2 /bin/bash

参数说明:exec -it :进入正在运行的容器并以命令行交互 

bash-4.3# ping zookeeper1
PING zookeeper1 (172.21.0.2): 56 data bytes
64 bytes from 172.21.0.2: seq=0 ttl=64 time=0.055 ms
64 bytes from 172.21.0.2: seq=1 ttl=64 time=0.187 ms
^C
--- zookeeper1 ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 0.055/0.121/0.187 ms

bash-4.3# ping zookeeper3
PING zookeeper3 (172.21.0.4): 56 data bytes
64 bytes from 172.21.0.4: seq=0 ttl=64 time=0.102 ms
64 bytes from 172.21.0.4: seq=1 ttl=64 time=0.091 ms
^C

5.修改zoo.cfg文件

①在/opt/zookeeper/这个目录下创建 zkData

mkdir zkdata

②修改conf下的zoo.cfg文件

vi zoo.cfg

修改 dataDir 路径:将tmp/zkData修改为/opt/zookeeper/zkdata

因为在linux里面tmp路径下的文件只能存在一个月,防止将zookeeper里面的数据删除

在配置文件末尾以下列格式添加集群配置信息

server.1=zookeeper1:2888:3888
server.2=zookeeper2:2888:3888
server.3=zookeeper3:2888:3888
server.A=B:C:D
A 是一个数字,表示这个是第几号服务器;
集群模式下配置一个文件 myid,这个文件在 dataDir 目录下,这个文件里面有一个数据
就是 A 的值,Zookeeper 启动时读取此文件,拿到里面的数据与 zoo.cfg 里面的配置信息比
较从而判断到底是哪个 server。
B 是这个服务器的地址;
C 是这个服务器 Follower 与集群中的 Leader 服务器交换信息的端口;
D 是万一集群中的 Leader 服务器挂了,需要一个端口来重新进行选举,选出一个新的
Leader,而这个端口就是用来执行选举时服务器相互通信的端口。

 ③在dataDir路径下添加文件myid在里面写入上面的A值

cd /opt/zookeeper/zkdata

vi myid

 6.重新启动容器,启动集群

#重启容器zookeeper1
docker restart zookeeper1
#进入容器
docker exec -it zookeeper1 /bin/bash
#启动zookeeper服务端
bin/zkServer.sh start

将三个zookeeper分别启动后,查看集群状态

bin/zkServer.sh status

 

 

 最终发现zookeeper2为leader

Logo

华为云1024程序员节送福利,参与活动赢单人4000元礼包,更有热门技术干货免费学习

更多推荐