您好,登錄后才能下訂單哦!
小編給大家分享一下mongodb副本集指的是什么意思,希望大家閱讀完這篇文章后大所收獲,下面讓我們一起去探討吧!
副本集簡介
Mongodb副本集由一組Mongod實例(進程)組成,包含一個Primary節點和多個Secondary節點,Mongodb Driver(客戶端)的所有數據都寫入Primary,Secondary從Primary同步寫入的數據,以保持復制集內所有成員存儲相同的數據集,提供數據的高可用。副本集帶來的架構優點主要有:
·集群高可用
·讀寫可分離
副本集節點類型
1.Primary: 副本集的主節點,可讀寫,唯一可以進行寫操作的節點,由集群自行選舉出來。
2.Secondary: 正常情況下,Seconary會參與Primary選舉(自身也可能會被選為Primary),并從Primary同步最新寫入的數據,以保證與Primary存儲相同的數據。Secondary可以提供讀服務,增加Secondary節點可以提供副本集的讀服務能力,提升副本集的可用性。
3.Arbiter: Arbiter節點只參與投票,不能被選為Primary,并且不從Primary同步數據。非常輕量級的服務,當復制集成員為偶數時,最好加入一個Arbiter節點,以提升復制集可用性。
4.Priority0: Priority0節點的選舉優先級為0,不會被選舉為Primary,且不能發起選舉。
5.Vote0: 副本集成員最多50個,參與Primary選舉投票的成員最多7個,其他成員(Vote0)的vote屬性必須設置為0,即不參與投票。
6.Hidden: Hidden節點不能被選為主(Priority為0),并且對Driver不可見。因Hidden節點不會接受Driver的請求,可使用Hidden節點做一些數據備份、離線計算的任務,不會影響復制集的服務。
7.Delayed: Delayed節點必須是Hidden節點,并且其數據落后與Primary一段時間(可配置,比如1個小時)。因Delayed節點的數據比Primary落后一段時間,當錯誤或者無效的數據寫入Primary時,可通過Delayed節點來做數據恢復。
Primary選舉
選舉過程需要消耗一些時間,在此期間,集群將不能接收write操作(即使舊的primary仍然存活,但因為“網絡分區”問題導致它不能與其他secondaries通訊),所有的members(包括舊的primary)都處于只讀狀態,選舉對業務影響很大,所以需要盡量避免選舉的發生。
需要進行Primary選舉的場景:
(1)副本集初始化時;
(2)副本集被reconfig;
(3)Secondary節點檢測到Primary宕機時;
(4)當有Primary節點主動stepDown(主動降級為Secondary)時;
Primary的選舉受節點間心跳、優先級、最新的oplog時間等多種因素影響。
1.心跳: 復制集中的所有members之間都互相建立心跳連接,且每隔兩秒發送一次心跳,如果未在10秒內收到回復,則此member將會被標記為“不可用”,Secondary(前提是可被選為Primary)會發起新的Primary選舉,而其他能正常收到心跳反饋的Secondary能否決新的Primary選舉。
2.優先級: 優先級即Priority值,每個member都有權重值,默認為都為1,members傾向于選舉權重最高者。上述提到,priority為0的member不能被選舉為primary且不能發起選舉;只要當前primary的權重最高或者持有最新oplog數據的secondaries沒有比它更高的權重時,集群不會觸發選舉。當Primary發現有優先級更高Secondary,并且該Secondary的數據落后在10s內,則Primary會主動降級,讓優先級更高的Secondary有成為Primary的機會。
3.Optime: 當前member已經從primary的oplog中應用的最后一個operation的時間戳(此時間戳由primary生成,在oplog中每個操作記錄都有);一個member能成為primary的首要條件就是在所有有效的members中它持有最新的optime。
4.多數派連接: 一個member要成為primary,它必須與“多數派”的其他members建立連接,如果未能與足夠多的member建立連接,事實上它本身也無法被選舉為primary;多數派參考的是“總票數”,而不是member的個數,因為我們可以給每個member設定不同的“票數”。假設復制集內投票成員數量為N,則大多數為 N/2 + 1。
綜上所述,在發起選舉以后,能成為Primary的節點需要的條件有:
·能夠與“多數派”建立連接
·在所有有效的members中它持有最新的optime
·前兩個條件相同的,Priority優先級高的成為Primary
·optime與Priority都相等時,誰發起選舉,誰當選Primary
3.0版本以后副本集成員最多50個,參與Primary選舉投票的成員最多7個,其他成員(Vote0)的vote屬性必須設置為0,即不參與投票。
副本集中各類角色的特點總結如下:
備注:
·上述Secondary為默認Secondary,即Priority!=0、vote!=0等;
·Hidden為特殊的Secondary,Delayed為特殊的Hidden。
看完了這篇文章,相信你對mongodb副本集指的是什么意思有了一定的了解,想了解更多相關知識,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。