11.2.3 集群规划与节点角色
本节聚焦 ZooKeeper 集群的容量与角色规划,目标是保证可用性与一致性,并为后续部署与扩容预留空间。规划必须落实到节点数量、角色、拓扑、硬件与业务规模的量化匹配。
原理草图(角色与投票关系):
规划要点与命令验证示例:
- 节点数量:推荐奇数 3/5/7,保证过半选举。
- 角色分配:默认投票成员(Leader/Follower);Observer 仅扩展读性能。
- 机房/机架分布:跨机架/可用区,保证网络低延迟。
- 硬件建议:SSD、低延迟磁盘、充足内存缓存事务日志/快照。
- 业务规模匹配:基于连接数、watch 数、TPS 与数据量估算。
示例:小型环境(3 节点投票成员)规划与验证
# 规划主机名与 IP(示例)
# zk1 10.0.0.11
# zk2 10.0.0.12
# zk3 10.0.0.13
# 统一 /etc/hosts(每台执行)
cat >>/etc/hosts <<'EOF'
10.0.0.11 zk1
10.0.0.12 zk2
10.0.0.13 zk3
EOF
# 时钟同步检查(误差建议 < 1s)
timedatectl status
chronyc sources -v
角色配置示例(myid 与 zoo.cfg 片段,配合后续“集群配置与启动”使用):
# 每台写入唯一 myid(示例:zk1 写 1)
echo 1 >/data/zookeeper/myid
# zoo.cfg(核心集群参数示例)
cat >/etc/zookeeper/zoo.cfg <<'EOF'
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/data/zookeeper
clientPort=2181
server.1=zk1:2888:3888
server.2=zk2:2888:3888
server.3=zk3:2888:3888
EOF
读多写少扩展示例(3 投票 + 1 Observer):
# zk4 作为 Observer:myid=4,配置增加 observer 角色
cat >/etc/zookeeper/zoo.cfg <<'EOF'
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/data/zookeeper
clientPort=2181
server.1=zk1:2888:3888
server.2=zk2:2888:3888
server.3=zk3:2888:3888
server.4=zk4:2888:3888:observer
EOF
规划计算参考(容量与并发):
- 连接数:单节点建议控制在 2w~5w(视 JVM/硬件)
- watch 数:单节点 watch 建议 < 100w
- 写入 TPS:Leader 为瓶颈,写多场景优先提升 Leader 磁盘与 CPU
验证节点角色与法定人数(部署后使用):
# 查看节点角色(Leader/Follower/Observer)
echo stat | nc zk1 2181
# 查看集群成员与状态
echo ruok | nc zk1 2181 # 预期: imok
echo mntr | nc zk1 2181 # 查看连接数、TPS 等指标
常见规划排错提示:
- 偶数节点导致选举抖动:减少为奇数或增加 Observer。
- 跨机房高延迟:出现频繁 re-election,需缩短 RTT 或分区部署。
- Leader 负载过高:增加 Observer 分担读,或升级 Leader 硬件。
练习:
1. 设计 5 节点跨两个机房的拓扑,标注投票成员与 Observer。
2. 估算你的业务峰值 TPS 与 watch 数,给出 3/5/7 节点的选型理由。
3. 在 3 投票 + 1 Observer 规划下,写出完整的 server.N 配置行。