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扩缩容不触发选举,操作平滑
- 操作时确保过半节点存活
📝 发现内容有误?点击此处直接编辑