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 ...
随机推荐
- JWT(JSON Web Token) 【转载】
JWT(JSON Web Token) 什么叫JWTJSON Web Token(JWT)是目前最流行的跨域身份验证解决方案. 一般来说,互联网用户认证是这样子的. 1.用户向服务器发送用户名和密码. ...
- D# 语法
这篇文章 随意 的 记录 关于 D# 语法的想法 . template 和 interface 同时作为一等公民 D# 是程序员的语言,不需要太多包装和修饰, D# 是 简单的, 编译器 和 ID ...
- windows 端口转发
1.添加端口转发 netsh interface portproxy add v4tov4 listenport=5000 listenaddress=10.30.3.148 connectport= ...
- 安卓APP环境搭建
https://www.cocos.com/creator 下载2.0.8 安装的时候选择原生环境 下载SDK:http://tools.android-studio.org/index.php/sd ...
- mysql 存储过程的实现原理
一.描述 存储过程是一组可以完成特定功能的SQL语句集,经编译后存储在数据库中 statement语句(DDL.DML.导出及管理语句等).异常处理.流程控制二.创建存储过程 系统做语句分析,如果没有 ...
- 20175236 2018-2019-2 《Java程序设计》第四周学习总结
教材学习内容总结 子类与父类 java不支持多重继承,即一个子类不可以从多个父类中同时继承,而C++中可以.人们习惯地称子类与父类的关系式“is—a”的关系. 在类的声明过程中,通过关键字extend ...
- dotnet core调试docker下生成的dump文件
最近公司预生产环境.net core应用的docker容器经常出现内存暴涨现象,有时会突然吃掉几个G,触发监控预警,造成容器重启. 分析了各种可能原因,修复了可能发生的内存泄露,经测试本地正常,但是发 ...
- C语言编程漫谈——main函数
写在前面 促使我写这篇文章是因为我这几天找了几个一样是大三的同学,与我相同专业相同方向(物联网)的人,除了@小胡同的诗,基本没有什么其他人会现在看起来很简单的编程题目了.问了一下其他同学,他们大部分都 ...
- Ajax2简单的使用方式
http://www.cnblogs.com/Ming8006/p/6142191.html
- (二)获取Access_token
获取access_token access_token是公众号的全局唯一接口调用凭据,公众号调用各接口时都需使用access_token.开发者需要进行妥善保存.access_token的存储至少要保 ...