目前主要的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. Mybatis学习(一)—————mybatis入门

    学习了hibernate这个持久层框架之后,在来学习Mybatis简直是无压力,因为Mybatis入门门栏很低,如果学习过了hibernate的话,对于Mybatis的学习很简单了,如果没学习过hib ...

  2. FFmpeg中overlay滤镜用法-水印及画中画

    本文为作者原创,转载请注明出处:https://www.cnblogs.com/leisure_chn/p/10434209.html 1. overlay技术简介 overlay技术又称视频叠加技术 ...

  3. ZooKeeper系列(3):znode说明和znode状态

    ZooKeeper系列文章:https://www.cnblogs.com/f-ck-need-u/p/7576137.html#zk 1.znode znode的官方说明:http://zookee ...

  4. Linux文件权限与属性详解 之 ACL

    Linux文件权限与属性详解 之 一般权限 Linux文件权限与属性详解 之 ACL Linux文件权限与属性详解 之 SUID.SGID & SBIT Linux文件权限与属性详解 之 ch ...

  5. Java爬虫之下载全世界国家的国旗图片

    介绍   本篇博客将继续上一篇博客:Python爬虫之使用Fiddler+Postman+Python的requests模块爬取各国国旗 的内容,将用Java来实现这个爬虫,下载全世界国家的国旗图片. ...

  6. 【转载】ASP.NET实现文件下载的功能

    文件下载是很多网站中含有的常用功能,在ASP.NET中可以使用FileStream类.HttpRequest对象.HttpResponse对象相互结合,实现输出硬盘文件的功能.该方法支持大文件.续传. ...

  7. HTML学习感悟

    HTML是一个超文本语言,原本并不打算做网站的我发现学习信息根本离不开web前端的掌握,因此需要对HTML进行一定程度的学习.对了,它可以说是网页的一个标志,打开任何网页我们看到的都是HTML的文本, ...

  8. Android Studio 基础控件使用

    TextView android:gravity="center" //文字对其方式 top bottom left right center android:textColor= ...

  9. npm 相关命令

    npm的相关命令 npm init -y : 产生一个package.json文件 npm install --save-dev  模块名     :   模块名会再package.json文件中的d ...

  10. 新浪微博登陆以及发送微博(附python源码)

    原文链接(本人):https://blog.csdn.net/A5878989/article/details/76275855 说明 本文主要记录分析新浪微博登陆以及发送文字和图片微博的详细过程 分 ...