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
更多推荐