千家信息网

MongoDB中的数据复制到底是怎么实现的

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,这期内容当中小编将会给大家带来有关MongoDB中的数据复制到底是怎么实现的,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。数据同步方式MongoDB中的复制功能主要
千家信息网最后更新 2026年11月01日MongoDB中的数据复制到底是怎么实现的

这期内容当中小编将会给大家带来有关MongoDB中的数据复制到底是怎么实现的,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

数据同步方式

MongoDB中的复制功能主要是使用操作日志oplog.rs来实现的,oplog.rs包含了主节点的每一次写操作,oplog.rs是主节点中local数据库的一个固定集合,我们可以通过如下命令查看到:

use localshow tables

如下:

备份节点通过查询这个集合就知道要复制哪些数据,同时,每一个备份节点也都维护着自己的oplog.rs,自己的oplog.rs则用来记录每一次从主节点复制数据的操作,如此,每一个备份节点都可以再作为数据源提供给其他成员使用,如果某一个备份节点在使用的过程中挂掉了,那么当它重启之后,会自动从oplog.rs的最后一个操作开始同步。

上文我们也已经说过oplog.rs是一个固定集合,我们可以通过db.getCollection('oplog.rs').stats()这个命令来查看这个固定集合的属性,包括集合大小等,执行部分结果如下:

{    "ns" : "local.oplog.rs",    "size" : 18170305,    "count" : 177443,    "avgObjSize" : 102,    "storageSize" : 5902336,    "capped" : true,    "max" : -1,    "maxSize" : 1038090240,    "sleepCount" : 0,    "sleepMS" : 0,}

既然是固定集合,它里边能够保存的数据大小就是有限的。通常,oplog.rs使用空间的增长速度与系统处理处理写请求的速率近乎相同,比如主节点每分钟处理了1KB的写入请求,那么oplog.rs也可能会在一分钟内写入1KB条操作日志,但是如果主节点执行了批量删除的命令,比如下面这种:

db.c1.deleteMany({x:{$type:1}})

此时每一个受影响的文档都会产生一条oplog中的日志,这个时候oplog.rs中的日志会快速增加。

成员状态

到目前为止我们了解到的成员状态有两种,一个是PRIMARY,还有一个是SECONDDARY,成员状态的获取需要靠心跳来维护,副本集中的每一个成员每隔两秒就会向其他成员发送一个心跳请求,用来检查成员的状态,成员的状态主要有如下几种:

STARTUP

副本集中的成员刚刚启动时处于这个状态下,此时,MongoDB会去加载成员的副本集配置,配置加载成功之后,就进入到STARTUP2的状态。

STARTUP2

整个初始化同步过程都处于这个状态。

RECOVERING

这个状态是由STARTUP2状态来的,此时成员运转正常,但是此时还不能处理读取请求。

ARBITER

这是仲裁者所处的状态。

DOWN

当一个原本运行正常的成员无法访问到时,该成员就处于DOWN的状态。

UNKNOWN

如果一个成员无法到达其他任何成员,该成员就处于UNKNOWN状态,比如我们利用rs.add()方法添加一个不存在的成员,这个成员的状态就是UNKNOWN。

REMOVED

成员被从副本集中移除时就变成这个状态。

ROLLBACK

如果成员正在进行数据回滚,它就处于ROLLBACK状态,回滚结束后会转换为RECOVERING状态。

FATAL

当一个成员发生了不可挽回的错误时,且不再尝试恢复正常的话,就处于这个状态。

主节点转备份节点

通过如下命令可以让主节点转为备份节点:

rs.stepDown()

主节点转为备份节点之后会有新的主节点被选举出来,可以通过rs.status()来查看新的主节点。

rs.status()方法

前面我们已经多次使用过rs.status()方法,rs.status()方法会列出每个备份节点的含义,我们来看看这些参数的含义,先来列出一个rs.status()方法的返回值样例:

{"members" : [    {        "_id" : 1,        "name" : "192.168.248.135:27017",        "health" : 1,        "state" : 2,        "stateStr" : "SECONDARY",        "uptime" : 241,        "optime" : {                "ts" : Timestamp(1509881297, 1),                "t" : NumberLong(16)        },        "optimeDurable" : {                "ts" : Timestamp(1509881297, 1),                "t" : NumberLong(16)        },        "optimeDate" : ISODate("2017-11-05T11:28:17Z"),        "optimeDurableDate" : ISODate("2017-11-05T11:28:17Z"),        "lastHeartbeat" : ISODate("2017-11-05T11:28:18.073Z"),        "lastHeartbeatRecv" : ISODate("2017-11-05T11:28:18.769Z"),        "pingMs" : NumberLong(0),        "syncingTo" : "192.168.248.136:27017",        "configVersion" : 15    },    {        "_id" : 3,        "name" : "192.168.248.136:27017",        "health" : 1,        "state" : 1,        "stateStr" : "PRIMARY",        "uptime" : 250,        "optime" : {                "ts" : Timestamp(1509881297, 1),                "t" : NumberLong(16)        },        "optimeDate" : ISODate("2017-11-05T11:28:17Z"),        "electionTime" : Timestamp(1509881276, 1),        "electionDate" : ISODate("2017-11-05T11:27:56Z"),        "configVersion" : 15,        "self" : true    }]}

1.stateStr用来描述当前节点的状态。
2.uptime表示从成员可达到现在所经历的时间。
3.optimeDate表示每个成员的oplog中最后一个操作发生的时间。
4.lastHeartbeat表示当前服务器最后一次收到其他成员心跳的时间。
5.pingMs表示心跳从当前服务器到达某个成员所花费的平均时间。
6.syncingTo表示同步的数据源。
7.health表示该服务器是否可达,1表示可达,0表示不可达。

复制链问题

数据复制时可以从主节点直接复制,也可以从备份节点开始复制,从备份节点复制可以形成复制链,如果想禁止复制链,即所有的数据都从主节点复制,可以通过chainingAllowed属性来设置,具体步骤如下:

config=rs.config()config.settings.chainingAllowed=falsers.reconfig(config)

上述就是小编为大家分享的MongoDB中的数据复制到底是怎么实现的了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注行业资讯频道。

成员 节点 状态 数据 备份 方法 副本 可以通过 命令 日志 时间 同步 处理 就是 服务器 服务 内容 含义 大小 属性 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网黑科技 互联网加科技 盈实互联网科技 互联网科技与金融科技 互联网 科技公司 互联网科技视频 世界互联网领先科技成果 互联网养老 桔豆科技 科技伦理 互联网公司 创业天下互联网科技有限公司 互联网金融科技展 内蒙古九一互联网科技 洛阳共同富裕互联网科技有限公司 智帮互联网科技公司最近动向 银行科技岗属于互联网吗 2021世界互联网领先科技成果发布 济南小医互联网科技有限公司招聘 互联网金融金融科技 科技互联网专业务虚会材料 瑞安市蟠桃会互联网科技有限公司 互联网科技卖菜 天下捷融互联网科技 广州恒生互联网科技有限 996高科技互联网公司 世界互联网领先科技成果获奖 为客找房互联网科技公司怎么样 工业互联网展湾科技股份有限公司 银川新华互联网科技学校是国营吗 互联网科技手抄报图片 互联网科技大会大佬
0