阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

MongoDB主从复制和副本集

275次阅读
没有评论

共计 2676 个字符,预计需要花费 7 分钟才能阅读完成。

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 主从复制和副本集MongoDB 主从复制和副本集
(数秒之后)同时发现 rstest:SECONDARY> 变为 rstest:PRIMARY>
MongoDB 主从复制和副本集MongoDB 主从复制和副本集 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) // 初始化配置

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-22发表,共计2676字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中