Plantre Plantre
首页
后端
技术
硬件
  • 前端文章

    • HTML
    • CSS
    • JavaScript
  • 技术

    • 技术文档
    • GitHub技巧
    • Nodejs
    • 博客搭建
  • 学习笔记

    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
    • 《ES6 教程》
    • 《Vue》
    • 《React》
    • 《TypeScript 从零实现 axios》
    • 《Git》
    • TypeScript
    • JS设计模式总结
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

plantre

一个后端开发者
首页
后端
技术
硬件
  • 前端文章

    • HTML
    • CSS
    • JavaScript
  • 技术

    • 技术文档
    • GitHub技巧
    • Nodejs
    • 博客搭建
  • 学习笔记

    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
    • 《ES6 教程》
    • 《Vue》
    • 《React》
    • 《TypeScript 从零实现 axios》
    • 《Git》
    • TypeScript
    • JS设计模式总结
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 计算机组成原理

  • 操作系统

  • 计算机网络

  • 设计模式

  • Java

  • Spring

  • SpringCloud

  • MySQL

  • Redis

  • 分布式

  • Zookeeper

    • docker搭建Zookeeper集群
    • Dubbo

    • Kafka

    • 数据结构

    • 算法

    • OJ

    • 从道家哲学看计算机?
    • 后端
    • Zookeeper
    plantre
    2025-06-22
    目录

    docker搭建Zookeeper集群

    # 命令
    docker run -d \
      --name zookeeper \
      --network host \
      -v /opt/zookeeper/conf/zoo.cfg:/conf/zoo.cfg \
      -v /opt/zookeeper/data:/data \
      -v /opt/zookeeper/logs:/logs \
      zookeeper:3.7
    
    1
    2
    3
    4
    5
    6
    7

    以下是基于三台物理机(IP: 10.143.143.101、10.143.143.102、10.143.143.103)通过 Docker 搭建 ZooKeeper 集群的完整方案,整合多篇实践指南的核心步骤,并提供优化建议:


    # 🔧 一、环境准备

    1. 基础要求
      • 三台主机均已安装 Docker 和 Docker Compose(≥20.10)。
      • 开放端口:
        • 2181(客户端访问)
        • 2888(节点间通信)
        • 3888(选举端口)。
      • 确保三台主机网络互通(禁用防火墙或配置端口白名单)。

    # 🐘 二、部署 ZooKeeper 集群(Host 网络模式)

    推荐生产环境使用 Host 模式,避免容器网络隔离问题。

    # 步骤 1:每台主机创建配置目录

    # 三台主机均执行
    mkdir -p /data/zookeeper/{conf,data} && cd /data/zookeeper/conf
    touch zoo.cfg && touch ../data/myid
    
    1
    2
    3

    # 步骤 2:配置 zoo.cfg(三台主机相同)

    # zoo.cfg 内容
    tickTime=2000
    initLimit=10
    syncLimit=5
    dataDir=/data
    clientPort=2181
    quorumListenOnAllIPs=true  # 关键!确保跨主机通信
    server.101=10.143.143.101:2888:3888
    server.102=10.143.143.102:2888:3888
    server.103=10.143.143.103:2888:3888
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10

    # 步骤 3:配置 myid(每台主机唯一)

    • 主机 101:echo 101 > /data/zookeeper/data/myid
    • 主机 102:echo 102 > /data/zookeeper/data/myid
    • 主机 103:echo 103 > /data/zookeeper/data/myid

    # 步骤 4:启动容器(三台主机分别执行)

    docker run -d \
      --name zookeeper \
      --network host \  # 使用主机网络
      -v /data/zookeeper/conf/zoo.cfg:/conf/zoo.cfg \
      -v /data/zookeeper/data:/data \
      zookeeper:3.7  # 推荐稳定版本
    
    1
    2
    3
    4
    5
    6

    ✅ 关键点:

    • --network host 直接使用宿主机网络栈,避免端口映射问题。
    • quorumListenOnAllIPs=true 确保跨节点通信正常。

    # 🌐 三、备选方案:自定义 Docker 网络模式

    适用场景:单机多节点测试(需避免端口冲突)。

    # 步骤 1:创建共享网络(任一主机执行)

    docker network create --subnet=10.10.0.0/24 zk-net
    
    1

    # 步骤 2:编写 docker-compose.yml(三台主机配置不同)

    # 主机 101 的配置(其他主机修改 IP 和 broker.id)
    version: '3.7'
    services:
      zoo101:
        image: zookeeper:3.7
        container_name: zoo101
        networks:
          zk-net:
            ipv4_address: 10.10.0.101  # 固定 IP
        volumes:
          - /data/zookeeper/data:/data
        environment:
          ZOO_MY_ID: 101
          ZOO_SERVERS: "server.101=10.10.0.101:2888:3888;server.102=10.10.0.102:2888:3888;server.103=10.10.0.103:2888:3888"
    networks:
      zk-net:
        external: true
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17

    ⚠️ 注意:

    • 需在三台主机分别配置不同的 ZOO_MY_ID 和容器 IP(如主机 102 用 102 和 10.10.0.102)。
    • 生产环境不推荐此模式,因跨主机网络需额外配置(如 overlay 网络)。

    # ✅ 四、集群验证

    1. 检查节点状态(任选一台主机)

      docker exec -it zookeeper zkServer.sh status
      
      1

      输出示例:

      • Mode: leader(主节点)
      • Mode: follower(从节点)
    2. 测试客户端连接

      echo stat | nc 10.143.143.101 2181  # 查看节点状态
      
      1

    # ⚙️ 五、生产环境优化建议

    1. 数据持久化:
      • 挂载宿主机目录:-v /data/zookeeper/data:/data。
    2. 资源限制:
      • 限制容器内存:--memory 1g --cpus 1。
    3. 日志管理:
      • 挂载日志目录:-v /data/zookeeper/logs:/logs。
    4. 高可用配置:
      • 确保 replication-factor >= 3(容忍单节点故障)。

    # ⚠️ 六、常见问题解决

    1. 节点无法选举 Leader
      • 检查 myid 文件是否唯一且与 server.x 的 ID 匹配。
      • 确认防火墙开放 2888/3888 端口。
    2. 容器跨主机无法通信
      • Host 模式:确保宿主机 IP 配置正确(禁用 localhost)。
      • 自定义网络:检查 Docker 跨主机网络配置(如 Calico)。
    3. 启动失败
      • 查看日志:docker logs zookeeper,重点检查 zoo.cfg 语法和 IP 错误。

    # 💎 总结

    方案 适用场景 关键配置
    Host 网络 生产环境(多主机) --network host + 宿主机 IP 绑定
    自定义网络 测试环境(单主机) 固定容器 IP + 跨主机网络插件

    推荐选择:三台物理机部署优先采用 Host 网络模式,配置简单且性能接近原生。若需进一步简化运维,可结合 Docker Compose 批量管理。

    编辑 (opens new window)
    上次更新: 2025/06/24, 00:41:57
    ​​Redis3主3从时怎么用分布式锁
    dubbo没有服务端吗

    ← ​​Redis3主3从时怎么用分布式锁 dubbo没有服务端吗→

    最近更新
    01
    集成loki
    07-04
    02
    TCP的ESTABLISHED是什么意思
    06-24
    03
    安装1panel
    06-24
    更多文章>
    Theme by Vdoing | Copyright © 2025-2025 plantre | MIT License
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式