1:local庫是MongoDB的系統庫,記錄着時間戳和索引和複製集等信息html
gechongrepl:PRIMARY> use local switched to db local gechongrepl:PRIMARY> show tables me oplog.rs replset.minvalid slaves startup_log system.indexes system.replset temp
2:local庫下的每一個集合分別記錄的內容sql
local庫下面的me集合保存了服務器名稱 local庫下面的replset.minvalid集合保存了數據庫最新操做的時間戳 local庫下面的startup_log集合記錄這mongod每一次的啓動信息 local庫下面的system.indexes集合記錄當前庫的全部索引信息 local庫下面的system.replset記錄着複製集的成員配置信息rs.conf()讀取這個集合 local庫下面的oplog.rs集合記錄這全部操做 MongoDB就是經過oplog.rs來實現數據同步的。當Primary節點插入一條數據後,oplog.rs集合中就會多一條記錄
3:模擬數據插入,觀察oplog.rs的變化數據庫
gechongrepl:PRIMARY> use testoplog switched to db testoplog gechongrepl:PRIMARY> db.user.insert({"name":"shanghai"}) WriteResult({ "nInserted" : 1 }) gechongrepl:PRIMARY> use local switched to db local gechongrepl:PRIMARY> db.oplog.rs.find() { "_id" : ObjectId("5593628989b809ea7938cc09"), "ts" : Timestamp(1435721382, 1), "h" : NumberLong("-5496045509734463589") } { "ts" : Timestamp(1435733782, 1), "h" : NumberLong("3093554192925239676"), "v" : 2, "op" : "n", "ns" : "", "o" : { "msg" : "Reconfig set", "version" : 57 } } { "ts" : Timestamp(1435734113, 1), "h" : NumberLong("2858511747060359631"), "v" : 2, "op" : "n", "ns" : "", "o" : { "msg" : "Reconfig set", "version" : 58 } } { "ts" : Timestamp(1435741269, 1), "h" : NumberLong("-4071658638798562344"), "v" : 2, "op" : "i", "ns" : "test.testfile", "o" : { "_id" : ObjectId("5593ac558336a98fb6114045"), "a" : "1" } } { "ts" : Timestamp(1435745379, 1), "h" : NumberLong("2363981837641873443"), "v" : 2, "op" : "i", "ns" : "test.testfile", "o" : { "_id" : ObjectId("5593bc638336a98fb6114046"), "a" : "1" } } { "ts" : Timestamp(1435745380, 1), "h" : NumberLong("1415177671185209492"), "v" : 2, "op" : "i", "ns" : "test.testfile", "o" : { "_id" : ObjectId("5593bc648336a98fb6114047"), "a" : "1" } } { "ts" : Timestamp(1435745570, 1), "h" : NumberLong("-8642862752172159081"), "v" : 2, "op" : "n", "ns" : "", "o" : { "msg" : "Reconfig set", "version" : 59 } } { "ts" : Timestamp(1435746145, 1), "h" : NumberLong("4895205971378560688"), "v" : 2, "op" : "n", "ns" : "", "o" : { "msg" : "Reconfig set", "version" : 60 } } { "ts" : Timestamp(1435803750, 1), "h" : NumberLong("-6248101199236942548"), "v" : 2, "op" : "i", "ns" : "testoplog.user", "o" : { "_id" : ObjectId("5594a065a26e221874aa3e32"), "name" : "shanghai" } }
ts:兩個參數:第一個表示時間戳;第二個表示每秒操做的次數 op:操做碼:i表示插入; ns:操做的命名空間 o:表示插入操做包含的文檔對象
4:Secondary和Primary數據同步的詳細過程服務器
當Primary節點完成數據操做後,Secondary會作出一系列的動做保證數據的同步: 1:檢查本身local庫的oplog.rs集合找出最近的時間戳。 2:檢查Primary節點local庫oplog.rs集合,找出大於此時間戳的記錄。 3:將找到的記錄插入到本身的oplog.rs集合中,並執行這些操做。
注意:新同步過來的數據並不能查看。Secondary默認不可讀不可寫。若是須要查看要執行rs.slaveOk(),則當前的鏈接能夠查看,後續的鏈接仍是不可讀不可寫。
關於oplog.rs的注意事項詳見上一篇博客:htm