標籤:增量 檢查 流量 降級 還需 除了 總結 就會 通訊
前面的文章介紹了MongoDB複本集和分區叢集的做法,下面對MongoDB叢集的日常維護操作進行小總結:
MongDB複本集容錯移轉功能得益於它的選舉機制。選舉機制採用了Bully演算法,可以很方便從分布式節點中選出主節點。Bully演算法是一種協調者(主節點)競選演算法,主要思想是叢集的每個成員都可以聲明它是主節點並通知其他節點。別的節點可以選擇接受這個聲稱或是拒絕並進入主節點競爭。被其他所有節點接受的節點才能成為主節點。節點按照一些屬性來判斷誰應該勝出。這個屬性可以是一個靜態ID,也可以是更新的度量像最近一次事務ID(最新的節點會勝出)。1)MongoDB叢集的節點數量官方推薦MongoDB複本集的成員數量為奇數,且選舉要求參與的節點數量必須大於成員數的一半。假設MongoDB叢集有3個節點,那麼只要有2個節點活著就可以選舉;如果有5個,那麼活3個節點就可以選舉;如果有7個節點,那麼活4個就可以選舉.....MongoDB叢集最多允許12個複本集節點,其中最多7個節點參與選舉。這是為了減少心跳請求的網路流量和選舉話費的時間,心跳每2秒發送一次。MongoDB叢集最多12個複本集節點是因為沒必要一份資料複製那麼多份,備份太多反而增加了網路負載和拖慢了叢集效能;而最多7個節點參與選舉是因為內部選舉機制節點數量太多就會導致1分鐘內還選不出主節點,凡事只要適當就好。2)MongoDB心跳整個MongoDB叢集需要保持一定的通訊才能知道哪些節點活著哪些節點掛掉。MongoDB節點會向複本集中的其他節點每兩秒就會發送一次pings包,如果其他節點在10秒鐘之內沒有返回就標示為不能訪問。每個節點內部都會維護一個狀態映射表,表明當前每個節點是什麼角色、日誌時間戳記等關鍵資訊。如果是主節點,除了維護映射表外還需要檢查自己能否和叢集中內大部分節點通訊,如果不能則把自己降級為secondary唯讀節點。3)MongoDB同步MongoDB複本集同步分為初始化同步和keep複製。初始化同步指全量從主節點同步資料,如果主節點資料量比較大同步時間會比較長。而keep複製指初始化同步過後,節點之間的即時同步一般是增量同步處理。初始化同步不只是在第一次才會被處罰,有以下兩種情況會觸發:[1] secondary第一次加入,這個是肯定的。[2] secondary落後的資料量超過了oplog的大小,這樣也會被全量複製。
MongoDB複本集營運小結