使得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. 文心一言 VS 讯飞星火 VS chatgpt (94)-- 算法导论9.2 3题

    三.用go语言,给出 RANDOMIZED-SELECT的一个基于循环的版本. 文心一言: 在循环中实现 RANDOMIZED-SELECT 的一个版本可以如下所示.这个版本使用 Go 语言编写,利用 ...

  2. golang .(type)语法

    一直弄不懂 .(type) 是啥,在 liteide 中输出 (1+1).(type),提示: use of .(type) outside type switch 于是搜索到这个文章: 作者:翔云翔 ...

  3. Solution -「营业」「CF 527C」Glass Carving

    Description Link. 有一个块 \(n\times m\) 的矩形,有 \(q\) 次操作,每次把矩形横 / 竖着切一刀,问切完后的最大矩形面积. Solution 一个不同于大多数人. ...

  4. jenkins更换国内插件源

    sed -i 's/https:\/\/updates.jenkins.io\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' ...

  5. 【c#版本Openfeign】Net8 自带OpenFeign实现远程接口调用

    引言 相信巨硬,我们便一直硬.Net版本到现在已经出了7了,8也已经在预览版了,相信在一个半月就会正式发布,其中也有很多拭目以待的新功能了,不仅仅有Apm和Tap的结合,TaskToAscynResu ...

  6. 使用mtrace追踪JVM堆外内存泄露

    原创:扣钉日记(微信公众号ID:codelogs),欢迎分享,非公众号转载保留此声明. 简介 在上篇文章中,介绍了使用tcmalloc或jemalloc定位native内存泄露的方法,但使用这个方法相 ...

  7. 使用Vue3+elementPlus的Tree组件实现一个拖拽文件夹管理

    目录 1.前言 2.分析 3. 实现 4.踩坑 4.1.拖拽辅助线的坑 4.2.数据的坑 4.3.限制拖拽 4.4.样式调整 1.前言 最近在做一个文件夹管理的功能,要实现一个树状的文件夹面板.里面包 ...

  8. FreeSWITCH添加h264编码及pcap视频提取

    操作系统 :CentOS 7.6_x64.Windows 10_x64 FreeSWITCH版本 :1.10.9 Python版本:3.9.2 一.启用h264相关模块 这里以 mod_openh26 ...

  9. Python socket实现ftp文件下载服务

    简要 使用Python socket和多线程实现一个FTP服务下载.下面的示例是固定下载某一个任意格式文件. 仅仅为了展示如果使用socket和多线程进行文件下载 服务端代码 import socke ...

  10. tmai

    天猫精灵技能应用平台合作协议 发布日期:2020年03月18日 更新日期:2021年02月01日 鉴于您(语音技能.小程序或应用程序APP等的制作.提供或开发者)希望入驻或与天猫精灵技能应用平台(又称 ...