選擇中的幾個概念:算法
服務器ID(myid) 好比有三臺服務器,編號分別是1,2,3。 編號越大在選擇算法中的權重越大。 數據ID(數據版本號) 服務器中存放的最大數據ID. 值越大說明數據越新,在選舉算法中數據越新權重越大。 邏輯時鐘 或者叫投票的次數,同一輪投票過程當中的邏輯時鐘值是相同的。每投完一次票這個數據就會增長,而後與接收到的其它服務器返回的投票信息中的數值相比,根據不一樣的值作出不一樣的判斷。 選舉狀態 LOOKING,競選狀態。 FOLLOWING,隨從狀態,同步leader狀態,參與投票。 OBSERVING,觀察狀態,同步leader狀態,不參與投票。 LEADING,領導者狀態。
以上比較重要的就是「數據版本號」和「自己順序」服務器
考慮數據版本號和自己順序(myid),第一次,數據版本號同樣,加入到第三個時就選舉出了leader(第三個時,myid最大的那個已經獲得超過一半的投票,因此勝出)。大數據
選舉leader依據myid和數據版本號,myid越大,數據越新越可能成爲leader。這保證了,在死掉一些機器後,選舉出來的leader能有最新的數據。code
寫操做都是經過leader執行,往follower發的寫請求也會轉發到leader。blog
leader會確保半數以上的機器可寫,才寫成功,寫成功纔對外接請求。get
目前有5臺服務器,每臺服務器均沒有數據,它們的編號分別是1,2,3,4,5,按編號依次啓動,它們的選擇舉過程以下:同步