MongoDB主从复制和副本集

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

内容简介: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主从复制和副本集》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

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

Web Security, Privacy and Commerce, 2nd Edition

Web Security, Privacy and Commerce, 2nd Edition

Simson Garfinkel / O'Reilly Media / 2002-01-15 / USD 44.95

Since the first edition of this classic reference was published, World Wide Web use has exploded and e-commerce has become a daily part of business and personal life. As Web use has grown, so have ......一起来看看 《Web Security, Privacy and Commerce, 2nd Edition》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

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

多种字符组合密码

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具