第五部分 架構篇 第十三章 MongoDB Replica Sets 架構(成員深入理解)

來源:互聯網
上載者:User

標籤:mongodb replica set成

在學習複製的概念之前,首先接著前面一章節的還有點未完結的內容做個簡單的介紹,主要是自動容錯移轉、非同步複製、以及附加功能,這些在此只做簡單的介紹,在以後的相關章節中會專門深入學習。

1、自動容錯移轉

當Primary服務和架構中其他成員中斷通訊超過10秒,Replica Set將嘗試選舉其他成員成為一個新的Primary服務,獲得多票數的Scondary將成為Primary。

架構如下:


說明:

在一個Replica Set架構中,如果Primary不可達,則會在除Primary之外的其他成員中自動選舉一個Scondary來作為新的Primary,使Replica Set保證可用,起到自動容錯移轉的目的。


2、非同步複製

Secondaries從Primary非同步應用所有的操作,正在非同步應用Primary操作時,集合可能繼續工作,但是此時並不會複製資料到其他成員,所以當用戶端通過Secondary節點返回資料時可能不是資料集得最新資料。


3、附加功能
Replica Set提供了大量的選項,以便支援應用的需要。比如你可以部署一個多資料中心的Replica Set,或者通過調整成員的優先順序去控制選舉結果,Replica Set可以支援成員的報表、容災恢複,或者備份功能。


4、複製概念(本章重點)

該章節主要描述和提供了關於Replica Set的操作、配置、和行為的執行個體,關於Replica Set的簡介,以及文檔的管理命令請學習前面相關章節。

4.1、Replica Set Memebers(成員)

MongoDB一個Replica Set是一組mongod進程,提供了冗餘和高可用特性,一個Replica Set的成員包括如下

  • Primary:primary接收所有的寫操作
  • Secondary:從primary複製所有的操作來持有一份相同的資料集,Secondary也許添加一些特殊用途的配置,比如,Secondary沒有選舉權和優先順序設定為0等。
當然也可以添加一個arbiter(仲裁者)在一個Replica Set架構中,Arbiter不能持有一份複製的資料,然後仲裁者在Replica Set架構中扮演一個控制選舉的角色,當Replica Set中primary不可達,需要重新選舉其他成員作為新的primary時。
一個Replica Set最多可以有12個成員,然後在同一時間中只有7個成員能夠被投票選舉。一個Replica Set最小的架構包括:1個primary、1個secondary、1個arbiter,然後大多數的部署將保持三個成員來儲存資料:一個primary和兩個secodary成員。
4.2、Primary在前面的章節已經瞭解過了primary基礎知識,在此章節深入學習,在一個Replica Set架構中,當且僅有一個primary服務用於接收所有的寫操作,MongoDB在primary應用寫操作了,同時記錄primary寫操作的主日誌(oplog),Secondary成員複製這個日誌同時根據該複製日誌進行複製資料集合的操作。如下為一個三個成員的Replica Set架構:

說明:
  • Replica Set所有成員都可以接收讀操作,預設情況下,從primary進行讀操作,可以通過配置來更改讀操作行為。
預設情況下,用戶端直接通過primary進行讀操作,以此來保證返回的是一個文檔最新的版本,然而通過分配一些讀操作給secondary成員,以此來改善系統的讀輸送量或者減少當一個應用不需要完整的資料時不可預知的問題。注意:當指定一個primary之外的成員能接收讀操作時,你必須格外的小心,因為secondary成員可能並沒有從primary同步最新的資料集合。原理結構如下:如果選擇一個沒有primary的讀模式,也許應用擷取不到即時的資料,因為secondary會有一些耽擱,MongoDB驅動提供了五種讀模式:* primary:預設模式,所有的讀操作來自當前Replica Set架構的primary。* primaryPreferrd:大多數情況下,讀操作通過primary,但是當primary不可達時,讀操作通過secondary進行* secondary:所有讀操作通過secondary成員進行。* secondaryPreferred:該模式下,讀操作通過secondary進行,但是當secondary不可達時,讀操作會自動通過primary進行。* nearset:讀操作通過replica set架構中網路延誤最近的成員進行,不管該成員是什麼類型。
  • Replica Set有且僅有一個primary成員。如果當前primary成員不可達,會自動選擇一個其他成員作為新的primary,來保證整個架構的可用。

