【Zookeeper】ZooKeeper集群搭建与选举原理终极指南(Docker版 + 三角色详解)
ZooKeeper集群搭建与选举原理终极指南(Docker版 + 三角色详解)一、环境准备(Docker版)
1. 服务器准备(3台节点)
# 所有节点执行
sudo apt-get update && sudo apt-get install -y docker.io docker-compose
sudo systemctl enable docker && sudo systemctl start docker2. 创建专用网络(所有节点)
docker network create --driver bridge --subnet 172.20.0.0/16 zk_net二、Docker方式部署ZooKeeper集群
1. 节点1配置(Leader候选)
# 创建数据目录
mkdir -p /data/zookeeper/node1/{data,datalog}
# 创建docker-compose.yml
cat > /data/zookeeper/node1/docker-compose.yml <<EOF
version: '3.8'
services:
zookeeper:
image: zookeeper:3.8.1
restart: always
hostname: zk-node1
container_name: zk-node1
ports:
- "2181:2181"
- "2888:2888"
- "3888:3888"
environment:
ZOO_MY_ID: 1
ZOO_SERVERS: server.1=zk-node1:2888:3888;2181 server.2=zk-node2:2888:3888;2181 server.3=zk-node3:2888:3888;2181
ZOO_STANDALONE_ENABLED: "false"
volumes:
- /data/zookeeper/node1/data:/data
- /data/zookeeper/node1/datalog:/datalog
networks:
zk_net:
ipv4_address: 172.20.0.101
networks:
zk_net:
external: true
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. 关键参数优化
mkdir -p /data/zookeeper/node2/{data,datalog}
cat > /data/zookeeper/node2/docker-compose.yml <<EOF
version: '3.8'
services:
zookeeper:
image: zookeeper:3.8.1
restart: always
hostname: zk-node2
container_name: zk-node2
ports:
- "2182:2181"
environment:
ZOO_MY_ID: 2
ZOO_SERVERS: server.1=zk-node1:2888:3888;2181 server.2=zk-node2:2888:3888;2181 server.3=zk-node3:2888:3888;2181
volumes:
- /data/zookeeper/node2/data:/data
- /data/zookeeper/node2/datalog:/datalog
networks:
zk_net:
ipv4_address: 172.20.0.102
networks:
zk_net:
external: true
EOF2. 监控方案
mkdir -p /data/zookeeper/node3/{data,datalog}
cat > /data/zookeeper/node3/docker-compose.yml <<EOF
version: '3.8'
services:
zookeeper:
image: zookeeper:3.8.1
restart: always
hostname: zk-node3
container_name: zk-node3
ports:
- "2183:2181"
environment:
ZOO_MY_ID: 3
ZOO_SERVERS: server.1=zk-node1:2888:3888;2181 server.2=zk-node2:2888:3888;2181 server.3=zk-node3:2888:3888;2181:observer
ZOO_OBSERVER_ENABLED: "true"
volumes:
- /data/zookeeper/node3/data:/data
- /data/zookeeper/node3/datalog:/datalog
networks:
zk_net:
ipv4_address: 172.20.0.103
networks:
zk_net:
external: true
EOF3. 故障模拟测试
# 每个节点执行(注意在对应目录执行)
docker-compose up -d
# 查看节点状态
docker exec -it zk-node1 zkServer.sh status
docker exec -it zk-node2 zkServer.sh status
docker exec -it zk-node3 zkServer.sh status通过这种Docker化部署方式,您可以在10分钟内快速搭建一个生产可用的ZooKeeper集群,三大角色各司其职:Leader处理写请求保证一致性,Follower参与选举并提供读服务,Observer则专门扩展读能力。这种架构设计完美体现了分布式系统CAP理论中的CP特性。
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! 收藏一下 不知道什么时候能用到
页:
[1]