一、配置文件准备
docker run -d -p 2181:2181 -p 2888:2888 -p 3888:3888 --name zk zookeeper:3.4.13
mkdir zookeeper
cd /home/docker/zookeeper
docker cp zk:/conf .
docker cp zk:/data .
docker stop zk && docker rm zk
修改zoo.cfg文件(位于conf目录)
节点1
clientPort=2181
dataDir=/data
dataLogDir=/datalog
tickTime=2000
initLimit=5
syncLimit=2
autopurge.snapRetainCount=3
autopurge.purgeInterval=0
maxClientCnxns=60
server.1=0.0.0.0:2888:3888
server.2=zk2:2888:3888
server.3=zk3:2888:3888
节点2
clientPort=2181
dataDir=/data
dataLogDir=/datalog
tickTime=2000
initLimit=5
syncLimit=2
autopurge.snapRetainCount=3
autopurge.purgeInterval=0
maxClientCnxns=60
server.1=zk1:2888:3888
server.2=0.0.0.0:2888:3888
server.3=zk3:2888:3888
节点3
clientPort=2181
dataDir=/data
dataLogDir=/datalog
tickTime=2000
initLimit=5
syncLimit=2
autopurge.snapRetainCount=3
autopurge.purgeInterval=0
maxClientCnxns=60
server.1=zk1:2888:3888
server.2=zk2:2888:3888
server.3=0.0.0.0:2888:3888
修改配置文件myid(位于data目录),与上面配置文件server后面的id对应
节点1(不需要改动)
节点2
echo 2 > /home/docker/zookeeper/data/myid
节点3
echo 3 > /home/docker/zookeeper/data/myid
二、部署zookeeper集群
由于位于不同主机,启动容器需要添加DNS解析,修改/etc/hosts
文件,使用--add-host
参数,如果不用DNS解析可以使用--net host
使用宿主机网络,启动命令如下:
docker run -d -p 2181:2181 -p 2888:2888 -p 3888:3888 --name zk1 \
--add-host zk1:192.168.99.100 \
--add-host zk2:192.168.99.101 \
--add-host zk3:192.168.99.102 \
-v /home/docker/zookeeper/conf/:/conf \
-v /home/docker/zookeeper/data/:/data \
zookeeper:3.4.13
docker run -d -p 2181:2181 -p 2888:2888 -p 3888:3888 --name zk2 \
--add-host zk1:192.168.99.100 \
--add-host zk2:192.168.99.101 \
--add-host zk3:192.168.99.102 \
-v /home/docker/zookeeper/conf/:/conf \
-v /home/docker/zookeeper/data/:/data \
zookeeper:3.4.13
docker run -d -p 2181:2181 -p 2888:2888 -p 3888:3888 --name zk3 \
--add-host zk1:192.168.99.100 \
--add-host zk2:192.168.99.101 \
--add-host zk3:192.168.99.102 \
-v /home/docker/zookeeper/conf/:/conf \
-v /home/docker/zookeeper/data/:/data \
zookeeper:3.4.13
三、查看集群状态
方法一:
docker@docker1:~/zookeeper$ docker exec -it zk1 bash
bash-4.4# cd bin/
bash-4.4# ls
README.txt zkCli.cmd zkEnv.cmd zkServer.cmd zkTxnLogToolkit.cmd
zkCleanup.sh zkCli.sh zkEnv.sh zkServer.sh zkTxnLogToolkit.sh
bash-4.4# zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /conf/zoo.cfg
Mode: follower
方法二:
docker@docker1:~/zookeeper$ echo stat | nc 192.168.99.100 2181
Zookeeper version: 3.4.13-2d71af4dbe22557fda74f9a9b4309b15a7487f03, built on 06/29/2018 04:05 GMT
Clients:
/192.168.99.100:43359[0](queued=0,recved=1,sent=0)
Latency min/avg/max: 0/0/0
Received: 4
Sent: 3
Connections: 1
Outstanding: 0
Zxid: 0x0
Mode: follower
Node count: 4
四、docker-compose部署
version: '3'
services:
zk1:
image: zookeeper:3.4.13
restart: always
container_name: zk1
ports:
- "2181:2181"
environment:
ZOO_MY_ID: 1
ZOO_SERVERS: server.1=zk1:2888:3888 server.2=zk2:2888:3888 server.3=zk3:2888:3888 server.4=zk4:2888:3888:observer
zk2:
image: zookeeper:3.4.13
restart: always
container_name: zk2
ports:
- "2182:2181"
environment:
ZOO_MY_ID: 2
ZOO_SERVERS: server.1=zk1:2888:3888 server.2=zk2:2888:3888 server.3=zk3:2888:3888 server.4=zk4:2888:3888:observer
zk3:
image: zookeeper:3.4.13
restart: always
container_name: zk3
ports:
- "2183:2181"
environment:
ZOO_MY_ID: 3
ZOO_SERVERS: server.1=zk1:2888:3888 server.2=zk2:2888:3888 server.3=zk3:2888:3888 server.4=zk4:2888:3888:observer
zk4:
image: zookeeper:3.4.13
restart: always
container_name: zk4
ports:
- "2184:2181"
environment:
ZOO_MY_ID: 4
PEER_TYPE: observer
ZOO_SERVERS: server.1=zk1:2888:3888 server.2=zk2:2888:3888 server.3=zk3:2888:3888 server.4=zk4:2888:3888:observer