全部学科
Python全栈
python
NodeJS全栈
nodejs
小程序首页
📅 2026-05-24 12 分钟 ✍️ juanwangdev

ZooKeeper集群角色与动态扩缩容

理解各角色职责和扩缩容操作。

Follower角色行为

Follower职责

职责说明
处理读请求直接响应客户端读请求
转发写请求将写请求转发给Leader
参与投票参Leader选举投票
同步数据接收Leader提议并同步
发送ACK确认Leader提议

请求处理流程

Bash
读请求 → Follower → 直接响应
写请求 → Follower → 转发Leader → Leader处理 → Follower同步 → ACK

读请求优势

  • 任意Follower可响应
  • 无需Leader参与
  • 读吞吐量高

写请求限制

  • 必须由Leader处理
  • Follower只转发不处理
  • 写性能受Leader限制

状态监控

properties
# 查看Follower状态
echo stat | nc follower_host 2181

# 输出
Mode: follower
Connections: 5

提示:读请求分散到各Follower,写请求集中在Leader。

Observer节点应用

Observer特点

特性说明
不参与投票不影响选举和写性能
只同步数据接收Leader提议
处理读请求扩展读能力
可跨地域不影响投票延迟

Observer配置

Bash
# observer节点zoo.cfg
peerType=observer
server.1=host1:2888:3888
server.2=host2:2888:3888
server.3=host3:2888:3888
server.4=host4:2888:3888:observer  # Observer配置

Observer优势

场景优势
跨地域部署不增加投票延迟
读请求扩展无限扩展读能力
成本低不影响集群写性能

Observer适用场景

Bash
数据中心A(主集群)
  Leader + Follower + Follower
          ↓ 数据同步
数据中心B(远程)
  Observer + Observer → 本地客户端就近访问

Observer限制

  • 不能成为Leader
  • 不参与选举投票
  • 写请求仍需访问Leader

注意:Observer适合读密集场景,不适合写密集。

集群动态扩缩容

扩容流程

text
1. 修改所有节点zoo.cfg添加新节点配置
2. 新节点创建myid文件
3. 新节点启动并加入集群
4. 验证集群状态

添加Observer(推荐)

text
# Observer可动态添加,不触发重新选举
# 1. 各节点添加Observer配置
server.4=host4:2888:3888:observer

# 2. Observer节点配置
peerType=observer

# 3. 启动Observer
zkServer.sh start

添加Follower流程

text
# 1. 修改所有节点配置
server.4=host4:2888:3888

# 2. 创建myid
echo "4" > /dataDir/myid

# 3. 依次重启各节点
# 4. 新节点启动加入集群

缩容流程

text
1. 停止要移除的节点
2. 修改所有节点zoo.cfg删除配置
3. 依次重启各节点
4. 确保过半节点存活

扩缩容注意事项

注意点说明
过半存活操作时确保过半节点运行
配置同步所有节点配置需一致
重新选举Follower变更触发选举

提示:Observer扩缩容不触发选举,操作影响最小。

要点总结

  • Follower处理读请求、转发写请求、参与投票
  • Observer不参与投票,适合跨地域扩展读能力
  • Observer配置peerType=observer和:observer后缀
  • Follower扩缩容需重启集群触发重新选举
  • Observer扩缩容不触发选举,操作平滑
  • 操作时确保过半节点存活

📝 发现内容有误?点击此处直接编辑

← 上一篇 ZooKeeper Leader选举详解
下一篇 → ZooKeeper ZAB协议概述
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库