mongoDB的理解,現階段在串聯調查的知識點,以後開始解析代碼,從邏輯層面來再次確認理解不正確或者認識不足的地方。
Replica-set
之前接觸過的NoSQL數據庫,比如:hbase,hive來說,爲了數據的安全性和可擴展性考慮,都是是用master-slave的模型,master節點永遠承擔這read&write,slave就是冷備份,只有當master發生宕機的情況下,衆多的slave中才會升格一個作爲master,避免整個集羣失效。
WiredTiger
而mongoDB的,WiredTiger存儲引擎下,是去中心化的,沒有所謂的master-slave,官方稱爲primary-secondary。
- 在一個副本集中,有且只有一個primary,且擁有read&write權限。
- 一個正常的secondary成員存儲着primary所有數據的copy,secondary成員具有投票權和被選舉權(根據設定而定)
而在一個副本集中,secondary成員還有以下2種分類:
- 擁有被選舉(Priority:1)
即可以被選舉成爲primary,具有write權限。
- 沒有被選舉(Priority:0)
這種成員角色維護着primary的數據copy,但在故障切換中,永遠不會成爲primary。這類成員具有以下特性:
- 作爲冷備份
- 可副本集中,確保可以選舉出合適的primary
- 在replica-set的多個數據中心,通過網絡分區,確保中心數據在故障切換中,可快速選舉primary
這類成員又細分爲以下4類:
- Hidden members
這類成員也像其他成員一樣,維持着primary數據的copy,不能成爲primary,可參與投票,但沒有相應read的權限,只是專注於報告需求或者備份。
- Delayed members
利用primary的oplog複製數據。好處是當發生人爲錯誤,比如誤刪數據庫的情況下,可以根據oplog進行恢復
- Arbiters
這類成員不對primary的數據進行copy,所以永遠不會成爲primary,唯一的用途就是在副本集中發生無法決策出primary時,快速選舉出最適合做primary的節點
- Non-voting members
擁有primary數據的copy,可以接受來自客戶端的read操作,也可以成爲primary,但在選舉中不具有投票權。
成爲primary的先決條件是:在可投票的X個成員中,某個成員獲得選票大於等於【(x/2)+1】.