整理mongodb文档:副本集二

个人博客

整理mongodb文档:副本集二

个人博客,求推荐,本片内容较为乱

文章概叙

本文章主要讲在MongoDB的副本集中的一些注意点,主要是如何对seconadry进行数据操作,以及对更新数据的一些介绍

查看当前节点

上一集讲了关于搭建一个副本集的,接着延续上级的操作,分别使用

javascript 复制代码
.\mongosh mongodb://localhost:27017
javascript 复制代码
.\mongosh mongodb://localhost:27018

来链接我们的Primary以及Secondary两个节点,当前情况下,27018为我们的Primary,而27017为Secondary

也可以直接使用rs.isMaster指令查看当前的节点是否为Primary

Secondary 设置允许访问

前面提及到了,在我们副本集的Secondary中,是无法做读写操作的,当我们操作的时候,会显示出下面的错误,而slaveok可以让我们操作MongoDB的Secondary。

而在4.2之后的mongdob中,我们需要使用rs.secondaryOk设置Secondary允许访问,而4.2之前则是使用slaveOk(),详情请看下方的截图

其中,提示提及到了read preference的,在关于读写分离介绍的时候再描述一次

接着,在Secondary中查询

javascript 复制代码
db.collection27017.find()

显示的结果如下图所示,我们完成了在Secondary中实现读写的操作

oplog库与Secondary的数据更新

按照我们的经验,副本集中Secondary的数据更新是根据local库中的oplog进行更新的,部分小伙伴会觉得我们再非副本集下的数据会在设置为副本集的时候同步上去,因此下方的代码就验证非副本集下的db会不会被同步。

上一次,我们在副本集的加持下,让两个Secondary能完美的拷贝到Primary的数据,现在解散我们的副本集,也就是分别启动两个服务并且使他们没有任何的关联,且在其中的一个库中加入一条数据,即

此时,再打开副本集,看看是否会将那条数据同步过去,且需要注意将27018设置为Primary(先启动27018,则27018会被设置为副本集的Primary)

很遗憾,并不会同步过去,而此时我们再往Primary中加入一条新的数据。

此时的Primary中添加的新数据,成功被拷贝到Secondary,因此我们可以得出结论。当一个副本集更新数据的时候,只会更新那些在副本集状态下的sql。

而oplog的信息,存放在local下的oplog中。

也可以使用如下的指令敲出来,当然需要先到local库中。

javascript 复制代码
use local
db.oplog.rs.find()

初始化已有数据的库

上述场景中,我们模拟了一个当副本集断开时,往其中一个库插入数据,是否在副本集选举之后会将数据拷贝的情况,很遗憾并没有将数据更新到Secondary中,而接下来的场景,会测试在搭建副本集前,如果Primary库已经有数据的情况下,是否会将Primary库中的数据复制到Secondary中去。

首先,启动一个端口为27020的MongoDB服务,接着创建了一个测试的库,并且塞入一条数据。

接着,按照之前的操作顺序,创建一个副本集,并且设置27020为Primary,接着进入Primary看下设置副本集时,会不会清空MongoDB的服务,可以看到数据还在。

接着,再登陆Secondary看看是否会将数据复制过去。

可以看到,在设置副本集之前的数据,在 Primary中是可以保存的。

而当Primary为 空,但Secondary又有数据的时候,初始化我们的副本集,会将Secondary清空还是保留数据呢?这点建议大家自己试试,加深理解。

注意点

rs.slaveOk已经是退出舞台的了,基本在新版本中不会使用到,需要注意下用secondaryOk代替。

一般来说,在Secondary实现读写,都是违背祖宗的规定,万不得已,千万不能违背老一辈呀,除非老板开口

相关推荐
霖霖总总3 分钟前
[小技巧19]MySQL 权限管理全指南:用户、角色、授权与安全实践
数据库·mysql·安全
heartbeat..4 小时前
Spring AOP 全面详解(通俗易懂 + 核心知识点 + 完整案例)
java·数据库·spring·aop
麦聪聊数据7 小时前
MySQL并发与锁:从“防止超卖”到排查“死锁”
数据库·sql·mysql
AC赳赳老秦7 小时前
DeepSeek 私有化部署避坑指南:敏感数据本地化处理与合规性检测详解
大数据·开发语言·数据库·人工智能·自动化·php·deepseek
YMatrix 官方技术社区8 小时前
YMatrix 存储引擎解密:MARS3 存储引擎如何超越传统行存、列存实现“时序+分析“场景性能大幅提升?
开发语言·数据库·时序数据库·数据库架构·智慧工厂·存储引擎·ymatrix
辞砚技术录9 小时前
MySQL面试题——索引2nd
数据库·mysql·面试
linweidong9 小时前
C++thread pool(线程池)设计应关注哪些扩展性问题?
java·数据库·c++
欧亚学术10 小时前
突发!刚刚新增17本期刊被剔除!
数据库·论文·sci·期刊·博士·scopus·发表
黑白极客10 小时前
怎么给字符串字段加索引?日志系统 一条更新语句是怎么执行的
java·数据库·sql·mysql·引擎
大厂技术总监下海11 小时前
数据湖加速、实时数仓、统一查询层:Apache Doris 如何成为现代数据架构的“高性能中枢”?
大数据·数据库·算法·apache