MongoDB實戰第二版筆記(12)第十一章筆記

  1、複製是跨多個MongoDB服務器(節點)分佈和維護數據的方法,MongoDB可以把數據從一個節點複製到其他節點並修改時進行同步。這種複製通過可複製集機制提供。集合中的節點配置爲自動同步數據,並且在服務器出錯時自動災備

  2、MongoDB提供舊的複製,主從複製,但已過時。主節點接受所有寫QQ,而從節點讀取並且異步同步所有的數據。

  3、主從複製和可複製集羣有相同複製機制,後者增加自動化災備,還提供改進,比如更易恢復和更復雜部署拓撲網絡。

  4、複製的缺點在回滾機制。可複製集羣裏,數據並非真正提交,而是被寫入大多數集羣的節點,這指的是50%上的服務器。如果可複製集羣只有兩個數據庫,就意味着沒有服務器可以換停機。如果主節點在複製數據之前停機,其他成員將繼續接受收入,而且任意未複製的數據必須回滾,意味着它不能被讀取。

  5、複製是爲冗餘設計的,它確保從節點和註解的的數據同步,這樣複製節點可以和主節點位於一個數據中心或者爲了安全可以分佈於其他數據中心。

  複製是異步的,任何網絡延遲和分區都不會影響主節點的性能。

  複製節點可以延遲某個固定時間點後執行,這防止用戶無意刪除集合或應用程序與數據庫衝突的情況。

  複製簡化維護工作,允許管理員在從節點而不是主節點上運行命令。

  複製可以允許在從節點上平衡讀/寫壓力。

  6、可複製集羣無能爲力的情況:(1)現有硬件無法處理工作負荷;(2)寫入和讀取的比例超過50%。(3)應用程序需要一致性讀取。

  7、可複製集羣工作原理:oplog和heartbear。前者允許複製數據,後者監控狀態並促發災備。

  8、MongoDB的複製機制依賴於oplog,這是個蓋子集合,存在於每個複製節點的local數據庫,而且記錄了所有的數據變化。 每次客戶端寫入主節點的數據,包含足夠重生信息的項目就會被添加到主節點的oplog中。一旦寫入的數據被複制到某個從節點,從節點的oplog也會存儲這個寫入請求的記錄。每個oplog項目通過BSON的時間戳來區分,並且所有的從節點使用時間戳來追蹤它們應用的最新項目。

  9、對於多個更新或者大量的刪除,每個受影響的文檔都會單獨創建oplog文檔。

  10、主節點寫上寫數據,寫操作會被記錄並添加到主節點的oplog裏,然後所有從節點都會複製主節點的oplog。當某個從節點準備更新自己的數據時,會做下面的三件事情:

  • 查看自己oplog裏最新記錄的時間戳
  • 查詢主節點的oplog,查詢所有時間戳大於自己當前時間戳的oplog記錄
  • 寫入數據,並添加每個操作日誌到自己的oplog裏

  假如出現故障,任意的提升爲主節點的從接到都會有一個oplog,這樣其他從接到都可以複製。這個特性本質支持了可複製集的故障恢復功能。

  11、從接到使用長輪訓來立即應用從主節點複製的oplog記錄。長輪訓意味從節點向主節點發送了個長請求。當主節點接受修改,會立即響應等待的請求。因此從節點幾乎可以做到實時更新。當它們落後時,因爲網絡分區或者從節點維護,每個從節點裏的oplog可以用來監控任意落後的複製。

  12、主從複製的缺點是災備是完全人工的。如果主節點發生故障失敗,管理員必須關閉一個從服務器,然後作爲主節點重新啓動,應用程序必須重新配置連接性的主節點。而且恢復困難。因爲oplog只在主節點存在,故障失敗需要在新的服務器上創建新的oplog。這意味着,任意存在的節點需要重新從新的主節點同步oplog。

  13、如果從節點無法在主節點oplog找到同步的日誌記錄點,會永久停止複製。唯一的補救措施是完整地重新同步主節點的數據。爲避免這個問題,可以嘗試最小化從節點的失敗時間。

  14、3.0版本後,可以修改oplog的大小。操作步驟:停止mongod實例,然後作爲獨立節點啓動,修改oplog大小,重新啓動。

  15、可複製集心跳便於選舉和災備。默認情況下,每個可複製集成員會每隔2秒ping一次索引的其他成員,這樣系統可以判斷自己的健康狀態。運行rs.status()查看每個節點的最新心跳和狀態(1表示健康,0表示無應答)。

  16、每個節點仍然健康並相應,可複製集就會繼續工作。如果某節點無法響應,則可能會採取行動。每個可複製集確保一直只有一個主節點存在

可複製集狀態

在這裏插入圖片描述

  17、恢復是指在故障後恢復可複製集到最初狀態的過程。

  18、兩個失敗類型要處理:

  • 乾淨失敗:該節點的數據文件仍然完整。
  • 絕對失敗:節點數據文件要麼丟失,要麼衝突。

  19、MongoDB3.0裏的可複製集可包含50個節點。

  20、MongoDB驅動爲連接可複製集羣提供了統一接口。

  • 單節點連接:驅動會初始化TCP socket連接,然後運行isMaster命令。

  • 可複製集連接:科研單獨連接可複製集裏的單個節點。

    Mongo::Client.new(['iron:40000','iron:40001'],:replica_set=>'myapp')
    

  21、驅動的寫關注點控制着在返回之前必須有多少個節點被寫入。增加這個值可增加持久性。

  22、MongoDB允許通過讀偏好和標籤來控制更復雜的可複製集的讀/寫行爲,特別是在多個數據中心部署可複製集成員時。

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