MongoDB主从复制和副本集
MongoDB有主从复制和副本集两种主从复制模式,主从复制最大的问题就是无法自动故障转移,MongoDB副本集解决了主从模式无法自动故障转义的特点,因此是复制的首选。
对于简单的主从复制无法自动故障转移的缺陷,各个数据库都在改进,MySQL推出的MGR,Redis的哨兵,Mongodb的复制集。
对于主从复制模式:
mongodb的主从配置异常简单,
如果是非安全认证模式,只需要在主节点增加master = true,
从节点增加slave = true和source = ip:port两个节点,分别启动即可,不管主节点是否存在数据以及存在多少数据,从节点以slave的方式启动,就会自动同步主节点的数据。
相比MySQL的主从模式(各种原因导致的主从事务不一致),简单的不是一点半点。
port=12345 #端口
dbpath= /usr/local/mongodb/db #数据库存文件存放目录
logpath= /usr/local/mongodb/db/mongodb.log #日志文件存放路径
logappend=true #使用追加的方式写日志
fork=true #守护程序的方式启用,false即不在后台运行
maxConns=100 #最大同时连接数
journal=true #每次写入会记录一条操作日志(通过journal可以重新构造出写入的数据)。
storageEngine=wiredTiger #存储引擎有mmapv1、wiretiger、mongorocks
bind_ip = 10.104.174.247 #这样就可外部访问了,例如从win10中去连虚拟机中的MongoDB
#复制只需要增加master = true
master = true
#如果开启了安全认证,需要增加如下两个节点。
auth=true #启用验证
keyFile= /usr/local/mongodb/db/keyfile #添加keyfile
oplogSize=2048 #oplog大小
安全认证模式:
关于安全认证模式,纠结了好久,mongodb是这样的:
1,对于单实例的mongodb,(创建用户之后)开启安全认证需要增加auth = true配置即可,
2,主从或者副本集模式下,(创建用户之后)如果要开启安全认证,必须要加上keyFile(设置可以file之后auth参数才有效),二者必须同时配置,否则(主从or副本集)就不成功。
需要注意的是,如果在主节点创建了用户,主从节点以开启安全认证方式启动,主节点的用户信息同样可以同步到从节点,因此从节点并不需要再重新创建用户信息。
副本的初始化:
mongodb的副本在启动的时候会自动从主节点的oplog中读取数据,从而完成初始化,这一点非常省心。
当然,可能存在主节点数据超过oplog大小或者说主节点oplog发生了重用(覆盖),那么就无法通过oplog自动做到主从的同步,此时可以可以:
1,以autoresync = true的方式重启副本。
2,删除从节点的数据文件然后重新启动从节点。
3,删除从节点的数据文件,直接copy主节点的数据文件到从节点(个人认为这种方式更加简单高效),启动从节点即可。
三种方式都可以达到完整同步主节点数据的目的。
如下是mongodb slave节点同步数据的模式,来自于:https://www.cnblogs.com/daizhj/archive/2011/06/20/2050916.html

副本集搭建
由于MongoDB副本会自动从主节点(或者相邻的最近节点)同步数据,不会出现事务冲突之类错误,因此副本集的配置也很简单,这一点要比MySQL的各种配置简单太多。
主节点生成keyfile:
openssl rand -base64 100 > /usr/local/mongodb/db/keyfile --文件内容采base64编码,一共100个字符
修改文件权限:
chmod 600 /usr/local/mongodb/db/keyfile
复制改keyfile至各个节点,然后启动各个节点。
搭建副本集需要移除掉主从复制的一些配置项(主节点的master = true,从节点的slave,source等配置项),如下是一个最简单的配置项。
port=8000 #端口
dbpath= /usr/local/mongodb/db #数据库存文件存放目录
logpath= /usr/local/mongodb/db/mongodb.log #日志文件存放路径
logappend=true #使用追加的方式写日志
fork=true #守护程序的方式启用,false即不在后台运行
maxConns=100 #最大同时连接数
auth=true #启用验证
journal=true #每次写入会记录一条操作日志(通过journal可以重新构造出写入的数据)。
#即使宕机,启动时wiredtiger会先将数据恢复到最近一次的checkpoint点,然后重放后续的journal日志来恢复。
storageEngine=wiredTiger #存储引擎有mmapv1、wiretiger、mongorocks
bind_ip = 10.104.174.247 keyFile= /usr/local/mongodb/db/keyfile #添加keyfile
#master = true
oplogSize=2048 #oplog
replSet = rstest #副本集名称










"health" : 1, //1 表明正常; 0 表明异常
"state" : 1, // 1 表明是Primary; 2 表明是Secondary;
"stateStr" : "PRIMARY", //表明此机器是主库


