Bully 算法
在所有活著的節(jié)點(diǎn)中满哪,選取 ID 最大的節(jié)點(diǎn)作為主節(jié)點(diǎn)。
優(yōu)點(diǎn)
選舉速度快汛兜、算法復(fù)雜度低巴粪、簡(jiǎn)單易實(shí)現(xiàn)。
缺點(diǎn)
- 需要每個(gè)節(jié)點(diǎn)有全局的節(jié)點(diǎn)信息粥谬,因此額外信息存儲(chǔ)較多
- 任意一個(gè)比當(dāng)前主節(jié)點(diǎn) ID 大的新節(jié)點(diǎn)或節(jié)點(diǎn)故障后恢復(fù)加入集群的時(shí)候肛根,都可能會(huì)觸發(fā)重新選舉,成為新的主節(jié)點(diǎn)漏策,如果該節(jié)點(diǎn)頻繁退出派哲、加入集群,就會(huì)導(dǎo)致頻繁切主掺喻。
Raft 算法
獲得投票最多的節(jié)點(diǎn)成為主芭届。
優(yōu)點(diǎn)
選舉速度快、算法復(fù)雜度低感耙、易于實(shí)現(xiàn)的
缺點(diǎn)
要求系統(tǒng)內(nèi)每個(gè)節(jié)點(diǎn)都可以相互通信褂乍,且需要獲得過半的投票數(shù)才能選主成功,因此通信量大抑月。
該算法選舉穩(wěn)定性比 Bully 算法好树叽,這是因?yàn)楫?dāng)有新節(jié)點(diǎn)加入或節(jié)點(diǎn)故障恢復(fù)后,會(huì)觸發(fā)選主谦絮,但不一定會(huì)真正切主题诵,除非新節(jié)點(diǎn)或故障后恢復(fù)的節(jié)點(diǎn)獲得投票數(shù)過半,才會(huì)導(dǎo)致切主层皱。
ZAB 算法
少數(shù)服從多數(shù)性锭,ID 大的節(jié)點(diǎn)優(yōu)先成為主。
優(yōu)點(diǎn)
穩(wěn)定性較好叫胖,當(dāng)有新節(jié)點(diǎn)加入或者節(jié)點(diǎn)故障后不一定切主草冈。
缺點(diǎn)
- 采用廣播方式發(fā)送信息,若節(jié)點(diǎn)中有 n 個(gè)節(jié)點(diǎn),每個(gè)節(jié)點(diǎn)同時(shí)廣播怎棱,則集群中信息量為 n*(n-1) 個(gè)消息哩俭,容易出現(xiàn)廣播風(fēng)暴
- 除了投票,還增加了對(duì)比節(jié)點(diǎn) ID 和數(shù)據(jù) ID拳恋,這就意味著還需要知道所有節(jié)點(diǎn)的 ID 和數(shù)據(jù) ID凡资,所以選舉時(shí)間相對(duì)較長(zhǎng)。