Bully 算法
在所有活着的节点中,选取 ID 最大的节点作为主节点。
优点
选举速度快、算法复杂度低、简单易实现。
缺点
- 需要每个节点有全局的节点信息,因此额外信息存储较多
- 任意一个比当前主节点 ID 大的新节点或节点故障后恢复加入集群的时候,都可能会触发重新选举,成为新的主节点,如果该节点频繁退出、加入集群,就会导致频繁切主。
Raft 算法
获得投票最多的节点成为主。
优点
选举速度快、算法复杂度低、易于实现的
缺点
要求系统内每个节点都可以相互通信,且需要获得过半的投票数才能选主成功,因此通信量大。
该算法选举稳定性比 Bully 算法好,这是因为当有新节点加入或节点故障恢复后,会触发选主,但不一定会真正切主,除非新节点或故障后恢复的节点获得投票数过半,才会导致切主。
ZAB 算法
少数服从多数,ID 大的节点优先成为主。
优点
稳定性较好,当有新节点加入或者节点故障后不一定切主。
缺点
- 采用广播方式发送信息,若节点中有 n 个节点,每个节点同时广播,则集群中信息量为 n*(n-1) 个消息,容易出现广播风暴
- 除了投票,还增加了对比节点 ID 和数据 ID,这就意味着还需要知道所有节点的 ID 和数据 ID,所以选举时间相对较长。
网友评论