目前主要的MongoDB高可用架构包含:

  • 主从架构

  • Replica set副本集方式

  • sharding分片

本文不讨论sharding,在另一篇博客中单独描述了sharding的架构和搭建方式,参考:MongoDB Sharding分片配置

一、主从架构

https://docs.mongodb.com/v3.6/core/master-slave/index.html

Master配置文件:

dbpath = /home/wang/mongodbDATA/master
port = 27017
bind_ip = 192.168.1.100 --3.6开始mongodb默认bind本地localhost
master = true
Slave配置文件:

dbpath = /home/wang/mongodbDATA/slave
port = 27017
bind_ip = 192.168.1.101
source = 192.168.1.100:27017
slave = true
这样主从就搭建完毕了,很简单。你可以通过剪切DATA文件夹来初始化,或者直接不初始化,mongo从库会自动从主库拉取数据进行初始化。

db.isMaster()
rs.printReplicationInfo() --只能在master执行
rs.printSlaveReplicationInfo() --只能在slave执行

Master-slave架构主库宕机后备库不能自动切换,因此官方推荐使用replica set。且自3.2版本以后shard环境已经不再允许使用master-slave只能使用replica set。

更多的关于如何将master-slave架构升级为replica set的步骤,参考如上的官网链接。
如何进行主从切换:
  1. 关闭master节点
  2. 关闭slave节点
  3. 备份并删除slave节点的dbpath下的所有local开头的文件
  4. 修改slave节点的配置文件,将其角色变为master。(注意此过程是不可逆的,原master节点想要成为slave必须重做一次full initial sync)

如何将主从架构转变为replica set架构:(事实上主从不能直接转化为副本集,只能先转为单节点replica set,然后rs.add()添加节点,这需要secondary进行数据初始化)

事实上不必参考官网的链接,只需要手动将master的配置文件修改为rs的配置,然后重启节点,其他节点清空dbpath目录并配好rs配置项启动即可,这样会自动初始化数据,也可以停止主库拷贝dbpath然后传输到slave节点进行初始化,避免了自动resync。
二、Replica Set
注意自动failover需要集群节点数为奇数,如下为双节点+仲裁节点的结构。
配置步骤:
1. 三节点的配置文件全部修改为如下格式:

dbpath=/mongodb/data/
logpath=/mongodb/log/mongo.log
pidfilepath=/mongodb/mongo.pid
directoryperdb=true
logappend=true
replSet=rep
port=27017
oplogSize=10000
fork=true
noprealloc=true
2. 在任意一个节点设置replica set

use admin
cfg={ _id:"rep", members:[ {_id:0,host:'192.168.20.70:27017',priority:2}, {_id:1,host:'192.168.20.71:27017',priority:1},
{_id:2,host:'192.168.20.72:27017',arbiterOnly:true}] };
--priority的取值范围为0-1000,值越大优先级越高,可以为小数。
(一般不设为0,普通节点默认为1,仲裁节点默认为0,仲裁节点即便设置为1也会自动变成0)
--如果priority设为0,那么意味着此节点永远不会变为主,但是有投票权。
--修改此参数操作参见:https://docs.mongodb.com/manual/tutorial/adjust-replica-set-member-priority/index.html
--关于hidden副本集参见:https://docs.mongodb.com/manual/core/replica-set-hidden-member/#replica-set-hidden-members
###########
初始化生效:
###########
rs.initiate(cfg)
3. 等待几秒后查看集群状态

rs.status()
"stateStr" : "RECOVERING" --表示配置正在生效,生效后为PRIMARY/SECONDARY/ARBITER
注意slave默认是不允许读写的,如果想要读,那么需要执行rs.slaveOk()
当primary宕机后,secondary自动转换为主,当primary重新启动后,又会自动切换回去。
此外关于节点的添加删除重新配置等等,强烈建议阅读官网关于replication提供的各种方法:
重配rs的步骤为:
1.rs.conf()查看之前的集群信息,集群名需要与mongo.conf中一致
2.新建cfg配置,使用rs.reconfig(cfg,{force:true})来重置rs
3.查看新的rs状态
如果以上配置失败可以更改data文件重新配置rs

