【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.0

2.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中执行简单命令验证
[zk: localhost:2181(CONNECTED) 0] ls /

三、集群模式安装Zookeeper

3.1 创建Docker网络

sudo docker network create --subnet=172.18.0.0/16 zk-net

3.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.0

3.4 验证集群状态

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

# 应该能看到类似下面的输出,表示集群已形成
# [INFO] [Time:2023-01-01...] [QuorumPeer[myid=1]/0:0:0:0:0:0:0:0:2181] LEADING - LEADER ELECTION TOOK - 200 MS

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

# 查看集群状态
[zk: localhost:2181(CONNECTED) 0] 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 --version

4.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/16

4.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 基本时间单位(毫秒) 2000
ZOO_INIT_LIMIT 初始化连接时能容忍的最长心跳间隔 10
ZOO_SYNC_LIMIT 发送请求和接收响应能容忍的最长心跳间隔 5
ZOO_MAX_CLIENT_CNXNS 每个IP最大连接数 60
ZOO_STANDALONE_ENABLED 是否启用独立模式 true
ZOO_AUTOPURGE_PURGEINTERVAL 自动清理间隔(小时) 0(禁用)
ZOO_AUTOPURGE_SNAPRETAINCOUNT 保留的快照数量 3

5.2 持久化数据目录

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

  • /data: 存储数据快照
  • /datalog: 存储事务日志

建议通过-v参数将这两个目录挂载到宿主机,防止容器重启后数据丢失。

六、常见问题解决

6.1 容器启动失败

问题现象:容器启动后立即退出
解决方法

# 查看容器日志
docker logs <container_id>

# 常见原因:
# 1. ZOO_MY_ID未设置或设置错误
# 2. 数据目录权限问题
# 3. 端口冲突

6.2 集群无法形成

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

  1. 检查所有节点的ZOO_SERVERS配置是否正确
  2. 确保所有节点的网络互通
  3. 检查防火墙设置,确保2888和3888端口开放
  4. 清除旧数据目录重新启动

6.3 客户端连接问题

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

  1. 检查容器是否正常运行:docker ps
  2. 检查端口映射是否正确:docker port <container_id>
  3. 检查防火墙设置:sudo firewall-cmd --list-ports
  4. 测试容器内连接:docker exec -it zookeeper zkCli.sh

七、生产环境建议

  1. 资源限制:为Zookeeper容器设置适当的资源限制

    docker run -d \
        --name zookeeper \
        --memory 2g \
        --cpus 1 \
        ...
    
  2. 监控:配置Zookeeper监控

    • 使用四字命令:echo mntr | nc localhost 2181
    • 使用Prometheus + Grafana监控
  3. 备份:定期备份数据目录

    tar czvf zk-backup-$(date +%Y%m%d).tar.gz /data/zookeeper
    
  4. 日志管理:配置日志轮转

    docker run -d \
        --name zookeeper \
        --log-opt max-size=10m \
        --log-opt max-file=3 \
        ...
    

八、总结

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

posted @ 2025-06-07 18:42  佛祖让我来巡山  阅读(150)  评论(0)    收藏  举报

佛祖让我来巡山博客站 - 创建于 2018-08-15

开发工程师个人站,内容主要是网站开发方面的技术文章,大部分来自学习或工作,部分来源于网络,希望对大家有所帮助。

Bootstrap中文网