zookeeper集群搭建的時(shí)候都是推薦奇數(shù)個(gè)節(jié)點(diǎn),而且其leader選舉機(jī)制要求,只有當(dāng)前節(jié)點(diǎn)獲得的票數(shù) > 總票數(shù)/2的情況下才會(huì)晉升為leader節(jié)點(diǎn)(不是≥峭弟,是>!!!!!!!!!很重要)。主要原因如下:
-
節(jié)省資源:
- 上圖集群由7個(gè)節(jié)點(diǎn),選舉投票時(shí)履怯,需要大于7/2票,也就是4票可以選舉出leader節(jié)點(diǎn)裆泳,最少要求5太機(jī)器正常叹洲,也就是最多允許3個(gè)節(jié)點(diǎn)宕機(jī)。
- 如果這個(gè)集群由8個(gè)節(jié)點(diǎn)工禾,則需要最少5個(gè)節(jié)點(diǎn)正常运提,同樣也是允許3個(gè)節(jié)點(diǎn)宕機(jī)。
所以闻葵,7個(gè)節(jié)點(diǎn)和8個(gè)節(jié)點(diǎn)的容錯(cuò)能力相同民泵,所以選擇7個(gè)節(jié)點(diǎn)的集群方案更加節(jié)省資源。
2.防止腦裂造成集群不可用:
上圖集群中如果由于通信問題笙隙,使左側(cè)與右側(cè)失去聯(lián)系洪灯,而同側(cè)集群可以正常運(yùn)行。此時(shí)由于只有只有7/2 + 1 = 4個(gè)節(jié)點(diǎn)投同一個(gè)節(jié)點(diǎn)時(shí)竟痰,才能選舉出master签钩。所以左側(cè)集群還是可用的。不管如何劃分坏快,奇數(shù)個(gè)集群總是可用的铅檩。
如果集群改為偶數(shù)個(gè),假設(shè)是6個(gè)莽鸿,如果三個(gè)集群“失聯(lián)”昧旨,則直接就導(dǎo)致,剩下的3個(gè)集群無法選舉出master祥得,導(dǎo)致集群不可用兔沃!