MongoDB 主从和Replica Set的更多相关文章

  1. mongodb系列之--mongodb 主从配置与说明

    一.为什么要配置mongodb的主从: 1.做主从,可以说是做数据的备份,有利于故障的恢复 2.做主从,可以做到读写分离,主节点负责写操作,从节点负责读操作,这样就把读写压力分开,保证系统的稳定性. ...

  2. mongodb 主从

    mongodb 主从 因为条件限制我们把主从放在一台服务器上面 相关参数 在启动从的时候可以增加以下参数 --autoresync 当发现从服务器的数据不是最新时,开始从主服务器请求同步数据 --sl ...

  3. MongoDB自学------(4)MongoDB主从搭建

    MongoDB复制原理 mongodb的复制至少需要两个节点.其中一个是主节点,负责处理客户端请求,其余的都是从节点,负责复制主节点上的数据. mongodb各个节点常见的搭配方式为:一主一从.一主多 ...

  4. MongoDB学习笔记——Replica Set副本集

    副本集 可以将MongoDB中的副本集看作一组服务器集群由一个主节点和多个副本节点等组成,相对于之前讲到的主从复制提供了故障自动转移的功能 副本集实现数据同步的方式依赖于local数据库中的oplog ...

  5. mongodb复制集Replica Set使用简介

    MongoDB高可用 对于MongoDB,可以支持使用单机模式提供服务,但是在实际的生产环境中,单机模式将面临很大的风险,一旦这个数据库服务出现问题,就会导致线上的服务出现错误甚至崩溃.因此,在实际生 ...

  6. mongodb主从备份 和 手动主从切换

    环境: 主机A:172.16.160.91 主机B:172.16.160.92 配置主机A [root@master zhxf]# cat docker-compose.yml version: '3 ...

  7. MongoDB整理笔记のReplica oplog

    主从操作日志oplog MongoDB的Replica Set架构是通过一个日志来存储写操作的,这个日志就叫做"oplog".oplog.rs是一个固定长度的capped coll ...

  8. MongoDB主从配置

    master的配置 # cat mongod.conf dbpath = /app/sinova/mongodata/db            #指定数据库目录 logpath = /app/sin ...

  9. mongodb主从(副本集附仲裁节点)部署带认证模式

    环境:OS:CentOS 7DB:3.0.15机器角色:192.168.1.134:10001 主192.168.1.135:10002 从192.168.1.135:10003 仲裁节点 1.下载相 ...

随机推荐

  1. 【转载】浅谈38K红外发射接受编码

    转自Doctor_A 坛友的笔记! 之前做接触过一次红外遥控器,现在有空想用简单的话来聊一聊,下面有错误的地方欢迎改正指出: 1:红外的概念不聊,那是一种物理存在.以下聊38K红外发射接收,主要讲可编 ...

  2. MongoDB 菜鸟入门“秘籍”

    1.MongoDB介绍 1.1 什么是MongoDB ? MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统. 在高负载的情况下,添加更多的节点,可以保证服务器性能. Mo ...

  3. Go语言学习笔记说明

    参考书籍:<学习Go语言>.<Go语言编程> 程序运行环境:windows(64bit) Go语言版本:go1.0.2   资料: 1.Go语言半小时速成教程 http://w ...

  4. Spark提高篇——RDD/DataSet/DataFrame(二)

    该部分分为两篇,分别介绍RDD与Dataset/DataFrame: 一.RDD 二.DataSet/DataFrame 该篇主要介绍DataSet与DataFrame. 一.生成DataFrame ...

  5. Docker端口映射及创建镜像演示(二)--技术流ken

    前言 在上一篇博客<Docker介绍及常用操作演示--技术流ken>中,已经详细介绍了docker相关内容以及有关镜像和容器的使用命令演示. 现在我们已经可以自己下载镜像,以及创建容器了. ...

  6. Runtime详解(上)

    这篇关于Runtime讲解参考https://juejin.im/post/593f77085c497d006ba389f0以及https://www.jianshu.com/p/6ebda3cd80 ...

  7. Python网络编程之Socket的简单实现

    一.引入 关于Python的网络编程,最基础莫过于socket了. socket,又称“套接字”,网络上的两个程序如果想要实现双向的数据通信,需要建立连接,这个连接的一端就称为一个socket. py ...

  8. [android] 获取系统的联系人信息

    内容提供是实质上是个接口,后门,他给别人提供数据,系统联系人是个比较复杂的内容通过者. 找到/data/data/com.android.providers.contacts/contacts2.db ...

  9. Netty实战十之编解码器框架

    编码和解码,或者数据从一种特定协议的格式到另一种格式的转换.这些任务将由通常称为编解码器的组件来处理.Netty提供了多种组件,简化了为了支持广泛的协议而创建自定义的编解码器的过程.例如,如果你正在构 ...

  10. 基于redis的分布式锁(不适合用于生产环境)

    基于redis的分布式锁 1 介绍 这篇博文讲介绍如何一步步构建一个基于Redis的分布式锁.会从最原始的版本开始,然后根据问题进行调整,最后完成一个较为合理的分布式锁. 本篇文章会将分布式锁的实现分 ...