MongoDB副本集心跳和同步機制
MongoDB建議副本整合員為奇數。最多12個副本節點,最多7個節點參與選舉。
限制副本節點的數量,主要是因為一個叢集中過多的副本節點,增加了複製的成本,反而拖累了叢集的整體效能。
太多的副本節點參與選舉,也會增加選舉的時間。而官方建議奇數的節點,是為了避免腦裂的發生。
![](https://i.iter01.com/images/a7eb6de680c076f143ab7346ea6a4ab67feaa09b2374c125f3e62ba964344a0d.jpg)
如果兩個網段的網路發生故障,則每個網段都有兩個節點存活,他們檢視自己的對映表,不能確定對方是否已死,也不能確定自己是否能成為主節點。
如果他們各自推選出主節點,則叢集網路恢復的時候,就會有兩個主節點,資料無法達成一致。所以這個時候,MongoDB會選擇讓所有的節點只讀。
兩個節點也是同樣的問題,一旦出現故障,每個節點都不能判斷是自己出了問題,還是對方出了問題。所以他們都會選擇將自己設定為只讀。
整個叢集需要保持一定的通訊才能知道哪些節點活著哪些節點掛掉。mongodb節點會向副本集中的其他節點每兩秒就會傳送一次pings包,如果其他節點在10秒鐘之內沒有返回就標示為不能訪問。每個節點內部都會維護一個狀態對映表,表明當前每個節點是什麼角色、日誌時間戳等關鍵資訊。如果是主節點,除了維護對映表外還需要檢查自己能否和叢集中內大部分節點通訊,如果不能則把自己降級為secondary只讀節點。
副本集同步分為初始化同步和keep複製。初始化同步指全量從主節點同步資料,如果主節點資料量比較大同步時間會比較長。而keep複製指初始化同步過後,節點之間的實時同步一般是增量同步。初始化同步不只是在第一次才會被觸發,有以下兩種情況會觸發:
secondary第一次加入,這個是肯定的。
secondary落後的資料量超過了oplog的大小,這樣也會被全量複製。
那什麼是oplog的大小?前面說過oplog儲存了資料的操作記錄,secondary複製oplog並把裡面的操作在secondary執行一遍。但是oplog也是mongodb的一個集合,儲存在local.oplog.rs裡,但是這個oplog是一個capped collection也就是固定大小的集合,新資料加入超過集合的大小會覆蓋。所以這裡需要注意,跨IDC的複製要設定合適的oplogSize,避免在生產環境經常產生全量複製。oplogSize 可以通過–oplogSize設定大小,對於linux 和windows 64位,oplog size預設為剩餘磁碟空間的5%。
同步也並非只能從主節點同步,假設叢集中3個節點,節點1是主節點在IDC1,節點2、節點3在IDC2,初始化節點2、節點3會從節點1同步資料。後面節點2、節點3會使用就近原則從當前IDC的副本集中進行復制,只要有一個節點從IDC1的節點1複製資料。
設定同步還要注意以下幾點:
secondary不會從delayed和hidden成員上覆制資料。
只要是需要同步,兩個成員的buildindexes必須要相同無論是否是true和false。buildindexes主要用來設定是否這個節點的資料用於查詢,預設為true。
如果同步操作30秒都沒有反應,則會重新選擇一個節點進行同步。來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29254281/viewspace-1176821/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- mongodb 4.0副本集搭建MongoDB
- MongoDB 6.0.3副本集搭建MongoDB
- MongoDB日常運維-04副本集搭建MongoDB運維
- MongoDB日常運維-05副本集故障切換MongoDB運維
- MongoDB 4.2副本集新增/刪除副本(一主一副一仲裁)MongoDB
- Ceph心跳機制
- MongoDB 4.2副本集自動故障轉移(一主一副一仲裁)MongoDB
- MongoDB日常運維-06副本集搭建錯誤彙總MongoDB運維
- 心跳檢測機制
- 聊聊心跳機制及netty心跳實現Netty
- MongoDB副本集MongoDB
- MongoDB原理:複製集狀態同步機制MongoDB
- xxl-job心跳機制
- MongoDB部署副本集MongoDB
- 搭建MongoDB副本集MongoDB
- MongoDB 副本集搭建MongoDB
- MongoDB 副本集管理MongoDB
- Kafka消費與心跳機制Kafka
- 2.MongoDB 4.2副本集環境基於時間點的恢復MongoDB
- 006.MongoDB副本集MongoDB
- MongoDB - 副本集簡介MongoDB
- 單機Linux下搭建MongoDB副本集-三節點LinuxMongoDB
- MongoDB副本集replica set (二)--副本集環境搭建MongoDB
- MongoDB 副本集切換方法MongoDB
- MongoDB 副本集原理及管理MongoDB
- 理解WebSocket心跳及重連機制(五)Web
- MongoDB 複製機制MongoDB
- MongoDB Replica Set 副本集實踐MongoDB
- Netty(一) SpringBoot 整合長連線心跳機制NettySpring Boot
- MongoDB 刪除,新增副本集,並修改副本集IP等資訊MongoDB
- MongoDB學習4:MongoDB複製集機制和原理,搭建複製集MongoDB
- 手把手教你搭建mongodb副本集MongoDB
- Python連線訪問mongodb副本集PythonMongoDB
- mongodb副本集新增刪除節點MongoDB
- Mongodb分散式叢集副本集+分片MongoDB分散式
- 如何設計一個優雅的心跳機制
- UAV心跳機制與容器、程式資料採集
- [原始碼解析] 從TimeoutException看Flink的心跳機制原始碼Exception
- Javascript非同步機制JavaScript非同步