MongoDB 集群-主从复制(一主二从)
MongoDB 集群-主从复制(一主二从)
官方文档
- https://docs.mongodb.com/manual/tutorial/deploy-replica-set/
- https://docs.mongodb.com/manual/tutorial/deploy-replica-set-for-testing/
- mongo.conf配置文件说明
- MongoDB中文社区
版本
mongodb-linux-x86_64-ubuntu1804-5.0.4.tgz 免安装压缩包版本。
启动命令
# 属于副本集 rs0端口为 27018 的mongodb 服务
./bin/mongod --replSet=rs0 --port=27018 --bind_ip=127.0.0.1 --dbpath=/home/public/Soft/mongodb-5.0.4/primary27018db/ --logpath=/home/public/Soft/mongodb-5.0.4/primary27018db/db.log --directoryperdb --fork > /dev/null 2>&1 &
# 属于副本集 rs0端口为 27019 的mongodb 服务
./bin/mongod --replSet=rs0 --port=27019 --bind_ip=127.0.0.1 --dbpath=/home/public/Soft/mongodb-5.0.4/slave27019db/ --logpath=/home/public/Soft/mongodb-5.0.4/slave27019db/db.log --directoryperdb --fork > /dev/null 2>&1 &
# 属于副本集 rs0端口为 27020 的mongodb 服务
./bin/mongod --replSet=rs0 --port=27020 --bind_ip=127.0.0.1 --dbpath=/home/public/Soft/mongodb-5.0.4/arbiter27020db/ --logpath=/home/public/Soft/mongodb-5.0.4/arbiter27020db/db.log --directoryperdb --fork > /dev/null 2>&1 &
初始化集群
连接27018 端口的MongoDB服务:
./bin/mongo --host=127.0.0.1 --port=27018
连接成功,控制台输出:
MongoDB shell version v5.0.3
connecting to: mongodb://127.0.0.1:27018/?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("c9296cbb-8005-4398-8c4c-83a11d3723cc") }
MongoDB server version: 5.0.4
================
Warning: the "mongo" shell has been superseded by "mongosh",
which delivers improved usability and compatibility.The "mongo" shell has been deprecated and will be removed in
an upcoming release.
We recommend you begin using "mongosh".
For installation instructions, see
https://docs.mongodb.com/mongodb-shell/install/
================
---
The server generated these startup warnings when booting:
2021-12-03T18:44:52.516+08:00: Using the XFS filesystem is strongly recommended with the WiredTiger storage engine. See http://dochub.mongodb.org/core/prodnotes-filesystem
2021-12-03T18:44:53.247+08:00: Access control is not enabled for the database. Read and write access to data and configuration is unrestricted
2021-12-03T18:44:53.247+08:00: Soft rlimits for open file descriptors too low
2021-12-03T18:44:53.247+08:00: currentValue: 1024
2021-12-03T18:44:53.247+08:00: recommendedMinimum: 64000
---
---
Enable MongoDB's free cloud-based monitoring service, which will then receive and display
metrics about your deployment (disk utilization, CPU, operation statistics, etc).
The monitoring data will be available on a MongoDB website with a unique URL accessible to you
and anyone you share the URL with. MongoDB may use this information to make product
improvements and to suggest MongoDB products and deployment options to you.
To enable free monitoring, run the following command: db.enableFreeMonitoring()
To permanently disable this reminder, run the following command: db.disableFreeMonitoring()
---
执行初始化命令:
rs.initiate( {
_id : "rs0",
members: [
{ _id: 0, host: "127.0.0.1:27018" },
{ _id: 1, host: "127.0.0.1:27019" },
{ _id: 2, host: "127.0.0.1:27020" }
]
})
初始化成功,控制台输出:
> rs.initiate( {
... _id : "rs0",
... members: [
... { _id: 0, host: "127.0.0.1:27018" },
... { _id: 1, host: "127.0.0.1:27019" },
... { _id: 2, host: "127.0.0.1:27020" }
... ]
... })
{ "ok" : 1 }
rs0:SECONDARY> rs.config()
{
"_id" : "rs0",
"version" : 1,
"term" : 0,
"members" : [
{
"_id" : 0,
"host" : "127.0.0.1:27018",
"arbiterOnly" : false,
"buildIndexes" : true,
"hidden" : false,
"priority" : 1,
"tags" : {
},
"secondaryDelaySecs" : NumberLong(0),
"votes" : 1
},
{
"_id" : 1,
"host" : "127.0.0.1:27019",
"arbiterOnly" : false,
"buildIndexes" : true,
"hidden" : false,
"priority" : 1,
"tags" : {
},
"secondaryDelaySecs" : NumberLong(0),
"votes" : 1
},
{
"_id" : 2,
"host" : "127.0.0.1:27020",
"arbiterOnly" : false,
"buildIndexes" : true,
"hidden" : false,
"priority" : 1,
"tags" : {
},
"secondaryDelaySecs" : NumberLong(0),
"votes" : 1
}
],
"protocolVersion" : NumberLong(1),
"writeConcernMajorityJournalDefault" : true,
"settings" : {
"chainingAllowed" : true,
"heartbeatIntervalMillis" : 2000,
"heartbeatTimeoutSecs" : 10,
"electionTimeoutMillis" : 10000,
"catchUpTimeoutMillis" : -1,
"catchUpTakeoverDelayMillis" : 30000,
"getLastErrorModes" : {
},
"getLastErrorDefaults" : {
"w" : 1,
"wtimeout" : 0
},
"replicaSetId" : ObjectId("61ad7b2d1b25049ef7a3b260")
}
}
分别查看,发现 27018 是主节点,27019和27020是从节点:
至此 一主两从搭建完成。
验证
- 连接 27018 主节点,新增数据库和集合,并插入一条记录。
# 连接 27018 端口 mongodb 服务
./bin/mongo --host=127.0.0.1 --port=27018
# 连接成功,选择 replicat_db 数据库
use replicat_db
# creplicat_db 数据库下创建 replica_tb 集合
db.createCollection("replica_tb")
# replica_tb 集合中插入2条数据
db.replica_tb.insert({name:"black",age:18,high:180.00})
db.replica_tb.insert({name:"black_01",age:20,high:180.00})
控制台输出:
- 分别连接 27019 和 27020,查看数据库:
执行show dbs
命令时报错:
rs0:SECONDARY> show dbs
uncaught exception: Error: listDatabases failed:{
"topologyVersion" : {
"processId" : ObjectId("61ad7ad0873960731110e289"),
"counter" : NumberLong(4)
},
"ok" : 0,
"errmsg" : "not master and slaveOk=false",
"code" : 13435,
"codeName" : "NotPrimaryNoSecondaryOk",
"$clusterTime" : {
"clusterTime" : Timestamp(1638760184, 1),
"signature" : {
"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong(0)
}
},
"operationTime" : Timestamp(1638760184, 1)
} :
_getErrorWithCode@src/mongo/shell/utils.js:25:13
Mongo.prototype.getDBs/<@src/mongo/shell/mongo.js:145:19
Mongo.prototype.getDBs@src/mongo/shell/mongo.js:97:12
shellHelper.show@src/mongo/shell/utils.js:956:13
shellHelper@src/mongo/shell/utils.js:838:15
@(shellhelp2):1:1
问题说明:
首先这是正常的,因为SECONDARY是不允许读写的, 在写多读少的应用中,使用Replica Sets来实现读写分离。通过在连接时指定或者在主库指定slaveOk,由Secondary来分担读的压力,Primary只承担写操作。
参考这篇《MongoDb的“not master and slaveok=false”错误及解决方法》博客解决。
解决方案:分别在主节点和从节点执行 db.getMongo().setSecondaryOk()
命令即可。
再次查看,没有上面的报错:
注意:查询数据前一定确保每个主、从节点执行 db.getMongo().setSecondaryOk()
命令都执行完成。
kill 杀掉 27018端口的mongodb服务后,27020端口随后被选为主节点
至此,验证完成。
MongoDB 集群-主从复制(一主二从)的更多相关文章
- MongoDB集群-主从复制(副本集)、failover
1.概念 主从复制的目的:数据冗余.备份.读写分离 主从方式:一主一从(不推荐,只能实现复制,主节点挂掉且未重新启动的时候,无法提升从节点为master),一主一从一裁判,一主多从 复制方式:主节点记 ...
- [转]搭建高可用mongodb集群(二)—— 副本集
在上一篇文章<搭建高可用MongoDB集群(一)——配置MongoDB> 提到了几个问题还没有解决. 主节点挂了能否自动切换连接?目前需要手工切换. 主节点的读写压力过大如何解决? 从节点 ...
- 搭建高可用mongodb集群(二)—— 副本集
在上一篇文章<搭建高可用MongoDB集群(一)——配置MongoDB> 提到了几个问题还没有解决. 主节点挂了能否自动切换连接?目前需要手工切换. 主节点的读写压力过大如何解决? 从节点 ...
- Redis集群主从复制(一主两从)搭建配置教程【Windows环境】
如何学会在合适的场景使用合适的技术方案,这值得思考. 由于本地环境的使用,所以搭建一个本地的Redis集群,本篇讲解Redis主从复制集群的搭建,使用的平台是Windows,搭建的思路和Linux上基 ...
- 搭建高可用mongodb集群(二)—— 副本集
在上一篇文章<搭建高可用MongoDB集群(一)--配置MongoDB> 提到了几个问题还没有解决. 主节点挂了能否自动切换连接?目前需要手工切换. 主节点的读写压力过大如何解决? 从节点 ...
- MongoDB集群与LBS应用系列(二)--与Hadoop集成
长期以来,我每开个系列,只有兴趣写一篇,很难持之与恒.为了克服这个长久以来的性格弱点,以及梳理工作半年的积累.最近一个月会写两篇关于Mongo在地理大数据方面的实践和应用,一篇关于推荐系统的初期准备过 ...
- 搭建高可用mongodb集群(一)——配置mongodb
在大数据的时代,传统的关系型数据库要能更高的服务必须要解决高并发读写.海量数据高效存储.高可扩展性和高可用性这些难题.不过就是因为这些问题Nosql诞生了. NOSQL有这些优势: 大数据量,可以通过 ...
- 搭建高可用mongodb集群(一)——配置mongodb
在大数据的时代,传统的关系型数据库要能更高的服务必须要解决高并发读写.海量数据高效存储.高可扩展性和高可用性这些难题.不过就是因为这些问题Nosql诞生了. NOSQL有这些优势: 大数据量,可以通过 ...
- mongodb集群化
转自:https://www.cnblogs.com/nulige/p/7613721.html 一.mongodb主从复制配置 主从复制是MongoDB最常用的复制方式,也是一个简单的数据库同步备份 ...
随机推荐
- [源码解析] TensorFlow 分布式环境(2)---Master 静态逻辑
[源码解析] TensorFlow 分布式环境(2)---Master 静态逻辑 目录 [源码解析] TensorFlow 分布式环境(2)---Master 静态逻辑 1. 总述 2. 接口 2.1 ...
- 阿里云镜像站DNS——Chrome配置方法
镜像下载.域名解析.时间同步请点击 阿里巴巴开源镜像站 DNS 简介 域名系统(服务)协议(DNS)是一种分布式网络目录服务,主要用于域名与 IP 地址的相互转换,以及控制因特网的电子邮件的发送. 阿 ...
- Blazor 002 : 一种开历史倒车的UI描述语言 -- Razor
Razor是一门相当怪异丑陋的标记语言,但在实际使用中却十分高效灵活.本文主要介绍了Razor是什么,以及Razor引擎的一些浅薄的背后机理. 写文章前我本想一口气把Razor的基本语法,以及Blaz ...
- [SniperOJ](web) Inject again 注入 过滤左右括号 order by
0x00 题目概述 题目地址:http://web2.sniperoj.cn:10004/ 拿到题,尝试注入,发现有过滤. 进行fuzz,发现过滤了 左右括号,分号,等号 ,还有一些查询关键字 . 在 ...
- Spring由哪些模块组成?
以下是Spring 框架的基本模块: Core module Bean module Context module Expression Language module JDBC module ORM ...
- @RequestMapping 注解?
该注解是用来映射一个URL到一个类或一个特定的方处理法上.
- Spring MVC的异常处理 ?
可以将异常抛给Spring框架,由Spring框架来处理:我们只需要配置简单的异常处理器,在异常处理器中添视图页面即可.
- JavaScript ajax返回状态
该内容转自CSDN:http://blog.csdn.net/u013381651/article/details/51261956 xmlhttp.readyState的值及解释: 0:请求未初始化 ...
- Hadoop全分布式
1.安装jdk Linux下安装jdk-7u67-linux-x64.rpm 2.免密登录 ssl免密登录(centos6) 3.同步时间:date -s "2020-04-0 ...
- vue集成ckeditor富文本框,怎么获取CKEditor实例?
CKEDITOR 版本5 ,vue集成形式 vue集成ckeditor富文本框,由于不是通过js创建的富文本对象,所以,无法取得实例对象,官方说明 官方在builds-->Getting and ...