使得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. TiDB的简单介绍以及进行资源限制的方式与方法

    TiDB的简单介绍以及进行资源限制的方式与方法 TiDB的简介 TiDB是一个分布式数据库, 简介为: TiDB 是一个开源的分布式关系型数据库,它兼具了分布式数据库的水平扩展性和传统关系型数据库的 ...

  2. win10系统单独编译和使用WebRTC的回声消除(AEC)、音频增益(AGC)、去噪(NS)模块

    一.简介 本人想单独编译并使用WebRTC的音频回声消除模块,奈何技术有限,于是在百度的海洋里大海捞针,发现了https://www.cnblogs.com/mod109/p/5827918.html ...

  3. [NSSRound#1 Basic]basic_check

    打开网站,发现啥也没有: 就用dirsearch扫了一遍.发现还是没有有用信息: 只有再另找方法: 再用nikto扫一次: 发现一个put方法,就用put上传一个一句话木马:可以用插件restlien ...

  4. buu pwn wp(持续更新)

    1.warmup_csaw_2016 main函数如下 __int64 __fastcall main(int a1, char **a2, char **a3) { char s[64]; // [ ...

  5. 每天5分钟复习OpenStack(八)存储虚拟化

    KVM存储虚拟化是通过存储池(Storage Pool)和卷(Volume)来管理的.Storage Pool 是宿主机上可以看到的一片存储空间,可以是多种类型,Volume 是在 Storage P ...

  6. 整理unity资料

    https://www.cnblogs.com/fly-100/p/3910515.html 协同的概念介绍

  7. SHA256算法加密工具类

    代码如下,请自取 /** * @description: SHA256算法加密 * @author: luolei * @Date: 2022-10-31 17:16 */ public class ...

  8. SNN_文献阅读_Spiking neural networks, an introduction

    Spiking neural networks, an introduction 脉冲神经网络的生物学背景+两种采用脉冲编码的神经元模型 概论 本文介绍了脉冲神经网络的生物学背景,并将介绍两种采用脉冲 ...

  9. GitHub Universe 2023:AI 技术引领软件开发创新浪潮

    GitHub 是全球领先的软件开发和协作平台,数百万开发者和企业在此分享.学习和创建卓越的软件.同时 GitHub 处在 AI 技术前沿,通过其先进的 AI 技术增强开发者体验并赋能未来软件开发的使命 ...

  10. (Good topic)哈希表:最长回文串(3.19 leetcode每日打卡)

    给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串. 在构造过程中,请注意区分大小写.比如 "Aa" 不能当做一个回文字符串. 注意: 假设字符串的长度不 ...