1:local库是MongoDB的系统库,记录着时间戳和索引和复制集等信息

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库下的每个集合分别记录的内容

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的注意事项详见上一篇博客:

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

  

MongoDB副本集配置系列十:MongoDB local库详解和数据同步原理的更多相关文章

  1. MongoDB副本集配置系列五:副本集的在线迁移

    MongoDB副本集的在线迁移 查看当前集群的状态: { "setName" : "gechongrepl", "setVersion" : ...

  2. MongoDB副本集配置系列三:副本集的认证方式

    1:副本集配置参考这篇博客: http://www.cnblogs.com/xiaoit/p/4478951.html 2:副本集的认证 假设有两台机器已经配置好了副本集(副本集罪一般最少3台机器,这 ...

  3. MongoDB副本集配置系列十一:MongoDB 数据同步原理和自动故障转移的原理

    1:数据同步的原理: 当Primary节点完成数据操作后,Secondary会做出一系列的动作保证数据的同步: 1:检查自己local库的oplog.rs集合找出最近的时间戳. 2:检查Primary ...

  4. MongoDB副本集配置系列二:配置MongoDB副本集

    接上一篇博客: http://www.cnblogs.com/xiaoit/p/4479066.html 1:首先创建3台虚拟机作为配置环境 IP1:192.168.91.128 IP2:192.16 ...

  5. MongoDB副本集配置系列七:MongoDB oplog详解

    1:oplog简介 oplog是local库下的一个固定集合,Secondary就是通过查看Primary 的oplog这个集合来进行复制的.每个节点都有oplog,记录这从主节点复制过来的信息,这样 ...

  6. MongoDB副本集配置系列一:安装MongoDB

    1:下载MongoDB 2.6版本 https://fastdl.mongodb.org/win32/mongodb-win32-x86_64-2008plus-2.6.9.zip 2:解压 tar ...

  7. MongoDB副本集配置系列六:定位MongoDB慢的原因

    1:想知道哪些操作拖慢了MongoDB的速度,首先需要检查当前正在执行哪些操作. gechongrepl:PRIMARY> db.currentOp() "opid" : 7 ...

  8. MongoDB副本集配置系列九:MongoDB 常见问题

    What is a namespace in MongoDB? If you remove a document, does MongoDB remove it from disk? When doe ...

  9. MongoDB副本集配置系列八:MongoDB监控

    1:Mongostat MongoDB2.6版本 MongoDB3.0版本 2:db.setProfilingLevel(2):打开profiler 类似于MySQL的slow log Profile ...

随机推荐

  1. 2748: [HAOI2012]音量调节

    Description 一个吉他手准备参加一场演出.他不喜欢在演出时始终使用同一个音量,所以他决定每一首歌之前他都要改变一次音量.在演出开始之前,他已经做好了一个列表,里面写着在每首歌开始之前他想要改 ...

  2. shell语法快速入门(1)

    #得到绝对路径 DIR=$(cd `dirname $0`;pwd) $DIR/file.txt #去掉#注释 egrep -v "(#|^$)" /etc/zabbix/zabb ...

  3. linux下使用SSL代理(SSLedge)

    refer to: https://eurekavpt.com/page/ssledge-on-linux 启动非常简单./ssledge-term-x64 -f config -D 其中的confi ...

  4. 【WinHec启示录】透过Windows 10技术布局,谈微软王者归来

    每个时代都有王者,王者的成功,往往是因为恰逢其时地发布了一个成功的产品(具有里程碑意义,划时代的产品).Windows 95的成功标示着微软是PC时代的王者:WinXP的成功标示着微软是互联网时代的王 ...

  5. 使用C#和OpenPop.dll开发读取POP3邮件程序

    制作一个ASP.NET MVC4论坛项目,该项目需要将以往十多年的Mail List(邮件列表)内容都导入到新的论坛中,因此需要能够将邮件的标题.发布时间.发布人及邮件内容导入到论坛的数据库内..Ne ...

  6. 【基础知识】.Net基础加强06天

    一. 垃圾回收 1. 垃圾回收的目的:提高内存的利用效率. 2. 垃圾回收器: 只回收托管堆中的内存资源,不回收其他资源(数据库连接.文件句柄.网络端口等): 3. 什么时候垃圾回收? a) 当对象没 ...

  7. 单元测试中使用Moq对EF的DbSet进行mock

    刚用上Moq,就用它解决了一个IUnitOfWork的mock问题,在这篇博文中记录一下. 开发场景 Application服务层BlogCategoryService的实现代码如下: public ...

  8. 设计模式之美:Abstract Factory(抽象工厂)

    索引 别名 意图 结构 参与者 适用性 缺点 效果 相关模式 命名约定 实现 实现方式(一):使用 Factory Method 来实现 Abstract Factory. 实现方式(二):使用 Pr ...

  9. codepage IMLangCodePages

      http://baike.baidu.com/link?url=78DSTGAri8dvHNLQ03rThSKieJqhFwFWL4sQMao6cfaRSOUWN88QVBwmSJPCZch0vf ...

  10. load css use javascript

    var $ = document; // shortcut var cssId = 'myCss'; // you could encode the css path itself to genera ...