本文主要是介绍MongoDB oplog剖析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
MongoDB 的Replication是通过一个日志来存储写操作的,这个日志就叫做oplog。journal是Mongodb中的redo log,而Oplog则是负责复制的binlog(对应Mysql)。在默认情况下,oplog分配的是5%的空闲磁盘空间。通常而言,这是一种合理的设置。可以通过mongod –oplogSize来改变oplog的日志大小。Oplog和数据刷新到磁盘的时间是60s,对于复制来说,不用等到oplog刷新磁盘,在内存中就可以直接复制到Sencondary节点。
oplog是capped collection,因为oplog的特点(不能太多把磁盘填满了,固定大小)需要,MongoDB才发明了capped collection(the oplog is actually the reason capped collections were invented).
1.oplog的位置
oplog在local库:
master/slave 架构下
local.oplog.$main;
replica sets 架构下:
local.oplog.rs
sharding 架构下,mongos下不能查看oplog,可到每一片去看。
mongos> use local
switched to db local
mongos> show collections
Fri Mar 20 10:01:12 uncaught exception: error: { "$err" : "can't use 'local' database through mongos", "code" : 13644 }
2.oplog的格式
最新版本oplog格式
PRIMARY> db.version()
2.6.8
PRIMARY> db.oplog.rs.findOne()
{"ts": {"t": 1426646274000,"i": 6},"h": NumberLong("6846668337808060067"),"v": 2,"op": "i","ns": "test.user","o": {"_id": ObjectId("5508e502ac30b834a5de99fd"),"name": "test15","age": 40,"addr": "beijing"}
}
ts:8字节的时间戳,由4字节unix timestamp + 4字节自增计数表示。
这个值很重要,在选举(如master宕机时)新primary时,会选择ts最大的那个secondary作为新primary。
op:1字节的操作类型,例如i表示insert,d表示delete。
ns:操作所在的namespace。
o:操作所对应的document,即当前操作的内容(比如更新操作时要更新的的字段和值)
o2: 在执行更新操作时的where条件,仅限于update时才有该属性
其中op,可以是如下几种情形之一:
“i”: insert
“u”: update
“d”: delete
“c”: db cmd
“db”:声明当前数据库 (其中ns 被设置成为=>数据库名称+ ‘.’)
“n”: no op,即空操作,其会定期执行以确保时效性 。
3.查看oplog的内容
PRIMARY> db.oplog.rs.findOne({"ns" : "test.user"})
{"ts": {"t": 1426646274000,"i": 1},"h": NumberLong("-5377635681665944425"),"v": 2,"op": "i","ns": "test.user","o": {"_id": ObjectId("5508e502ac30b834a5de99f1"),"name": "test3","age": 40,"addr": "beijing"}
}
4.查看oplog的状态
PRIMARY> db.printReplicationInfo();
configured oplog size: 100MB
log length start to end: 103607secs (28.78hrs)
oplog first event time: Wed Mar 18 2015 10:27:55 GMT+0800 (CST)
oplog last event time: Thu Mar 19 2015 15:14:42 GMT+0800 (CST)
now: Fri Mar 20 2015 10:22:08 GMT+0800 (CST)
5.查看从库同步状态
PRIMARY> db.printSlaveReplicationInfo();
source: 192.168.110.71:10001
syncedTo: Thu Mar 19 2015 15:14:42 GMT+0800 (CST)
= 68873 secs ago (19.13hrs)
source: 192.168.100.90:10001
syncedTo: Thu Mar 19 2015 15:14:42 GMT+0800 (CST)
= 68873 secs ago (19.13hrs)
输出信息包括从库的主机名,port 信息等。
6.oplog 的应用
参考: http://www.cnblogs.com/huangfox/p/3484497.html
参考文章:
http://docs.mongodb.org/manual/core/replication/#replica-set-oplog-sizing
http://docs.mongodb.org/manual/reference/local-database/
http://www.ttlsa.com/mongodb/in-depth-analysis-of-mongodb-oplog/
http://www.cnblogs.com/daizhj/archive/2011/06/27/mongodb_sourcecode_oplog.html
MongoDB journal 与 oplog,究竟谁先写入?
这篇关于MongoDB oplog剖析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!