MongoDB主从复制和副本集

栏目: 数据库 · 发布时间: 5年前

内容简介:MongoDB有主从复制和副本集两种主从复制模式,主从复制最大的问题就是无法自动故障转移,MongoDB副本集解决了主从模式无法自动故障转义的特点,因此是复制的首选。对于简单的主从复制无法自动故障转移的缺陷,各个数据库都在改进,MySQL推出的MGR,Redis的哨兵,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主从复制和副本集

副本集搭建

由于 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 #副本集名称

主节点副本集初始化

rs.initiate()

MongoDB主从复制和副本集

(数秒之后)同时发现rstest:SECONDARY>变为rstest:PRIMARY>

MongoDB主从复制和副本集

加入新节点

rs.add("10.104.174.247:9000")

rs.add("10.104.174.247:10000")

MongoDB主从复制和副本集

rs.status() 查看副本集主从节点的状态

MongoDB主从复制和副本集

"health" : 1, //1 表明正常; 0 表明异常

"state" : 1, // 1 表明是Primary; 2 表明是Secondary;

"stateStr" : "PRIMARY", //表明此机器是主库

rs.isMaster()查看主节点信息

MongoDB主从复制和副本集

副本集也可以通过定义主机集合的方式

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) //初始化配置


以上所述就是小编给大家介绍的《MongoDB主从复制和副本集》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

产品心经

产品心经

闫荣 / 机械工业出版社 / 2014-9-30 / 59

产品经理如何才能迅速地、全方位地提升自己的能力,从而打造出让用户尖叫并疯狂爱上的产品?有没有捷径?从成功的、有经验的产品经理的实践真知和智慧中学习是一个很好的途径!本书就是一位拥有近10年产品经验的资深产品经理的实践真知和智慧的结晶,从产品经理核心素养、产品认知、战略与规划、精益开发、需求分析与管理、用户体验、精细运营7大方面,系统梳理了能全面、迅速提升产品经理能力,从而打造出让用户尖叫的产品的5......一起来看看 《产品心经》 这本书的介绍吧!

随机密码生成器
随机密码生成器

多种字符组合密码

MD5 加密
MD5 加密

MD5 加密工具

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器