【Mongodb】 Replica set 的選舉策略之一

楊奇龍發表於2011-11-02
首先介紹一下在replica set裡分為三種節點型別:
1 primary   負責client的讀寫。
2 secondary 作為熱備節點,應用Primary的oplog讀取的操作日誌,和primary保持一致,不提供讀寫操作!
  secondary有兩種型別: 
  1)normal secondary   隨時和Primay保持同步,  
  2)delayed secondary  延時指定時間和primary保持同步,防止誤操作. 
3 arbiter.它不負責任何讀寫,只作為一個仲裁者,負責primary down的時候剩餘節點的選舉操作.
    在Replica Set 如果主庫down了,要進行故障切換,叢集的選舉策略:
當primary當了之後,剩下的節點會選擇一個primary節點,仲裁節點也會參與投票,避免僵局出現(如果沒有仲裁節點,對於兩節點的replica set 從節點down,主節點會變為secondary,導致整個replica set 不可用)選擇依據為:優先順序最高的且資料新鮮度最新的!
    primary 節點使用心跳來跟蹤叢集中有多少節點對其可見。如果達不到1/2,活躍節點會自動降級為secondary。這樣就能夠防止上面說的僵局狀態或者當網路切割後primary已經與叢集隔離的時候!
來自官方文件的例子:
初始狀況:
server-a: secondary oplog: ()
server-b: secondary oplog: ()
server-c: secondary oplog: ()
主庫寫入資料
server-a: primary oplog: (a1,a2,a3,a4,a5)
server-b: secondary oplog: ()
server-c: secondary oplog: ()
secondary庫應用資料
server-a: primary oplog: (a1,a2,a3,a4,a5)
server-b: secondary oplog: (a1)
server-c: secondary oplog: (a1,a2,a3)
主庫server-adown
server-b: secondary oplog: (a1)
server-c: secondary oplog: (a1,a2,a3)
...
server-b: secondary oplog: (a1)
server-c: primary oplog: (a1,a2,a3) // c 具有最新的資料被選擇為primary庫
...
server-b: secondary oplog: (a1,a2,a3)
server-c: primary oplog: (a1,a2,a3,c4)
...
server-a 恢復或者起來
...
server-a: recovering oplog: (a1,a2,a3,a4,a5) --做資料恢復
server-b: secondary oplog: (a1,a2,a3)
server-c: primary oplog: (a1,a2,a3,c4)
…應用從server-c中的資料,此時 資料a4,a5丟失
server-a: recovering oplog: (a1,a2,a3,c4)
server-b: secondary oplog: (a1,a2,a3,c4)
server-c: primary oplog: (a1,a2,a3,c4)
新的主庫server-c進行資料寫入。
server-a: secondary oplog: (a1,a2,a3,c4)
server-b: secondary oplog: (a1,a2,a3,c4)
server-c: primary oplog: (a1,a2,a3,c4,c5,c6,c7,c8)
server-a: secondary oplog: (a1,a2,a3,c4,c5,c6,c7,c8)
server-b: secondary oplog: (a1,a2,a3,c4,c5,c6,c7,c8)
server-c: primary oplog: (a1,a2,a3,c4,c5,c6,c7,c8)
從上面的過程中可以看出server-c 變為主庫,其他節點則應用從server-c的日誌。資料a4,a5 丟失。
    當選出新的primary之後,此資料庫的資料就會被假定為整個叢集中的最新資料,對其他節點(原來的活躍節點)的操作都會回滾,即便之前的主庫已經恢復工作了。為了完成回滾,所有節點連線新的主庫後都要重新進行同步。此過程如下:
這些節點會檢視自己的oplog日誌,找到還沒應用的主庫操作,然後向主庫請求這些操作影響的文件的最新副本,進行資料同步。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22664653/viewspace-710132/,如需轉載,請註明出處,否則將追究法律責任。

相關文章