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最常用的复制方式,也是一个简单的数据库同步备份 ...
随机推荐
- ArcMap进行天空开阔度(SVF)分析
这里的SVF并不是生物学或医学的(Stromal Vascular Fraction),而是指GIS中的(Sky View Factor,SVF),即为(城市)天空开阔度. 城市天空开阔度(Sky V ...
- JavaWeb 07_创建web项目连接MySQL实现注册登录功能
一.创建一个web项目,参照JW/01_创建web项目及部署 二.在NAVICat 里建数据库 db_01,建表tb_user ,字段UName .Pwd 三.在web下创建一个Directory, ...
- 解决使用DBeaver连接MySQL时报错-The server time zone value '�й���ʱ��' is unrecognized or represents more than one time zone.
解决使用DBeaver连接MySQL时报错,其实提示很明显. The server time zone value '�й���ʱ��' is unrecognized or represents ...
- [转载]实战 SSH 端口转发
实战 SSH 端口转发 通过本文的介绍,读者可以从中了解到如何应用 SSH 端口转发机制来解决日常工作 / 生活中的一些问题.学会在非安全环境下使用端口转发来加密网络应用,保护个人隐私以及重要商业信息 ...
- zookeeper有几种部署模式? zookeeper 怎么保证主从节点的状态同步?
一.zookeeper的三种部署模式 Zookeeper 有三种部署模式分别是单机模式.伪集群模式.集群模式.这三种模式在不同的场景下使用: 单机部署:一般用来检验 Zookeeper 基础功能,熟悉 ...
- spring学习一:spring入门及相关概念介绍
1:Spring的概念:(03年兴起) (1) 开源的轻量级的框架(无需复杂的环境,不依赖其他) (2) 一站式框架(Spring在javaee的三层结构中,对每一层都提供不同的解决技术: ...
- Eclipse建立Web项目,手动生成web.xml文件
相关文章:https://blog.csdn.net/ys_code/article/details/79156188(Web项目建立,手动生成web.xml文件
- Redis List Type
Redis列表的操作命令和对应的api如下: lpush/rpush [list] [value] JedisAPI:public Long lpush/rpush(final String key, ...
- Markdown入门操作
Markdown基本操作 一. 字体 1. 标题 (1). 一级标题 "# + 标题名" (2). 其余类推 (最多支持6级标题) 加粗 " ** + 内容 + ** & ...
- MM32F0020 UART1硬件自动波特率的使用
目录: 1.MM32F0020简介 2.UART自动波特率校准应用场景 3.MM32F0020 UART自动波特率校准原理简介 4.MM32F0020 UART1 NVIC硬件自动波特率配置以及初始化 ...