在开始之前,请确保: - 已安装Docker(建议使用最新稳定版) - 系统内存至少2GB(Zookeeper运行需要一定内存) - 熟悉基本的Docker命令
docker pull zookeeper:latest
建议使用特定版本而非latest标签以获得更稳定的体验:
docker pull zookeeper:3.8.0
docker run --name my-zookeeper -p 2181:2181 -d zookeeper
docker run --name my-zookeeper \
-p 2181:2181 \
-v /my/own/data:/data \
-v /my/own/datalog:/datalog \
-e ZOO_DATA_DIR=/data \
-e ZOO_DATA_LOG_DIR=/datalog \
-d zookeeper
创建docker-compose.yml
文件:
version: '3.1'
services:
zoo1:
image: zookeeper
restart: always
hostname: zoo1
ports:
- 2181:2181
environment:
ZOO_MY_ID: 1
ZOO_SERVERS: server.1=zoo1:2888:3888;2181 server.2=zoo2:2888:3888;2181 server.3=zoo3:2888:3888;2181
zoo2:
image: zookeeper
restart: always
hostname: zoo2
ports:
- 2182:2181
environment:
ZOO_MY_ID: 2
ZOO_SERVERS: server.1=zoo1:2888:3888;2181 server.2=zoo2:2888:3888;2181 server.3=zoo3:2888:3888;2181
zoo3:
image: zookeeper
restart: always
hostname: zoo3
ports:
- 2183:2181
environment:
ZOO_MY_ID: 3
ZOO_SERVERS: server.1=zoo1:2888:3888;2181 server.2=zoo2:2888:3888;2181 server.3=zoo3:2888:3888;2181
启动集群:
docker-compose up -d
# 进入任意一个节点
docker exec -it zoo1 bash
# 在容器内执行
zkServer.sh status
通过环境变量可以配置Zookeeper:
环境变量 | 说明 | 默认值 |
---|---|---|
ZOO_MY_ID | 集群中当前节点的ID | 1 |
ZOO_SERVERS | 集群服务器列表 | server.1=localhost:2888:3888;2181 |
ZOO_TICK_TIME | 心跳间隔(ms) | 2000 |
ZOO_INIT_LIMIT | 初始化连接超时(tick数) | 5 |
ZOO_SYNC_LIMIT | 同步超时(tick数) | 2 |
ZOO_MAX_CLIENT_CNXNS | 单个客户端最大连接数 | 60 |
ZOO_STANDALONE_ENABLED | 是否启用独立模式 | true |
ZOO_ADMINSERVER_ENABLED | 是否启用AdminServer | true |
示例配置:
docker run --name my-zookeeper \
-p 2181:2181 \
-e ZOO_TICK_TIME=2000 \
-e ZOO_INIT_LIMIT=10 \
-e ZOO_MAX_CLIENT_CNXNS=100 \
-d zookeeper
强烈建议将数据目录挂载到宿主机:
docker run --name my-zookeeper \
-p 2181:2181 \
-v /path/to/data:/data \
-v /path/to/datalog:/datalog \
-d zookeeper
docker exec -it my-zookeeper zkCli.sh
docker logs my-zookeeper
docker restart my-zookeeper
docker run --name my-zookeeper \
-p 2181:2181 \
-e ZOO_4LW_COMMANDS_WHITELIST="srvr, mntr, stat, ruok, conf" \
-e ZOO_CFG_EXTRA="authProvider.1=org.apache.zookeeper.server.auth.SASLAuthenticationProvider" \
-d zookeeper
docker run --name my-zookeeper \
-p 127.0.0.1:2181:2181 \
-d zookeeper
echo stat | nc localhost 2181
常用四字命令:
- stat
- 显示服务器状态
- srvr
- 服务器详细信息
- cons
- 客户端连接信息
- mntr
- 监控统计信息
Zookeeper默认启用AdminServer(端口8080),可以通过以下方式访问:
curl http://localhost:8080/commands/stat
检查:
- 容器是否正常运行:docker ps
- 端口是否正确映射
- 防火墙设置
检查: - 所有节点的ZOO_MY_ID是否唯一 - ZOO_SERVERS配置是否正确 - 网络是否互通
恢复步骤: 1. 停止Zookeeper 2. 从备份恢复数据 3. 启动Zookeeper
# 停止容器
docker stop my-zookeeper
# 备份数据目录
tar -czvf zk-backup.tar.gz /path/to/data /path/to/datalog
# 启动容器
docker start my-zookeeper
# 停止容器
docker stop my-zookeeper
# 恢复数据
tar -xzvf zk-backup.tar.gz -C /
# 启动容器
docker start my-zookeeper
bash
docker run --name my-zookeeper -p 2181:2181 --memory 1g -d zookeeper
通过以上步骤,您应该能够成功在Docker中部署和管理Zookeeper服务。根据实际需求调整配置参数,以获得最佳性能和稳定性。