颛孙中 发表于 昨天 17:26

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

在CentOS 7上使用Docker安装Zookeeper的完整指南

一、准备工作

1.1 系统要求


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

如果尚未安装Docker,请先执行以下命令:
# 卸载旧版本Docker(如有)
sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

# 安装必要工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2

# 添加Docker仓库
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

# 安装Docker CE
sudo yum install -y docker-ce docker-ce-cli containerd.io

# 启动Docker并设置开机自启
sudo systemctl start docker
sudo systemctl enable docker

# 验证安装
sudo docker --version二、单机模式安装Zookeeper

2.1 拉取官方镜像

sudo docker pull zookeeper:3.7.02.2 运行Zookeeper容器

sudo docker run -d \
    --name zookeeper \
    -p 2181:2181 \
    -e ZOO_MY_ID=1 \
    -e ALLOW_ANONYMOUS_LOGIN=yes \
    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 验证安装

# 查看容器状态
sudo docker ps -a | grep zookeeper

# 进入容器执行zkCli.sh
sudo docker exec -it zookeeper zkCli.sh

# 在zkCli中执行简单命令验证
ls /三、集群模式安装Zookeeper

3.1 创建Docker网络

sudo docker network create --subnet=172.18.0.0/16 zk-net3.2 创建数据目录

mkdir -p /data/zookeeper/{node1,node2,node3}/{data,datalog}3.3 启动三个Zookeeper节点

节点1:
sudo docker run -d \
    --name zk-node1 \
    --net zk-net \
    --ip 172.18.0.2 \
    -p 2181:2181 \
    -p 2888:2888 \
    -p 3888:3888 \
    -e ZOO_MY_ID=1 \
    -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" \
    -v /data/zookeeper/node1/data:/data \
    -v /data/zookeeper/node1/datalog:/datalog \
    zookeeper:3.7.0节点2:
sudo docker run -d \
    --name zk-node2 \
    --net zk-net \
    --ip 172.18.0.3 \
    -p 2182:2181 \
    -e ZOO_MY_ID=2 \
    -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" \
    -v /data/zookeeper/node2/data:/data \
    -v /data/zookeeper/node2/datalog:/datalog \
    zookeeper:3.7.0节点3:
sudo docker run -d \
    --name zk-node3 \
    --net zk-net \
    --ip 172.18.0.4 \
    -p 2183:2181 \
    -e ZOO_MY_ID=3 \
    -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" \
    -v /data/zookeeper/node3/data:/data \
    -v /data/zookeeper/node3/datalog:/datalog \
    zookeeper:3.7.03.4 验证集群状态

# 查看任意节点的日志
sudo docker logs zk-node1

# 应该能看到类似下面的输出,表示集群已形成
# /0:0:0:0:0:0:0:0:2181] LEADING - LEADER ELECTION TOOK - 200 MS

# 进入任一节点客户端
sudo docker exec -it zk-node1 zkCli.sh

# 查看集群状态
stat四、使用Docker Compose部署Zookeeper集群

4.1 安装Docker Compose

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
sudo chmod +x /usr/local/bin/docker-compose
docker-compose --version4.2 创建docker-compose.yml文件

version: '3.8'

services:
zoo1:
    image: zookeeper:3.7.0
    hostname: zoo1
    ports:
      - 2181:2181
    environment:
      ZOO_MY_ID: 1
      ZOO_SERVERS: server.1=0.0.0.0:2888:3888;2181 server.2=zoo2:2888:3888;2181 server.3=zoo3:2888:3888;2181
    volumes:
      - ./data/zoo1/data:/data
      - ./data/zoo1/datalog:/datalog
    networks:
      zk-net:
      ipv4_address: 172.18.0.2

zoo2:
    image: zookeeper:3.7.0
    hostname: zoo2
    ports:
      - 2182:2181
    environment:
      ZOO_MY_ID: 2
      ZOO_SERVERS: server.1=zoo1:2888:3888;2181 server.2=0.0.0.0:2888:3888;2181 server.3=zoo3:2888:3888;2181
    volumes:
      - ./data/zoo2/data:/data
      - ./data/zoo2/datalog:/datalog
    networks:
      zk-net:
      ipv4_address: 172.18.0.3

zoo3:
    image: zookeeper:3.7.0
    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=0.0.0.0:2888:3888;2181
    volumes:
      - ./data/zoo3/data:/data
      - ./data/zoo3/datalog:/datalog
    networks:
      zk-net:
      ipv4_address: 172.18.0.4

networks:
zk-net:
    driver: bridge
    ipam:
      driver: default
      config:
      - subnet: 172.18.0.0/164.3 启动集群

# 创建数据目录
mkdir -p data/{zoo1,zoo2,zoo3}/{data,datalog}

# 启动服务
docker-compose up -d

# 查看服务状态
docker-compose ps

# 查看集群日志
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 容器启动失败

问题现象:容器启动后立即退出
解决方法:
# 查看容器日志
docker logs <container_id>

# 常见原因:
# 1. ZOO_MY_ID未设置或设置错误
# 2. 数据目录权限问题
# 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容器设置适当的资源限制
docker run -d \
    --name zookeeper \
    --memory 2g \
    --cpus 1 \
    ...
[*]监控:配置Zookeeper监控

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

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

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

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: 【Zookeeper安装】CentOS 7使用Docker安装Zookeeper的完整指南