使得mongodb具备自动故障转移、高可用、读写分离。

副本集默认情况下读写都只是通过主库,副节点只是备份数据而已,但是可以设置副节点允许读操作,这样就可以做成读写分离。

使用pymongo的时候也可以设置,还可以动态设置库、集合的readPreference。详细的后面再写。。。

如果主节点不可用,副本集会选择一个辅助节点作为主节点并继续正常运行。旧的主节点在可用时会重新加入集合。

副本集搭建可以参考官方教程:

https://www.mongodb.com/docs/manual/administration/replica-set-deployment/

如果是需要将现有的mongodb实例转换为副本集,看这里:

https://www.mongodb.com/docs/manual/tutorial/convert-standalone-to-replica-set/#std-label-server-replica-set-deploy-convert

副本集中的节点角色可以有下面几种:

  1. 主节点
  2. 副节点
  3. 仲裁器节点(仲裁者参与选举,但不保存数据,即不提供数据冗余)
    1. 仲裁节点的使用场景:你有一个主、副节点,但是你的服务器又不够硬件支撑你再添加一个副节点(因为副节点也是池不少硬件的),此时你可以添加一个仲裁器。仲裁器参与主节点的选举,但仲裁器没有数据集的副本,因此无法成为主节点。

需要注意的是:

  1. 仲裁节点不要和主节点和副节点运行在统一个系统上!!!
  2. 仲裁器节点不要添加多个,容易出现数据一致性问题。降低写入时的可靠使用性。
  3. 副本集建议使用单数,3、5、7这样的.....

副本集的搭建至少要有3个节点,可以是:1主2从(官方推荐),或者:1主1从1仲裁

副本集搭建实例(1主2从)

  1. 创建3个实例的数据存储目录,因为我都放在同一台机器上了,所以要区分一下目录。生成环境不可能将成员实例都放在同一台机器上的。
mkdir data-master
mkdir data-slave01
mkdir data-slave02
  1. 修改3个实例的配置文件

    这里测试用,所以都放在同一台机器上了,注意修改端口为不一样的。

    主节点master:

# Where and how to store data.
storage:
dbPath: D:\Program Files\MongoDB\Server\5.0\data
journal:
enabled: true # where to write logging data.
systemLog:
destination: file
logAppend: true
path: D:\Program Files\MongoDB\Server\5.0\log\mongod.log # network interfaces
net:
port: 27017
bindIp: 127.0.0.1 # 副本集配置
replication:
#副本集的名称
replSetName: "myrs"
**副节点1:**
# mongod-salve01.conf
storage:
dbPath: D:\Program Files\MongoDB\Server\5.0\data-slave01
journal:
enabled: true # where to write logging data.
systemLog:
destination: file
logAppend: true
path: D:\Program Files\MongoDB\Server\5.0\log\mongod-slave01.log # network interfaces
net:
port: 27018
bindIp: 127.0.0.1 # 副本集配置
replication:
# 副本集的名称 ,统一个副本集中的mongodb实例都要用同一个名称!!!
replSetName: "myrs"
**副节点2:**
# mongod-salve02.conf
storage:
dbPath: D:\Program Files\MongoDB\Server\5.0\data-slave02
journal:
enabled: true # where to write logging data.
systemLog:
destination: file
logAppend: true
path: D:\Program Files\MongoDB\Server\5.0\log\mongod-slave02.log # network interfaces
net:
port: 27019
bindIp: 127.0.0.1 # 副本集配置
replication:
# 副本集的名称 ,统一个副本集中的mongodb实例都要用同一个名称!!!
replSetName: "myrs"
  1. 启动3个实例
mongod.exe -f mongod.cfg
mongod.exe -f mongod-slave01.cfg
mongod.exe -f mongod-slave02.cfg REM windows可以将其安装为服务,以服务的方式启动
mongod.exe -f mongod-slave01.cfg --install --serviceName MongoDB-slave01-27018
mongod.exe -f mongod-slave02.cfg --install --serviceName MongoDB-slave01-27019
  1. 初始化副本集

    需要先连接到你想要其成为主节点的实例上,然后执行rs.initiate({config配置})命令通过传递副本集配置参数来初始化。

    副本集的配置参数请参考:https://www.mongodb.com/docs/manual/reference/replica-configuration/

