MongoDB副本集其他细节

文章详细解释了MongoDB副本集中的oplog增长机制,包括在批量删除操作下的影响,以及成员的不同状态(如PRIMARY、SECONDARY等)。还介绍了如何让主节点转为备份节点以及rs.status()方法的用法。此外,还提到了Java开发中复制链管理和面试题资源的相关内容。
摘要由CSDN通过智能技术生成

既然是固定集合,它里边能够保存的数据大小就是有限的。通常,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=false

rs.reconfig(config)

好了,MongoDB中副本集的其他细节我们就先说到这里,小伙伴们有问题欢迎留言讨论。
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

最后

针对最近很多人都在面试,我这边也整理了相当多的面试专题资料,也有其他大厂的面经。希望可以帮助到大家。

最新整理面试题
在这里插入图片描述

上述的面试题答案都整理成文档笔记。也还整理了一些面试资料&最新2021收集的一些大厂的面试真题

最新整理电子书

在这里插入图片描述

最新整理大厂面试文档

在这里插入图片描述

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
档笔记。也还整理了一些面试资料&最新2021收集的一些大厂的面试真题

最新整理电子书

[外链图片转存中…(img-LI9zCLUy-1713225434525)]

最新整理大厂面试文档

[外链图片转存中…(img-bLhqZpzo-1713225434525)]

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

  • 24
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值