对于一个分布式系统,一般都是有多个节点组成集群,比如原理有3个节点,需要增加一个,那么raft这个时候如何保证ledaer的唯一性。
当增加两个节点的时候,就可能造成出现两个分区。从而打破原有的领导者的唯一性。影响集群的稳定性。
单节点变更
解决方案就是通过单节点变更。既然一次变更多个容易出现网络分区。那么就一个节点一个节点进行变更。
原来有ABC三个节点,先添加D节点。
- 领导者将数据同步给D节点。
- 领导者将新的配置项 [A、B、C、D] 作为一个日志项,复制到新配置中所有节点。本地提交。完成单节点的变更。
这样通过一个一个节点的变更,就可以完成变更,保证集群中始终只有一个领导者。
Raft不是一致性算法而是共识算法, 是一个multi-paxos算法,可以就一系列值达成共识,并且容忍少数节点的故障。