找回密码
 立即注册
首页 业界区 安全 【Zookeeper安装】CentOS 7使用Docker安装Zookeeper的完 ...

【Zookeeper安装】CentOS 7使用Docker安装Zookeeper的完整指南

颛孙中 5 天前
在CentOS 7上使用Docker安装Zookeeper的完整指南

一、准备工作

1.1 系统要求


  • CentOS 7系统
  • 已安装Docker
  • 至少2GB可用内存(生产环境建议更多)
  • 开放2181(客户端连接)、2888(节点间通信)、3888(Leader选举)端口
1.2 安装Docker

如果尚未安装Docker,请先执行以下命令:
  1. # 卸载旧版本Docker(如有)
  2. sudo yum remove docker \
  3.                   docker-client \
  4.                   docker-client-latest \
  5.                   docker-common \
  6.                   docker-latest \
  7.                   docker-latest-logrotate \
  8.                   docker-logrotate \
  9.                   docker-engine
  10. # 安装必要工具
  11. sudo yum install -y yum-utils device-mapper-persistent-data lvm2
  12. # 添加Docker仓库
  13. sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
  14. # 安装Docker CE
  15. sudo yum install -y docker-ce docker-ce-cli containerd.io
  16. # 启动Docker并设置开机自启
  17. sudo systemctl start docker
  18. sudo systemctl enable docker
  19. # 验证安装
  20. sudo docker --version
复制代码
二、单机模式安装Zookeeper

2.1 拉取官方镜像
  1. sudo docker pull zookeeper:3.7.0
复制代码
2.2 运行Zookeeper容器
  1. sudo docker run -d \
  2.     --name zookeeper \
  3.     -p 2181:2181 \
  4.     -e ZOO_MY_ID=1 \
  5.     -e ALLOW_ANONYMOUS_LOGIN=yes \
  6.     zookeeper:3.7.0
复制代码
参数说明:

  • -d: 后台运行容器
  • --name: 容器名称
  • -p 2181:2181: 映射容器2181端口到主机2181端口
  • -e ZOO_MY_ID=1: 设置Zookeeper节点ID(单机模式设置为1)
  • -e ALLOW_ANONYMOUS_LOGIN=yes: 允许匿名登录(仅测试环境使用)
2.3 验证安装
  1. # 查看容器状态
  2. sudo docker ps -a | grep zookeeper
  3. # 进入容器执行zkCli.sh
  4. sudo docker exec -it zookeeper zkCli.sh
  5. # 在zkCli中执行简单命令验证
  6. [zk: localhost:2181(CONNECTED) 0] ls /
复制代码
三、集群模式安装Zookeeper

3.1 创建Docker网络
  1. sudo docker network create --subnet=172.18.0.0/16 zk-net
复制代码
3.2 创建数据目录
  1. mkdir -p /data/zookeeper/{node1,node2,node3}/{data,datalog}
复制代码
3.3 启动三个Zookeeper节点

节点1:
  1. sudo docker run -d \
  2.     --name zk-node1 \
  3.     --net zk-net \
  4.     --ip 172.18.0.2 \
  5.     -p 2181:2181 \
  6.     -p 2888:2888 \
  7.     -p 3888:3888 \
  8.     -e ZOO_MY_ID=1 \
  9.     -e ZOO_SERVERS="server.1=0.0.0.0:2888:3888;2181 server.2=zk-node2:2888:3888;2181 server.3=zk-node3:2888:3888;2181" \
  10.     -v /data/zookeeper/node1/data:/data \
  11.     -v /data/zookeeper/node1/datalog:/datalog \
  12.     zookeeper:3.7.0
复制代码
节点2:
  1. sudo docker run -d \
  2.     --name zk-node2 \
  3.     --net zk-net \
  4.     --ip 172.18.0.3 \
  5.     -p 2182:2181 \
  6.     -e ZOO_MY_ID=2 \
  7.     -e ZOO_SERVERS="server.1=zk-node1:2888:3888;2181 server.2=0.0.0.0:2888:3888;2181 server.3=zk-node3:2888:3888;2181" \
  8.     -v /data/zookeeper/node2/data:/data \
  9.     -v /data/zookeeper/node2/datalog:/datalog \
  10.     zookeeper:3.7.0
复制代码
节点3:
  1. sudo docker run -d \
  2.     --name zk-node3 \
  3.     --net zk-net \
  4.     --ip 172.18.0.4 \
  5.     -p 2183:2181 \
  6.     -e ZOO_MY_ID=3 \
  7.     -e ZOO_SERVERS="server.1=zk-node1:2888:3888;2181 server.2=zk-node2:2888:3888;2181 server.3=0.0.0.0:2888:3888;2181" \
  8.     -v /data/zookeeper/node3/data:/data \
  9.     -v /data/zookeeper/node3/datalog:/datalog \
  10.     zookeeper:3.7.0
复制代码
3.4 验证集群状态
  1. # 查看任意节点的日志
  2. sudo docker logs zk-node1
  3. # 应该能看到类似下面的输出,表示集群已形成
  4. # [INFO] [Time:2023-01-01...] [QuorumPeer[myid=1]/0:0:0:0:0:0:0:0:2181] LEADING - LEADER ELECTION TOOK - 200 MS
  5. # 进入任一节点客户端
  6. sudo docker exec -it zk-node1 zkCli.sh
  7. # 查看集群状态
  8. [zk: localhost:2181(CONNECTED) 0] stat
复制代码
四、使用Docker Compose部署Zookeeper集群

4.1 安装Docker Compose
  1. sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
  2. sudo chmod +x /usr/local/bin/docker-compose
  3. docker-compose --version