4.3、Secondaries在前面已經介紹過secondary,它主要通過primary日誌來進行資料的複製操作,有一些延遲,如果一個應用直接通過secondary來讀取資料,可能擷取的不是Replica Set架構最新的資料,一個Replica Set架構中可以有一個或者多個secondary成員,如下是三個成員的Replica Set架構,包括兩個secondary成員:
儘管用戶端不能直接通過Secondary進行寫操作,用戶端能通過secondary進行資料讀取操作,一個secondary也可以在primary不可達的情況下轉換成primary,同時也可以自主制定一些配置來賦予secondary特殊功能:
  • 如阻止一個secondary成員在選舉中成為primary,此時只需將該成員的優先順序(priority)設定為0即可。
       (1)、Replica Set成員優先順序0介紹
        一個優先順序(priority)為0的secondary成員不可能在primary不可達時轉變為新的primary,優先順序為0的成員不能觸發選舉事件,但是它可以持有一份複製的資料集合,也可以進行讀操作和選舉,配置一個成員的優先順序為0,主要是為了阻止該成員成為primary,在多資料中心部署中這是非常有用的。     如下一個三個成員的Replica Set架構中,在第一個資料中心的主機上,一個primary成員和一個secondary成員,在的第二個資料中心的主機上一個優先順序為0的secondary不可能成為primary。

(2)、優先順序為0成員的作用  一個優先順序為0的成員通常作為一個資料備份,在一些Replica Set架構中,也許不可能在一個合適的時間添加一個新的成員,一個持有當前資料備份的一個備用成員可以替代一些停用成員。  在許多的案例中,你不需要通過設定優先權為0去將成員作為備份成員,在不同的硬體以及地理分布式部署中,優先順序0的備用確保僅有合格成員才能成為primary。      如果在架構中已經有7個成員有投票選舉權時,將其他的成員配置為非選投票成員時,可以通過該方法實現。(3)、優先順序為0成員和容錯移轉  通過配置一個優先順序為0成員,考慮潛在的故障模式,包括所有可能的網路磁碟分割,始終確保你的主要資料中心包含符合規則的選舉成員和確定成員。(4)、配置 注意:rs.resconfig()方法可以使當前的primary服務下台,當一個primary下台(不可達)之後,mongod會關閉所有的用戶端串連,這個過程將花費10到20秒。為了成功的配置replica set,大多數成員必須是可訪問的,如果你的replica set成員是偶數,可以添加一個arbiter來確保擷取多數選票的成員成為primary。         (1)、檢索當前replica set配置  rs.conf()費那個發返回一個replica set包含當前replica set配置的文檔。  一個mongo用戶端串連到一個primary,運行rs.conf()方法同時分配給一個變數,如下:
<span style="white-space:pre"></span>   cfg = rs.conf()
 該方法會返回一個Replica Set架構包含所有成員配置的文檔。(2)、分配優先順序值為0 為了分配一個優先順序值給Replica Set中的一個成員,訪問該成員的配置文檔實用一個數組索引,在下面的例子中改變數組角標為2的成員的優先順序為0
<span style="white-space:pre"></span>  cfg.members[2].priority = 0
該配置只有當重新設定replica set之後才會生效。(3)、重新設定replica set使用rs.reconfig()方法重新設定replica set用於更新配置文檔。在rs.reconfig()方法中使用cfg變數即可。
<span style="white-space:pre"></span> rs.reconfig(cfg)
  • 如阻止一個應用通過secondary進行讀操作,此時只需要將該成員在Replica Set架構中隱藏即可。
隱藏Replica set成員 (1)、一個隱藏的成員仍然保持一份主要的資料集合,但是用戶端應用程式對其不可見,一個隱藏成員必須總優先順序始終為0,不可能變為primary,且使用db.isMaster()方法不能顯示隱藏成員,如下是一個五個成員的replica set架構,四個成員都持有primary的資料集合,但是有一個成員是隱藏成員。
(2)、讀操作 用戶端不會通過一個隱藏成員來進行讀操作,因此這些成員不能接受其他成員基礎複製操作,使用隱藏成員任務有如報表、備份,延遲的成員應該被隱藏。在一個分區叢集中,mongos路由不能和隱藏成員進行互動。        (3)、選舉如果你停止一個隱藏成員,以此來確保集合有更多活躍的成員或者primary停止。由於備份的目的,可以避免停止隱藏成員使用db.fsyncLock()和db.fsyncUnlock()非那操作去重新整理所有的寫操作在備份操作中對mongod執行個體進行枷鎖。
  • 如通過運行一個曆史快照來從一個確認的錯誤中恢複,如無意中刪除資料庫。


第五部分 架構篇 第十三章 MongoDB Replica Sets 架構(成員深入理解)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.