MongoDB 数据库主从复制架构介绍

2018-10-13 0 By admin

MongoDB 数据库服务的主从复制架构是一中常见的架构方式;如果要实现主从复制至少应该有两个MongoDB实例。
一个作为主节点负责客户端请求,另一个作为从节点负责从主节点映射数据、提供数据备份、客户端读取数据功能等;在生产环境部署时,推荐一主多从模式。

一、MongoDB 主从复制介绍

1.1、MongoDB 数据库主从复制的实现原理

  1. 主节点的操作会被记录为oplog,存储在系统数据库local的集合oplog.$main中,这个集合中的每个文档都代表主节点的一个操作(不包括查询)
  2. 从节点定期从主服务器获取oplog数据,并在本机进行执行
  3. oplog使用的是固定集合,随着操作的逐渐增加,新的文档会逐渐覆盖旧的文档

1.2、MongoDB 使用注意点或缺点

  1. 每个从节点必须知晓其对应的主节点地址
  2. 只允许主节点进行数据更新操作
  3. 主节点宕机服务不可用

1.3、MongoDB 主从复制配置项详解

  1. master:默认为false,当设置为true,则配置当前实例作为主节点。
  2. slave:默认为false,当设置为true,则配置当前实例作为从节点。
  3. source:默认为空,用于从节点;指定从节点的复制来源(主节点的IP+端口)。
  4. only:默认为空,用于从节点;默认复制主节点上所有的数据库;
    通过设置此项指定需要复制的数据库名称
  5. slavedelay:设置从库同步主库的延迟时间,用于从设置,默认为0,单位秒。
  6. autoresync:从节点默认false。是否自动重新同步。
    设置为true,如果落后主节点超过10秒,会强制从节点自动重新同步。
    如果oplogSize太小,此设置可能有问题。如果OPLOG大小不足以存储主节点的变化状态和从节点的状态变化之间的差异,这种情况下强制重新同步是不必要的。
    当设置autoresync选项设置为false,10分钟内从不会进行大于1次的自动重新同步。

二、主从配置示例(一主一从)

2.1、主节点 master.conf配置

dbpath=D:\mongodb\zhucong\master\data
logpath=D:\mongodb\zhucong\master\logs\mongodb.log
port=27017
bind_ip=127.0.0.1
master=true

2.2、从节点 slave.conf配置

dbpath=D:\mongodb\zhucong\slave\data
logpath=D:\mongodb\zhucong\slave\logs\mongodb.log
port=27018
bind_ip=127.0.0.1
master=true
slave=true
source=127.0.0.1:27017

2.3、分别启动两个MongoDB实例

mongod --config D:\mongodb\zhucong\master\master.conf
mongod --config D:\mongodb\zhucong\slave\slave.conf

2.4、查看主节点和从节点状态信息

db.printReplicationInfo(): //查看主节点的信息
db.printSlaveReplicationInfo(): //查看从节点的信息

2.5、常见问题

在SECONDARY查询出发现如下错误:
SECONDARY> show collections;
Sat Aug 4 15:29:00 uncaught exception: error: { "$err" : "not master and slaveok=false", "code" : 13435 }

这是正常的,因为SECONDARY是不允许读写的,如果非要解决,方法如下:
SECONDARY> rs.slaveOk();