找回密码
 立即注册
首页 业界区 业界 【Zookeeper】ZooKeeper集群搭建与选举原理终极指南(Do ...

【Zookeeper】ZooKeeper集群搭建与选举原理终极指南(Docker版 + 三角色详解)

薛小春 2025-6-28 11:20:07
ZooKeeper集群搭建与选举原理终极指南(Docker版 + 三角色详解)

一、环境准备(Docker版)

1. 服务器准备(3台节点)
  1. # 所有节点执行
  2. sudo apt-get update && sudo apt-get install -y docker.io docker-compose
  3. sudo systemctl enable docker && sudo systemctl start docker
复制代码
2. 创建专用网络(所有节点)
  1. docker network create --driver bridge --subnet 172.20.0.0/16 zk_net
复制代码
二、Docker方式部署ZooKeeper集群

1. 节点1配置(Leader候选)
  1. # 创建数据目录
  2. mkdir -p /data/zookeeper/node1/{data,datalog}
  3. # 创建docker-compose.yml
  4. cat > /data/zookeeper/node1/docker-compose.yml <<EOF
  5. version: '3.8'
  6. services:
  7.   zookeeper:
  8.     image: zookeeper:3.8.1
  9.     restart: always
  10.     hostname: zk-node1
  11.     container_name: zk-node1
  12.     ports:
  13.       - "2181:2181"
  14.       - "2888:2888"
  15.       - "3888:3888"
  16.     environment:
  17.       ZOO_MY_ID: 1
  18.       ZOO_SERVERS: server.1=zk-node1:2888:3888;2181 server.2=zk-node2:2888:3888;2181 server.3=zk-node3:2888:3888;2181
  19.       ZOO_STANDALONE_ENABLED: "false"
  20.     volumes:
  21.       - /data/zookeeper/node1/data:/data
  22.       - /data/zookeeper/node1/datalog:/datalog
  23.     networks:
  24.       zk_net:
  25.         ipv4_address: 172.20.0.101
  26. networks:
  27.   zk_net:
  28.     external: true
  29. EOF
复制代码
阶段二:状态转换
sequenceDiagram    participant Node1    participant Node2    participant Node3        Note over Node1: 初始状态: LOOKING    Node1->>Node2: 投票(1, zxid=100)    Node2->>Node1: 投票(2, zxid=120)    Node1->>Node3: 投票(2, zxid=120)    Node3->>Node1: 投票(3, zxid=120)    Note over Node1: 发现Node2获得多数票    Node1->>Node2: LEADERINFO    Node2-->>Node1: ACK    Note over Node1: 切换为FOLLOWING六、生产环境调优建议

1. 关键参数优化
  1. mkdir -p /data/zookeeper/node2/{data,datalog}
  2. cat > /data/zookeeper/node2/docker-compose.yml <<EOF
  3. version: '3.8'
  4. services:
  5.   zookeeper:
  6.     image: zookeeper:3.8.1
  7.     restart: always
  8.     hostname: zk-node2
  9.     container_name: zk-node2
  10.     ports:
  11.       - "2182:2181"
  12.     environment:
  13.       ZOO_MY_ID: 2
  14.       ZOO_SERVERS: server.1=zk-node1:2888:3888;2181 server.2=zk-node2:2888:3888;2181 server.3=zk-node3:2888:3888;2181
  15.     volumes:
  16.       - /data/zookeeper/node2/data:/data
  17.       - /data/zookeeper/node2/datalog:/datalog
  18.     networks:
  19.       zk_net:
  20.         ipv4_address: 172.20.0.102
  21. networks:
  22.   zk_net:
  23.     external: true
  24. EOF
复制代码
2. 监控方案
  1. mkdir -p /data/zookeeper/node3/{data,datalog}
  2. cat > /data/zookeeper/node3/docker-compose.yml <<EOF
  3. version: '3.8'
  4. services:
  5.   zookeeper:
  6.     image: zookeeper:3.8.1
  7.     restart: always
  8.     hostname: zk-node3
  9.     container_name: zk-node3
  10.     ports:
  11.       - "2183:2181"
  12.     environment:
  13.       ZOO_MY_ID: 3
  14.       ZOO_SERVERS: server.1=zk-node1:2888:3888;2181 server.2=zk-node2:2888:3888;2181 server.3=zk-node3:2888:3888;2181:observer
  15.       ZOO_OBSERVER_ENABLED: "true"
  16.     volumes:
  17.       - /data/zookeeper/node3/data:/data
  18.       - /data/zookeeper/node3/datalog:/datalog
  19.     networks:
  20.       zk_net:
  21.         ipv4_address: 172.20.0.103
  22. networks:
  23.   zk_net:
  24.     external: true
  25. EOF
复制代码
3. 故障模拟测试
  1. # 每个节点执行(注意在对应目录执行)
  2. docker-compose up -d
  3. # 查看节点状态
  4. docker exec -it zk-node1 zkServer.sh status
  5. docker exec -it zk-node2 zkServer.sh status
  6. docker exec -it zk-node3 zkServer.sh status
复制代码
通过这种Docker化部署方式,您可以在10分钟内快速搭建一个生产可用的ZooKeeper集群,三大角色各司其职:Leader处理写请求保证一致性,Follower参与选举并提供读服务,Observer则专门扩展读能力。这种架构设计完美体现了分布式系统CAP理论中的CP特性。

来源:豆瓜网用户自行投稿发布,如果侵权,请联系站长删除

相关推荐

您需要登录后才可以回帖 登录 | 立即注册