mongoDB副本集

一. 簡介

      生產環境中,如果mongoDB只起來一個單點,一個服務器進程,風險很高。如果這個服務器進程掛了,就會導致服務宕機。我們可以通過mongoDB的副本集功能,爲主服務創建多個副本,如果主服務掛了,下面的副本中一個會晉升爲主服務,另外,從其餘副本中拷貝出一份副本,繼續提供服務。

    1. 副本集裏面的主節點,可以執行任何操作

    2. 默認不能在備份節點執行寫操作

    3. 默認不能從備份節點讀取數據,在備份節點顯示執行setSlaveOk之後,纔可以從備份節點讀取數據

二. 設計副本集的數量

     1. 需要滿足大多數的場景,主節點的上任(啓動的時候上任,或者主節點掛了,繼任者上任)需要得到大多數的支持。比如備份節點是3,大多數就是2. 備份節點是5,大多數就是3.

     2. 推薦將大多數成員放入一個數據中心,這樣這個數據中心就能夠選出一個主節點。 將另外的少數成員放入另外一個數據中心做備份,這個中心永遠都選不出主節點。保證了數據安全,又保證了不會同時選出2個主節點。

    3. 不推薦配置2個副本集的數據中心,如果一個不可用了,另外一個會選不出主節點,如果已經是主節點,也會從主節點退下來。因爲只有1臺,不滿足大多數的條件。

    3. 推薦使用奇數個成員的副本集,比如3,5,7,這樣的話選舉會比較容易一些。

    4. 可以設置延遲備份節點,比如有人不小心把主庫刪除了,或者上線的功能,有嚴重的bug,誤刪了數據。這個時候延遲備份節點還沒有感應到,可以從這個節點恢復數據。

三. 數據同步

      mongoDB主節點,每一次操作都會記錄到一個集合裏面,備份節點可以通過這個集合(oplog)同步數據。每一個備份節點從主節點複製到數據之後,先操作,然後同步寫入oplog日誌(一個集合)。這樣,其他節點可以選擇這個備份節點來同步數據,避免都從主節點同步。

      由於oplog大小是有限制的,如果同步比較慢,可能oplog已經被刪了,備份節點數據還沒同步。這個時候,備份節點就會結束同步,需要進行完全同步了。

四. 選舉

      當一個成員無法到達主節點的時候,就會申請成爲主節點。這個時候,其他節點收到消息,會判斷是否可以進行選舉(比如主節點還存在,只是它不可達。 或者主節點掛了,它的數據是否最新)。心跳間隔時間是2S,也就是主節點掛了,最多2S其他節點就能夠感知到,並且推舉出新主節點。

五. 等待寫入複製

      如果希望不管發生什麼,都要將寫入操作保存到副本集中,我們確保寫入操作被同步到副本集的大多數就可以。

比如 db.runCommand({"getLastError":1,"w":"majority","wtimeout":1000}) 

majority 代表大多數,也可以指定爲數字,比如2,表示同步到1個副本集,因爲另外一個是主節點。

wtimeout 超時時間


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章