zoukankan      html  css  js  c++  java
  • MongoDB副本集配置系列十:MongoDB local库详解和数据同步原理

    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

      

  • 相关阅读:
    【LeetCode】048. Rotate Image
    【LeetCode】036. Valid Sudoku
    【LeetCode】060. Permutation Sequence
    【LeetCode】001. Two Sum
    【LeetCode】128. Longest Consecutive Sequence
    【LeetCode】081. Search in Rotated Sorted Array II
    【LeetCode】033. Search in Rotated Sorted Array
    顺时针打印矩阵
    矩形覆盖
    二维数组中的查找
  • 原文地址:https://www.cnblogs.com/xiaoit/p/4615352.html
Copyright © 2011-2022 走看看