MongoDB oplog剖析

2024-04-05 22:32
文章标签 剖析 mongodb oplog

本文主要是介绍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剖析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/878319

相关文章

Go Mongox轻松实现MongoDB的时间字段自动填充

《GoMongox轻松实现MongoDB的时间字段自动填充》这篇文章主要为大家详细介绍了Go语言如何使用mongox库,在插入和更新数据时自动填充时间字段,从而提升开发效率并减少重复代码,需要的可以... 目录前言时间字段填充规则Mongox 的安装使用 Mongox 进行插入操作使用 Mongox 进行更

使用Python实现操作mongodb详解

《使用Python实现操作mongodb详解》这篇文章主要为大家详细介绍了使用Python实现操作mongodb的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、示例二、常用指令三、遇到的问题一、示例from pymongo import MongoClientf

使用MongoDB进行数据存储的操作流程

《使用MongoDB进行数据存储的操作流程》在现代应用开发中,数据存储是一个至关重要的部分,随着数据量的增大和复杂性的增加,传统的关系型数据库有时难以应对高并发和大数据量的处理需求,MongoDB作为... 目录什么是MongoDB?MongoDB的优势使用MongoDB进行数据存储1. 安装MongoDB

Node.js 中 http 模块的深度剖析与实战应用小结

《Node.js中http模块的深度剖析与实战应用小结》本文详细介绍了Node.js中的http模块,从创建HTTP服务器、处理请求与响应,到获取请求参数,每个环节都通过代码示例进行解析,旨在帮... 目录Node.js 中 http 模块的深度剖析与实战应用一、引言二、创建 HTTP 服务器:基石搭建(一

深度剖析AI情感陪伴类产品及典型应用 Character.ai

前段时间AI圈内C.AI的受够风波可谓是让大家都丈二摸不着头脑,连C.AI这种行业top应用都要找谋生方法了!投资人摸不着头脑,用户们更摸不着头脑。在这之前断断续续玩了一下这款产品,这次也是乘着这个风波,除了了解一下为什么这么厉害的创始人 Noam Shazeer 也要另寻他路,以及产品本身的发展阶段和情况! 什么是Character.ai? Character.ai官网:https://

生产mongodb 分片与集群 方案

链接:http://my.oschina.net/pwd/blog/411439#navbar-header 注:主要是有一键安装的脚本可以借鉴

mongodb基本命令和Java操作API示例

1.Mongo3.2 java API示例:http://www.cnblogs.com/zhangchaoyang/articles/5146508.html 2.MongoDB基本命:http://www.cnblogs.com/xusir/archive/2012/12/24/2830957.html 3.java MongoDB查询(一)简单查询: http://www.cnblogs

使用jetty和mongodb做个简易文件系统

使用jetty和mongodb做个简易文件系统 - ciaos 时间 2014-03-09 21:21:00   博客园-所有随笔区 原文   http://www.cnblogs.com/ciaos/p/3590662.html 主题  MongoDB  Jetty  文件系统 依赖库: 1,jetty(提供http方式接口) 2,mongodb的java驱动(访问mo

mongodb简单入门

一篇较好的mongodb常用操作命令:http://www.cnblogs.com/hoojo/archive/2011/06/01/2066426.html mongodb的java操作:http://www.cnblogs.com/cyhe/p/5451421.html

mongodb自启动脚本.md

可粘贴文本(不全): #!/bin/sh##chkconfig: 2345 80 90#description:mongodb#processname:mongodbif test -f /sys/kernel/mm/transparent_hugepage/enabled; thenecho never > /sys/kernel/mm/transparent_hugepage/e