mongo.exe --port 27017

/*
// 生产环境,用hostname比较好。
rs.initiate( {
_id : "rs0",
members: [
{ _id: 0, host: "mongodb0.example.net:27017" },
{ _id: 1, host: "mongodb1.example.net:27017" },
{ _id: 2, host: "mongodb2.example.net:27017" }
]
})
*/ //这里因为式测试,所以就用ip地址了
rs.initiate({
_id : "myrs", // 副本集的名称,这个在配置文件中指定了。
members: [
{ _id: 0, host: "127.0.0.1:27017" },
{ _id: 1, host: "127.0.0.1:27018" },
{ _id: 2, host: "127.0.0.1:27018" }
]
}) // 第一次初始化后副本集后,一开始显示的还是PRIMARY节点(副节点),过一会再按回车后才会变成主节点
// 这是因为,初始化还未完成,需要稍等一会。
myrs:SECONDARY>
myrs:PRIMARY>

副本集管理

https://www.mongodb.com/docs/manual/administration/replica-set-member-configuration/

https://www.mongodb.com/docs/manual/administration/replica-set-maintenance/

比较常用:

rs.help()     // 查看帮助信息
rs.isMaster() // 查看当前节点是否为主节点等信息
rs.hello() // 查看副本集信息
rs.status() // 查看副本集状态
rs.conf() // 返回当前副本集的配置文件 **rs.secondaryOk(true|false) //将所有的副节点设置是否允许读操作(在同一个副本集中的任意节点中都可以执行该命令)** // https://www.mongodb.com/docs/manual/reference/method/rs.add/#mongodb-method-rs.add
rs.add() // 将成员添加到副本集。使用该命令必须实在主节点上操作!

MongoDB副本集的搭建和管理(高可用)的更多相关文章

  1. MongoDB副本集的搭建

    副本集是mongodb提供的一种高可用解决方案.相对于原来的主从复制,副本集能自动感知primary节点的下线,并提升其中一个Secondary作为Primary. 整个过程对业务透明,同时也大大降低 ...

  2. [ MongoDB ] 副本集的搭建及测试

    Replica Sets  复制 (副本集) node1: 10.0.0.10node2: 10.0.0.11node3: 10.0.0.12 副本集结构图:

  3. window系统上实现mongodb副本集的搭建

    一.问题引出 假设我们生产上的mongodb是单实例在跑,如果此时发生网络发生问题或服务器上的硬盘发生了损坏,那么这个时候我们的mongodb就使用不了.此时我们就需要我们的mongodb实现高可用, ...

  4. MySQL集群搭建(5)-MHA高可用架构

    1 概述 1.1 MHA 简介 MHA - Master High Availability 是由 Perl 实现的一款高可用程序,出现故障时,MHA 以最小的停机时间(通常10-30秒)执行 mas ...

  5. MySQL集群搭建(3)-MMM高可用架构

    1 MMM 介绍 1.1 简介 MMM 是一套支持双主故障切换以及双主日常管理的第三方软件.MMM 由 Perl 开发,用来管理和监控双主复制,虽然是双主架构,但是业务上同一时间只允许一个节点进行写入 ...

  6. mongodb副本集群搭建

    一.环境介绍 1.机器信息 10.40.6.68 10.40.6.108 10.40.6.110 软件环境为centos 6.x 2.mongodb 下载链接地址 https://www.mongod ...

  7. Docker下搭建mongodb副本集

    背景 有需求需要对mongodb做一个容灾备份.根据官网,发现mongodb最新版本(4.0)已经抛弃了主从模式而采用副本集进行容灾.副本集的优势在于:"有自动故障转移和恢复特性,其任意节点 ...

  8. 我们的一个已投产项目的高可用数据库实战 - mongo 副本集的搭建具体过程

    我们的 mongo 副本集有三台 mongo 服务器:一台主库两台从库. 主库进行写操作,两台从库进行读操作(至于某次读操作到底路由给了哪台,仲裁决定).实现了读写分离.这还不止,假设主库宕掉,还能实 ...

  9. MongoDB副本集的常用操作及原理

    本文是对MongoDB副本集常用操作的一个汇总,同时也穿插着介绍了操作背后的原理及注意点. 结合之前的文章:MongoDB副本集的搭建,大家可以在较短的时间内熟悉MongoDB的搭建和管理. 下面的操 ...

  10. MongoDB 副本集的常用操作及原理

    本文是对MongoDB副本集常用操作的一个汇总,同时也穿插着介绍了操作背后的原理及注意点. 结合之前的文章:MongoDB副本集的搭建,大家可以在较短的时间内熟悉MongoDB的搭建和管理. 下面的操 ...

