编写启动脚本:
docker stop zookeeper && docker rm zookeeper
docker run --restart=always --privileged=true \
-p 2181:2181 \
--name zookeeper \
--network common-network \
-v /mydata/zookeeper/data:/data \
-v /mydata/zookeeper/conf:/conf \
-v /mydata/zookeeper/logs:/datalog \
-e TZ=Asia/Shanghai \
-d zookeeper
其中端口默认 -p 2181:2181 \
--network common-network \ 指定网关
-v /mydata/zookeeper/data:/data \ zookeeepr容器默认的数据存储位置是/data
-v /mydata/zookeeper/conf:/conf \ 将配置文件挂载到容器
-v /mydata/zookeeper/logs:/datalog \ 日志文件
-e TZ=Asia/Shanghai
配置文件,默认是吧原先的zookeeper的配置文件拷贝到 /mydata/zookeeper/conf目录下
# zookeeper时间配置中的基本单位 (毫秒)
tickTime=2000
# 允许follower初始化连接到leader最大时长,它表示tickTime时间倍数 即:initLimit*tickTime
initLimit=10
# 允许follower与leader数据同步最大时长,它表示tickTime时间倍数
syncLimit=5
#zookeper 数据存储目录
dataDir=/data
#日志存储目录
dataLogDir=/datalog
#对客户端提供的端口号
clientPort=2181
#单个客户端与zookeeper最大并发连接数
maxClientCnxns=60
# 保存的数据快照数量,之外的将会被清除
autopurge.snapRetainCount=3
#自动触发清除任务时间间隔,小时为单位。默认为0,表示不自动清除。
autopurge.purgeInterval=1
standaloneEnabled=true
admin.enableServer=true
zookeeper客户端启动
[root@node01 zookeeper]#docker exec -it zookeeper zkCli.sh
zookeeper如果集群部署需要使用docker-commpass
docker创建网络
docker network create zk-cluster
编写docker-compose配置文件
version: '3.8'
networks:
zk-cluster:
name: zk-cluster
services:
zk1:
image: zookeeper
hostname: zk1
container_name: zk1
ports:
- 2181:2181
- 8081:8080
environment:
ZOO_MY_ID: 1
ZOO_SERVERS: server.1=zk1:2888:3888;2181 server.2=zk2:2888:3888;2181 server.3=zk3:2888:3888;2181
volumes:
- ./zk1/data:/data
- ./zk1/datalog:/datalog
networks:
- zk-cluster
zk2:
image: zookeeper
hostname: zk2
container_name: zk2
ports:
- 2182:2181
- 8082:8080
environment:
ZOO_MY_ID: 2
ZOO_SERVERS: server.1=zk1:2888:3888;2181 server.2=zk2:2888:3888;2181 server.3=zk3:2888:3888;2181
volumes:
- ./zk2/data:/data
- ./zk2/datalog:/datalog
networks:
- zk-cluster
zk3:
image: zookeeper
hostname: zk3
container_name: zk3
ports:
- 2183:2181
- 8083:8080
environment:
ZOO_MY_ID: 3
ZOO_SERVERS: server.1=zk1:2888:3888;2181 server.2=zk2:2888:3888;2181 server.3=zk3:2888:3888;2181
volumes:
- ./zk3/data:/data
- ./zk3/datalog:/datalog
networks:
- zk-cluste
启动
[root@node01 zookeeper]# docker-compose -f docker-compass.yaml up -d
Creating zk2 ... done
Creating zk3 ... done
Creating zk1 ... done
关闭
[root@node01 zookeeper]# docker-compose -f docker-compass.yaml stop
Stopping zk3 ... done
Stopping zk1 ... done
Stopping zk2 ... done
删除
[root@node01 zookeeper]# docker-compose -f docker-compass.yaml rm
Going to remove zk3, zk1, zk2
Are you sure? [yN] y
Removing zk3 ... done
Removing zk1 ... done
Removing zk2 ... done
可以通过端口8080 查看服务状态,由于在配置文件中,将zk1、zk2、zk3的容器内部8080端口分别映射到了宿主机上的8081、8082、8083端口,所以我们可以在宿主机上通过浏览器访问这三个zk实例内嵌的web控制台:
访问 http://ip地址:端口/commonds查看
查看zookeeper服务节点是leader状态还是follower
http://node01:8081/commands/stats
通用可以通过命令查看
[root@node01 zookeeper]# docker exec -it zk1 zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: follower