-
docker拉取zookeeper镜像
docker pull zookeeper
-
新建zk1,zk2,zk3用于挂载三个节点的数据卷
mkdir -vp zk/{zk1/{data/,logs/,conf/},zk2/{data/,log/,conf/},zk3/{data/,logs/,conf/}}
根目录下创建zk,里面包含zk1,zk2,zk3三个子文件夹,每个zk子文件夹
里有data/,logs/,conf/
-
docker创建一个network组,让三个节点都进去才能互相ping的通
docker network create zk_net
否则容器使用默认的桥接模式无法互相ping通
-
分别创建三个容器
docker run -d --name zk1 -v /zk/zk1/conf:/conf -v /zk/zk1/data:/data -v /zk/zk1/logs:/logs -p 21811:2181 --network=zk_net zookeeper
docker run -d --name zk2 -v /zk/zk2/conf:/conf -v /zk/zk2/data:/data -v /zk/zk2/logs:/logs -p 21812:2182 --network=zk_net zookeeper
docker run -d --name zk3 -v /zk/zk3/conf:/conf -v /zk/zk3/data:/data -v /zk/zk3/logs:/logs -p 21813:2183 --network=zk_net zookeeper
先分别测试联通,没有问题
-
修改zk1,zk2,zk3的配置文件,将原来的
server.1=localhost:2888:3888
修改成server.1=zk1:2888:3888;2181 server.2=zk2:2888:3888;2182 server.3=zk3:2888:3888;2183
server.x,这里的x分别指集群中每个节点的编号,必须是数字
localhost: a: b; c
-
最前面是主机地址
-
a一般2888,是zookeeper节点之间用来通讯的端口
-
b一般是3888,是用来选举leader用到的端口
-
c就是本节点的端口号,注意,这里用;隔开
新版本好像默认就是用;加载后面,所以这里也这么写,之前版本好像是用clientPort指定端口号
注意:之前每个节点最前面都是本容器的地址,现在需要修改成对应的名称,这里是zk1,zk2,zk3,docker会自动根据名称去查找每个容器自己的网络地址。
-
-
然后在每个对应的data目录下,创建myid,里面填写自己对应的节点数目
zk/zk1/data/myid 里面数字是1
zk/zk2/data/myid 里面数字是2
zk/zk3/data/myid 里面数字是3
-
重启三个容器
docker restart zk1
docker restart zk2
docker restart zk3
-
启动没问题,进入zk1容器内部,可以看到zk1现在是leader