复制代码
4.2 创建docker-compose.yml文件
  1. version: '3.8'
  2. services:
  3.   zoo1:
  4.     image: zookeeper:3.7.0
  5.     hostname: zoo1
  6.     ports:
  7.       - 2181:2181
  8.     environment:
  9.       ZOO_MY_ID: 1
  10.       ZOO_SERVERS: server.1=0.0.0.0:2888:3888;2181 server.2=zoo2:2888:3888;2181 server.3=zoo3:2888:3888;2181
  11.     volumes:
  12.       - ./data/zoo1/data:/data
  13.       - ./data/zoo1/datalog:/datalog
  14.     networks:
  15.       zk-net:
  16.         ipv4_address: 172.18.0.2
  17.   zoo2:
  18.     image: zookeeper:3.7.0
  19.     hostname: zoo2
  20.     ports:
  21.       - 2182:2181
  22.     environment:
  23.       ZOO_MY_ID: 2
  24.       ZOO_SERVERS: server.1=zoo1:2888:3888;2181 server.2=0.0.0.0:2888:3888;2181 server.3=zoo3:2888:3888;2181
  25.     volumes:
  26.       - ./data/zoo2/data:/data
  27.       - ./data/zoo2/datalog:/datalog
  28.     networks:
  29.       zk-net:
  30.         ipv4_address: 172.18.0.3
  31.   zoo3:
  32.     image: zookeeper:3.7.0
  33.     hostname: zoo3
  34.     ports:
  35.       - 2183:2181
  36.     environment:
  37.       ZOO_MY_ID: 3
  38.       ZOO_SERVERS: server.1=zoo1:2888:3888;2181 server.2=zoo2:2888:3888;2181 server.3=0.0.0.0:2888:3888;2181
  39.     volumes:
  40.       - ./data/zoo3/data:/data
  41.       - ./data/zoo3/datalog:/datalog
  42.     networks:
  43.       zk-net:
  44.         ipv4_address: 172.18.0.4
  45. networks:
  46.   zk-net:
  47.     driver: bridge
  48.     ipam:
  49.       driver: default
  50.       config:
  51.         - subnet: 172.18.0.0/16
复制代码
4.3 启动集群
  1. # 创建数据目录
  2. mkdir -p data/{zoo1,zoo2,zoo3}/{data,datalog}
  3. # 启动服务
  4. docker-compose up -d
  5. # 查看服务状态
  6. docker-compose ps
  7. # 查看集群日志
  8. docker-compose logs -f zoo1
复制代码
五、Zookeeper容器配置详解

5.1 常用环境变量

变量名说明默认值ZOO_MY_ID节点ID,集群中必须唯一无ZOO_SERVERS集群服务器列表无ZOO_TICK_TIME基本时间单位(毫秒)2000ZOO_INIT_LIMIT初始化连接时能容忍的最长心跳间隔10ZOO_SYNC_LIMIT发送请求和接收响应能容忍的最长心跳间隔5ZOO_MAX_CLIENT_CNXNS每个IP最大连接数60ZOO_STANDALONE_ENABLED是否启用独立模式trueZOO_AUTOPURGE_PURGEINTERVAL自动清理间隔(小时)0(禁用)ZOO_AUTOPURGE_SNAPRETAINCOUNT保留的快照数量35.2 持久化数据目录

Zookeeper容器中有两个重要的数据目录:

  • /data: 存储数据快照
  • /datalog: 存储事务日志
建议通过-v参数将这两个目录挂载到宿主机,防止容器重启后数据丢失。
六、常见问题解决

6.1 容器启动失败

问题现象:容器启动后立即退出
解决方法
  1. # 查看容器日志
  2. docker logs <container_id>
  3. # 常见原因:
  4. # 1. ZOO_MY_ID未设置或设置错误
  5. # 2. 数据目录权限问题
  6. # 3. 端口冲突
复制代码
6.2 集群无法形成

问题现象:节点日志显示"Looking for leader"
解决方法

  • 检查所有节点的ZOO_SERVERS配置是否正确
  • 确保所有节点的网络互通
  • 检查防火墙设置,确保2888和3888端口开放
  • 清除旧数据目录重新启动
6.3 客户端连接问题

问题现象:客户端无法连接Zookeeper服务
解决方法

  • 检查容器是否正常运行:docker ps
  • 检查端口映射是否正确:docker port
  • 检查防火墙设置:sudo firewall-cmd --list-ports
  • 测试容器内连接:docker exec -it zookeeper zkCli.sh
七、生产环境建议


  • 资源限制:为Zookeeper容器设置适当的资源限制
    1. docker run -d \
    2.     --name zookeeper \
    3.     --memory 2g \
    4.     --cpus 1 \
    5.     ...
    复制代码
  • 监控:配置Zookeeper监控

    • 使用四字命令:echo mntr | nc localhost 2181
    • 使用Prometheus + Grafana监控

  • 备份:定期备份数据目录
    1. tar czvf zk-backup-$(date +%Y%m%d).tar.gz /data/zookeeper
    复制代码
  • 日志管理:配置日志轮转
    1. docker run -d \
    2.     --name zookeeper \
    3.     --log-opt max-size=10m \
    4.     --log-opt max-file=3 \
    5.     ...
    复制代码
八、总结

通过Docker在CentOS 7上部署Zookeeper可以大大简化安装和配置过程。本文介绍了单机模式和集群模式的部署方法,以及使用Docker Compose管理集群的最佳实践。对于生产环境,请务必考虑持久化存储、资源限制、监控和备份等关键因素。

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册