副本集也可以通过定义主机集合的方式
config_rs1={_id:'rs1',members:[
{_id:1,host:'10.104.174.247:8000',priority:1},
{_id:2,host:'10.104.174.247:9000'},
{_id:3,host:'10.104.174.247:1000'}]}
rs.initiate(config_rs1) //初始化配置
参考:
https://www.cnblogs.com/xsi640/p/3765911.html
https://www.cnblogs.com/oubo/archive/2012/03/01/2394669.html
https://www.cnblogs.com/daizhj/archive/2011/06/20/2050916.html
MongoDB主从复制和副本集的更多相关文章
- Mongodb主从复制 及 副本集+分片集群梳理
转载努力哥原文,原文连接https://www.cnblogs.com/nulige/p/7613721.html 介绍了Mongodb的安装使用,在 MongoDB 中,有两种数据冗余方式,一种 是 ...
- Mongodb 主从复制与副本集实验
1.实验主从复制,并验证复制成功,抓图实验过程 Step1:创建相应的目录 Mkdir -p ./dbs/master Mkdir -p ./dbs/slave Step2:开启主服务 ./bin/ ...
- MongoDB的主从复制和副本集
mongoDB的两个特性主从复制和副本集,实现了数据的同步备份 一.主从复制 主从复制是一个简单的数据库同步备份的集群技术.例如主服务器宕机了,可以直接使用从服务器,主服务器恢复后在进行同步,保证了业 ...
- 【六】MongoDB管理之副本集
一.复制介绍 所谓的复制就是在多个主机之间同步数据的过程. 1.数据冗余及可用性 复制技术提供数据冗余及可用性,在不同的数据库服务器上使用多个数据副本,复制技术防止单个数据库服务器出现数据故障而出现数 ...
- 2.MongoDB 4.2副本集环境基于时间点的恢复
(一)MongoDB恢复概述 对于任何数据库,如果要将数据库恢复到过去的任意时间点,否需要有过去某个时间点的全备+全备之后的重做日志. 接下来根据瑞丽航空的情况进行概述: 全备:每天晚上都会进行备份: ...
- MongoDB 复制(副本集)学习
MongoDB 复制(副本集)学习 replication set复制集,复制集,多台服务器维护相同的数据副本,提高服务器的可用性.MongoDB复制是将数据同步在多个服务器的过程.复制提供了数据的冗 ...
- MongoDB 3.0 常见集群的搭建(主从复制,副本集,分片....)
一.mongodb主从复制配置 主从复制是mongodb最常用的复制方式,也是一个简单的数据库同步备份的集群技术,这种方式很灵活.可用于备份,故障恢复,读扩展等. 最基本的设置方式就是建立一个主节 ...
- MongoDB之主从复制和副本集(四)
简单主从复制 采用一主一从或一主多从的布署模式,可以将读写分离开来,提高数据库的可用性,不过mongodb的主从模式并不能在主节点崩溃后,从节点替换主节点的工作,一般可以在开发阶段使用. 实现步骤 设 ...
- MongoDB 学习笔记(七):主从复制与副本集
一.主从复制 1.主从复制是一个简单的数据库同步备份的集群技术,如下图:要明确的知道主服务器与从服务器,且从服务器要明确的知道主服务器的存在. 2.在MongoDB中在启动数据库服务时,可以用mast ...
随机推荐
- 创建一个dynamics 365 CRM online plugin (六) - Delete plugin from CRM
我们之前都学习到怎么添加,debug还有update plugin. 今天带大家过一下怎么从CRM instance当中删除plugin. 首先让我们打开Settings -> Customiz ...
- 【原创】Bug管理操作规范个人经验总结
1. 禅道简介 禅道是一个基于“敏捷开发”模式的软件开发全生命周期管理软件,在国内的软件开发公司里占据最大的份额,从大公司到小公司,都能适用. 笔者使用禅道多年,根据自己的经验总结了一套Bug管理的方 ...
- my sql无法删除数据库
mysql有时候会无法删除数据库,可以通过 1.select @@datadir 查询到文件目录 'C:\\ProgramData\\MySQL\\MySQL Server 5.7\\Data\\' ...
- lay-verify 无效
lay-verify 无效 使用lay-verify有两个需要注意的地方: form标签需要添加 class="layui-form" 提交按钮需要添加 lay-submit=&q ...
- chrony配置的和相关命令
ntp命令 查看时间同步源: $ chronyc sources -v 查看时间同步源状态: $ chronyc sourcestats -v 设置硬件时间 硬件时间默认为UTC: $ timedat ...
- 【CentOS】自定义服务添加
1.创建服务需要执行的脚本 cd /sb/scripts vi td-agent-testlog #!/bin/bash # # /etc/rc.d/init.d/td-agent-DC01 # # ...
- LAB1 partV
partV 创建文档反向索引.word -> document 与 前面做的 单词统计类似,这个是单词与文档位置的映射关系. mapF 文档解析相同,返回信息不同而已. reduceF 返回归约 ...
- 【dbdiff】数据库比对工具安装
安装git 忽略 安装visual c++组件(和mysql workbench需要的一样) https://www.microsoft.com/en-us/download/details.aspx ...
- 【剑指Offer】只出现一次的字符
题目描述 请实现一个函数用来找出字符流中第一个只出现一次的字符.例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g".当从该字符流中读出 ...
- Realm 处理List<String> 问题 Type parameter 'java.lang.String' is not within its bound; should implement 'io.realm.RealmModel
public class InitAppBean extends RealmObject { private String sapling; private String logistics; pri ...