仲裁与裂脑
集群要保证同一份数据只有一个权威副本集,靠的就是多数派仲裁:只有超过半数的成员达成一致,集群才允许继续写入。当网络把集群切成两半、两边都以为自己才是正统时,就是裂脑。防护的核心不是让两边都能写,而是让任何一侧都不具备独立做主的条件。
基本信息
| 适用类型 | Ceph MON、etcd、ZooKeeper、数据库主从集群 |
|---|---|
| 决定因素 | 成员总数与多数派比例 |
| 常见部署 | 奇数节点,跨站点时增设仲裁站点 |
| 关键概念 | 租约、隔离(fencing)、见证节点 |
典型使用场景
- 双机房部署:两站点各占一半容量,需第三处放仲裁避免谁都做不了主
- 虚拟化与超融合:宿主机与存储同物理机,故障域重叠时更易裂脑
- 数据库主库切换:需要隔离旧主才能安全提升新主
- 集群缩容:从偶数节点减到奇数节点的操作必须一次到位
- 机架级故障演练:验证切一半链路后集群是否安全停写而非双写
验证仲裁余量
验证仲裁余量
ceph -s # 看 quorum 是否包含全部 MON 与是否只读
ceph mon stat # 确认 MON 成员数与当前参与仲裁的数量
ceph mon dump # 核对 MON 地址与选举策略(以官方文档为准)
# 演练思路:断开一组 MON 的链路,确认集群转为只读而不是继续双写成员数与容错
| 成员数 | 可容忍失效数 | 说明 |
|---|---|---|
| 3 | 1 | 常见最小生产配置 |
| 5 | 2 | 跨站点更稳,写延迟略增 |
| 4 | 1 | 没有额外收益,反而更易失去多数派 |
| 2 | 0 | 任一节点故障即无法仲裁,禁止用于生产 |
裂脑防护手段
- 多数派规则:少于一半成员时拒绝写入,宁可停写也不双写
- 隔离机制:切换前先强制切断旧主的网络与电源通路,避免旧主继续服务
- 租约与超时:协调者授予的租约到期前旧主必须停止服务
- 见证节点:只参与投票不存数据,降低跨站点仲裁成本
- 监控与演练:定期演练单站点断链,验证停写与恢复路径符合预期
仲裁节点的作用是打破平票,不承担数据读写;它所需要的带宽与容量极小,但链路质量必须稳定。
跨站点同步复制时,写延迟取决于两端往返时延与写入路径的交集;把仲裁放到远距离站点会同时放大延迟与误判概率,规划前先实测链路。