1. 程式人生 > >mongodb需要配置仲裁節點

mongodb需要配置仲裁節點

記錄一下,MongoDB的角色建立及配置,以便以後使用

經過大量血的教訓,一個分片配置兩個副本集時(一個是primary一個是secondary),如果primary掛掉,secondary是不會升級的,必須要加上一個不儲存資料的仲裁節點

config = {"_id" : "tonghao", "members" : [ {"_id" : 0, "host" : "10.2.42.101:27017", priority:2},{"_id" : 1, "host" : "10.2.40.104:27017", priority:1},{"_id" : 2, "host":"10.2.40.104:27016", arbiterOnly:true}]}

priority:2,數字越大級別越高,級別高的作為主節點。

主從複製原理:

假如副本集的資料主從同步不一致,則需要把local db下的檔案全複製。
也就是要遷移oplog時間戳

當Mongo DB 被設定成主庫時(這一點很重要),在 local db 下有個 collection 叫oplog.$main ,這個就是Mongo 的 oplog。

當Primary節點完成資料操作後,Secondary會做出一系列的動作保證資料的同步:
1:檢查自己local庫的oplog.rs集合找出最近的時間戳。
2:檢查Primary節點local庫oplog.rs集合,找出大於此時間戳的記錄。
3:將找到的記錄插入到自己的oplog.rs集合中,並執行這些操作。

Secondary節點同步到哪了:
1:Primary節點插入一條資料
2:同時,會把該資料寫入到Primary的oplog中,並且記錄一個時間戳
3:db.runCommand({getlasterror:1,w:2})在Primary節點被呼叫時,Primary就完成了寫入操作,等待其他非仲裁節點來同步資料
4:Secondary節點查詢Primary的oplog並且拉去oplog
5:Secondary根據時間戳應用oplog
6:Secondary請求大於本身oplog時間戳的oplog
7:Primary更新時間戳