随机推荐

  1. ELK环境部署-基础环境安装(一)

    ELK简介 ElasticSearch工作原理以及专用名词 ELK是Elasticsearch(ES) , Logstash, Kibana的结合,是一个开源日志收集软件. Elasticsearch ...

  2. MQTT vs. XMPP,哪一个才是IoT通讯协议的正解

    MQTT vs. XMPP,哪一个才是IoT通讯协议的正解 这是个有趣的话题! 先来聊几个小故事. 关于我和MQTT 我在人生第一个IoT项目里,第一次接触到MQTT协议. 我很快就理解了这个协议.因 ...

  3. KRPano JS 场景编辑器源码

    KRPano JS编辑器,可以运行在Node环境中. 源码地址:https://github.com/xxweimei/krpano-editor-js 或者下载zip包:http://pan.bai ...

  4. 运行在容器中Postgres数据库数据损坏后如何恢复?

    前言 在使用 K8S 部署 RSS 全套自托管解决方案- RssHub + Tiny Tiny Rss, 我介绍了将 RssHub + Tiny Tiny RSS 部署到 K8s 集群中的方案. 其中 ...

  5. Berkeley

    2019年Berkeley预测Serverless将取代Serverful计算,成为云计算的计算新范式.Serverless为应用程序开发提供了一种全新的系统架构,其凭借着弹性伸缩省事省心,按需付费更 ...

  6. 创业团队建设与管理mooc【第二次中期测验】

    mo'o 第二次中期测验 返回 已经超过规定的测试次数或提交截止时间已过.你可以作为自我学习进行测验,但提交的结果将无法获得学分. 1 单选(2分) PDCA循环中的P是指什么? 得分/总分 A. 处 ...

  7. [ARC143B] Counting Grids 题解

    Counting Grids 题目大意 将 \(1\sim n^2\) 填入 \(n\times n\) 的网格 \(A\) 中,对于每个格子满足以下条件之一: 该列中存在大于它的数. 该行中存在小于 ...

  8. 微软发布开源平台 Radius:高效构建、运行基于Dapr 云原生应用程序

    Microsoft Azure 孵化团队很高兴地宣布[1]推出一个名为 Radius 的新开放应用程序平台,该平台将应用程序置于每个开发阶段的中心,重新定义应用程序的构建.管理和理解方式.Radius ...

  9. Util应用框架快速入门(4) - 集成测试开发入门

    本文演示Util应用框架开发的项目中如何编写集成测试. 准备 完成 Web Api 快速入门,本文将在之前生成的示例项目上讲解集成测试的开发. 测试概述 自动化测试对于Util应用框架的开发非常重要, ...

  10. OA、CRM、SCM、ERP之间的区别和联系是什么?

    当然,各个系统之间要集成.集成之后的东西,不叫做ERP.做ERP的人说叫ERP,做PLM的人说叫PLM,卖OA的人更愿意叫OA.其实,那个集成之后的东西,啥也不叫.   英文名 中文名 百科释义 关注 ...