副本集合数据的读写操作|学习笔记

简介: 快速学习副本集合数据的读写操作

开发者学堂课程【MongoDB精讲课程(下)副本集合数据的读写操作】学习笔记与课程紧密联系,让用户快速学习知识

课程地址https://developer.aliyun.com/learning/course/727/detail/12975


副本集合数据的读写操作

 

内容介绍

一、副本集的搭建

二、主节点的写入和读取数据

三、从主节点的写入和读取数据

四、设置读操作权限

 

一、副本集的搭建

查看一下副本集当前的一个状态,输入 is.status,主要看 Mars 成员,这个成员现在看到的就不是一个了,一共是三个,看 ID 就知道了,一共是三个成员,这三个成员分别是一主一从一仲裁。即一开始初始化的时候主的27017,然后副本节点就是从节点是27018,然后还有一个仲裁节点是27019,

副本集都搭建完了,搭建完了之后,主要是来看一下数据的读写操作。搭建副本集也是为了完成咱们数据的一个存储,包括一些增删改查的操作。

 

二、主节点的写入和读取数据

目标:测试三个不同角色的节点的数据读写情况。

登录主节点27017,写入和读取数据:

还是用之前的小 demo,先创建一个库,直接在这里面插入一条数据:

[root@bobohost ~]#/usr/1oca1/mongodb/bin/mongo --host 180.76.159.126 --port 27017

myrs:PRIMARY> use articledb

switched to db articledb

myrs:PRIMARY> db

articledb

myrs:PRIMARY> db.comment.insert({"articleid":"100000","content":"今天天气真好,阳光明媚","userid" :"1001","nickname" : "Rose","createdatetime":new Date()}) WriteResult({"nInserted":1 }) myrs:PRIMARY> db.comment.find){"id":objectid("5d4d2ae3068138b4570f53bf"),"articleid”:"100000","content”:"今天天气真好。阳光明媚" "userid":"1001" "nickname":"Rose" "createdatetime" . Isodate("2019-08-09T08:12:19.427Z")}

 

三、从主节点的写入和读取数据

主要是测试一下副本集的一些数据操作。

主节点的读写没问题,副本节点,从节点用另一个窗口来演示,登录就看出来区别了,副本节点是 secondary,主节点是 primary。

登录从节点27018

[root@bobohost ~]#/usr/1oca1/mongodb/bin/mongo --host 180.76.159.126 --port 27018

myrs:SECONDARY> show dbs:

2019-09-10T10:56:51.953+0800 E QUERY[is]

Error: 1istDatabases failed:{

"operationTime":Timestamp(1568084204,1)."ok":0,

"errmsg" : "not master and slaveok=false""code": 13435,

"codeName": "NotMasterNoslaveok","$clusterTime" :{

"clusterTime":Timestamp(1568084204,1),"signature" :{

"hash":BinData(O,"AAAAAAAAAAAAAAAAAAAAAAAAAAA=")

"keyId" :NumberLong(0)

_getErrorwithcode@src/mongo/she11/utils.js:25:13

Mongo.prototype.getDBs@src/mongo/she11/mongo.is:139:1 she11He1per.show@src/mongo/she11/utilsjs:882:13 she11He1per@src/mongo/she11/utilsjs:766:15@(she11he1p2):1:1

发现,不能读取集合的数据。当前从节点只是一个备份,不是奴隶节点,无法读取数据。

因为默认情况下,从节点是没有读写权限的,可以增加读的权限,但需要进行设置。

 

四、设置读操作权限

说明:

设置为奴隶节点,允许在从成员上运行读的操作

语法:

rs.slaveok()#或

rs.slaveok(true)

提示:

该命令是 db.getMongo().sets1aveok() 的简化命令。

示例

在27018上设置作为奴隶节点权限,具备读权限:

rs:SECONDARY> rs.s1aveok()

此时,在执行查询命令,运行成功!

但仍然不允许插入。

myrs:SECONDARY> rs.sTaveok()

myrs:SECONDARY> show dbs;

admin 0.000GB

articledb 0.000GB

config 0.000GB

1oca1 0.000GB

myrs:SECONDARY> use articledb switched to db articledb

switched to db articledb

myrs:SECONDARY> show collections comment

myrs:SECONDARY> db.comment.find()

{"_id": objectid("5d7710c04cfd7eee2e3cdabe"),"articleid" : "100000","content”:"今天天气真好,阳光明媚","userid”:"1001","nickname":"Rose","createdatetime" : IsoDate("2019-09-10T02:56:00.467Z")}

myrs:SECONDARY> db.comment.insert({"id":"1" "articleid":"100001" "content":"我们不应该把清晨浪费在手机上,健康很重要,k一杯温水幸福你我他。""userid":"1002","nickname":"相忘于江湖" "createdatetime":new Date("2019-08-

05T22:08:15.5222"),"7ikenum":NumberInt(1000),"state":"1"}) WriteCommandError({

"operationTime":Timestamp(1568084434,1)."ok":0,

"errmsg" : "not master","code": 101Ú7,

"codeName":"NotMaster""$clusterTime":{

"clusterTime":Timestamp(1568084434.1)"signature":{

"hash": BinData(O."AAAAAAAAAAAAAAAAAAAAAAAAAAA=")"keyId":NumberLong

现在可实现了读写分离,让主插入数据,让从来读取数据。

如果要取消作为奴隶节点的读权限:

myrs:SECONDARY> rs.slaveok(false) myrs:SECONDARY> db.comment.find() Error: error:{

"operationTime":Timestamp(1568084459,1),"ok": 0,

"errmsg" : "not master and slaveok=false"."code": 13435.

"codeName":"NotMasterNoslaveok",

"clusterTime" :{

"clusterTime":Timestamp(1568084459,1),"signature":{

"hash": BinData(O,"AAAAAAAAAAAAAAAAAAAAAAAAAAA=")"keyId": NumberLong(0)

数据它是会自动同步的,因为现在处在同一个副本集里面,这就是副本的操作,副本操作最主要的是需要设置一下 sliver ok,设置 level ok之后,就可以去查询刚刚在主节点里面插入的数据了,数据会自动的同步,当然现在是一条数据,如果数据很多的话可能需有一个延时。

相关文章
|
存储 Kubernetes 调度
Kubernetes Pod深度解析:构建可靠微服务的秘密武器(上)
本文旨在全面而深入地探讨Kubernetes(K8s)中的Pod概念,为读者提供对其核心特性和应用场景的深入理解。Pod作为Kubernetes的最小部署单元,承载着容器化应用的核心功能,是构建云原生应用的重要基石。
|
应用服务中间件 nginx
Nginx启动时提示nginx: [emerg] still could not bind()
Nginx启动时提示nginx: [emerg] still could not bind()
1177 0
|
弹性计算 缓存 运维
应用层横向扩展——负载均衡|学习笔记
快速学习应用层横向扩展——负载均衡
应用层横向扩展——负载均衡|学习笔记
|
存储 设计模式 缓存
JavaScript 设计模式之代理模式
代理模式,代理(proxy)是一个对象,它可以用来控制对另一个对象的访问。
158 0
JavaScript 设计模式之代理模式
|
存储 算法 Java
【Java数据结构】堆到底是什么东西?一文帮你理解——优先级队列(堆)
【Java数据结构】堆到底是什么东西?一文帮你理解——优先级队列(堆)
【Java数据结构】堆到底是什么东西?一文帮你理解——优先级队列(堆)
|
安全 Oracle 关系型数据库
|
2天前
|
数据采集 人工智能 安全
|
12天前
|
云安全 监控 安全