MongoDB副本集配置系列十:MongoDB local庫詳解和數據同步原理

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

http://www.cnblogs.com/xiaoit/p/4585363.html對象

相關文章
相關標籤/搜索