每個(gè)sever首先給自己投票,然后用自己的選票和其他sever選票對(duì)比,權(quán)重大的勝出,使用權(quán)重較大的更新自身選票箱。具體選舉過程如下:
1. 每個(gè)Server啟動(dòng)以后都詢問其它的Server它要投票給誰(shuí)。對(duì)于其他server的詢問, server每次根據(jù)自己的狀態(tài)都回復(fù)自己推薦的leader的id和上一次處理事務(wù)的zxid(系統(tǒng)啟動(dòng)時(shí)每個(gè)server都會(huì)推薦自己)
2. 收到所有Server回復(fù)以后,就計(jì)算出zxid最大的哪個(gè)Server,并將這個(gè)Server相關(guān)信息設(shè)置成下一次要投票的Server。
3. 計(jì)算這過程中獲得票數(shù)最多的的sever為獲勝者,如果獲勝者的票數(shù)超過半數(shù),則改 server被選為leader。否則,繼續(xù)這個(gè)過程,直到leader被選舉出來
4. leader就會(huì)開始等待server連接
5. Follower連接leader,將最大的zxid發(fā)送給leader
6. Leader根據(jù)follower的zxid確定同步點(diǎn),至此選舉階段完成。
7. 選舉階段完成Leader同步后通知follower已經(jīng)成為uptodate狀態(tài)
8. Follower收到uptodate消息后,又可以重新接受client的請(qǐng)求進(jìn)行服務(wù)了,目前有5 臺(tái)服務(wù)器,每臺(tái)服務(wù)器均沒有數(shù)據(jù),它們的編號(hào)分別是 1,2,3,4,5,按編號(hào)依次啟動(dòng),它們的選擇舉過程如下:
9. 服務(wù)器1啟動(dòng),給自己投票,然后發(fā)投票信息,由于其它機(jī)器還沒有啟動(dòng)所以它收不到反饋信息,服務(wù)器1的狀態(tài)一直屬于Looking。
10. 服務(wù)器2啟動(dòng),給自己投票,同時(shí)與之前啟動(dòng)的服務(wù)器1交換結(jié)果,由于服務(wù)器2的編號(hào)大所以服務(wù)器2勝出,但此時(shí)投票數(shù)沒有大于半數(shù),所以兩個(gè)服務(wù)器的狀態(tài)依然是LOOKING。
11. 服務(wù)器3啟動(dòng),給自己投票,同時(shí)與之前啟動(dòng)的服務(wù)器1,2交換信息,由于服務(wù)器3 的編號(hào)最大所以服務(wù)器3勝出,此時(shí)投票數(shù)正好大于半數(shù),所以服務(wù)器 3 成為領(lǐng)導(dǎo)者,服務(wù)器1,2 成為小弟。
12. 服務(wù)器4啟動(dòng),給自己投票,同時(shí)與之前啟動(dòng)的服務(wù)器1,2,3交換信息,盡管服務(wù)器 4 的編號(hào)大,但之前服務(wù)器3已經(jīng)勝出,所以服務(wù)器4只能成為小弟。
13. 服務(wù)器5啟動(dòng),后面的邏輯同服務(wù)器4成為小弟。