整理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实现读写,都是违背祖宗的规定,万不得已,千万不能违背老一辈呀,除非老板开口

相关推荐
voltina13 小时前
【SQL】【事务】
数据库·sql
古渡蓝按13 小时前
PostgreSQL数据库在Windows上实现异地自动备份指南-喂饭图文教程
数据库
她说..13 小时前
MySQL数据处理(增删改)
java·开发语言·数据库·mysql·java-ee
E***U94513 小时前
从新手到入门:如何判断自己是否真的学会了 Spring Boot
数据库·spring boot·后端
Alex Gram14 小时前
MySQL实时同步到SQL Server:技术方案与实现路径
数据库·mysql
不穿格子的程序员14 小时前
Redis篇3——Redis深度剖析:内存数据的“不死之身”——RDB、AOF与混合持久化
数据库·redis·缓存·数据持久化·aof·rdb
秋深枫叶红14 小时前
嵌入式第三十四篇——linux系统编程——进程
linux·服务器·数据库·学习
贡献者手册14 小时前
SQLite 的进阶版,面向边缘计算、嵌入式场景的高性能本地数据库【Turso Database】
数据库
TH_115 小时前
6、前台界面传递老数据,导致业务数据错误
数据库
光影少年15 小时前
PostgreSQL数据库学习路线
数据库·学习·postgresql