知识卡片

奇数节点法定人数避免脑裂

专业/工作 · 326

内容

多主同步复制集群里每个节点都能独立处理写请求,但一旦网络分区把集群切成两半,必须有办法决定哪一半继续对外提供服务,另一半停止写入,否则两边各自继续写入会导致数据永久分裂且无法自动合拢。解决办法是让集群节点数保持奇数,故障或分区发生时,节点们对”谁还能看到多数派”进行投票,只有拿到超过半数节点确认的那一部分才转为主状态继续服务,另一部分自动转为非主状态拒绝写入。如果节点数是偶数,网络分区完全可能把集群平分成势均力敌的两半,两边都凑不够多数票,导致整个集群双双进入不可写状态。发散:这是分布式共识里”多数派原则”的直接体现——凡是需要在网络分区下决定谁有权继续写入的系统(etcd、ZooKeeper、Raft集群)都在用同一个数学事实:奇数节点能保证任何一次二分总有一边占多数。

参考来源

《OpenStack云计算实战手册 第3版》第11章《生产环境中的OpenStack》