一、主从复制

1、主从复制是一个简单的数据库同步备份的集群技术,如下图:要明确的知道主服务器与从服务器,且从服务器要明确的知道主服务器的存在。

mongodb同步原理 mongodb主从同步速度_mongodb同步原理

2、在MongoDB中在启动数据库服务时,可以用master参数来指定主服务器,如下图:bind_ip是主数据库所在服务器IP

mongodb同步原理 mongodb主从同步速度_mongodb同步原理_02

而用slave参数可以指定从服务器,如下图:source参数用于指定主服务器

mongodb同步原理 mongodb主从同步速度_数据库_03

以上两个数据库的关系如下图:这样过后,在主数据库中的操作就会立马在从数据库中进行复制。

mongodb同步原理 mongodb主从同步速度_数据库_04

3、常用配置参数

  • --only:用于配置从服务器,指定复制某个数据库。默认是复制全部数据库。
  • --slavedelay:用于配置从服务器,指定从主服务器同步数据的延迟(单位是秒)。
  • --fastsync:用于配置从服务器,把内存中的数据马上写回主服务器数据库,然后从服务器进行复制。
  • --autoresync:用于配置从服务器,如果从服务器是在主服务器运行一端时间之后才挂上来的,那么指定了此项参数后,从服务器会同步挂接上来之前那段时间主服务器中的数据;如果没有此参数,那么只会从当前挂接时间进行主从复制。
  • --oplogSize:用于配置主服务器,配置主服务器的日志大小。日志会把主服务器的操作都记录下来,从服务器从主服务器的日志中读取数据,然后在自己的数据库中操作一次来完成主从复制。主服务器数据库操作记录存储在local数据库的oplog.$main集合中,它的每一个文档都会保存一个服务器的操作。

4、利用shell动态添加和删除从服务器

如下图所示,这是在上面那台从服务器中shell界面的操作结果,可以得知从服务器关于主服务器的信息全部保存在从服务器的local数据库的sources集合中。所以只要对该集合进行操作就可以动态的配置从服务器。

mongodb同步原理 mongodb主从同步速度_数据库_05

删除这台从服务器配置的主服务器,如下图:

mongodb同步原理 mongodb主从同步速度_mongodb同步原理_06

为从服务器挂接主服务器,如下图:

mongodb同步原理 mongodb主从同步速度_副本集_07

二、副本集

1、如下图所示有一个数据库集群,集群中有三台数据库服务器,一台活跃服务器和两台备份服务器。当活跃服务器A发生故障时,会根据权重算法从备份服务器B和C中选出B作为新的活跃服务器,而当A恢复时当成备份服务器,继续加入到整个数据库集群中工作,这就是MongoDB的副本集。

mongodb同步原理 mongodb主从同步速度_服务器_08

2、配置一个副本集

首先采用如下图的三个配置配置启动三台数据库服务器,三台服务器相互指向下一个服务器形成一个环。

mongodb同步原理 mongodb主从同步速度_mongodb同步原理_09

然后就需要初始化副本集。进入到这三台数据库服务器中任何一个的admin数据库,执行如下图的操作来初始化副本集:这里没有设置这三台服务器的权重,MonggoDB推选活跃服务器的策略是随机的。

mongodb同步原理 mongodb主从同步速度_数据库_10

分别进入到这三台服务器的shell界面,如下:可以发现端口号为3333的服务器被推选成了活跃服务器,而其它两台就是备份服务器

mongodb同步原理 mongodb主从同步速度_副本集_11

在活跃服务器shell中可以使用“rs.status()”来查看副本集的状态。

此时如果把端口3333的活跃服务器关掉后,如下图所示:端口为2222的服务器就成为了活跃服务器。如果又把端口为3333的服务器启动,可以发现端口3333的服务器就成为了备份服务器。

mongodb同步原理 mongodb主从同步速度_服务器_12

3、节点

  • standard:常规节点,参与投票,有可能成为活跃节点。如上的三台服务器都没有设置此参数,默认就是常规节点。
  • passive:副本节点,参与投票,但不能成为活跃节点。
  • arbiter:仲裁节点,只是参与投票,不复制节点,也不能成为活跃节点。

4、高级参数

  • priority:设置权重。可设置0到1000之间,0代表的是副本节点,1到1000是常规节点。
  • arbiterOnly:true表示设置仲裁节点。
  • 用法:在前面的初始化副本集中,只设置了_id和host两个key,此时就可以加上priority与arbiterOnly等key来初始化副本集。

5、优先级

如下图所示,本来A是活跃节点,B和C为副本集,B节点是在1秒之前进行复制更新的,C节点是在5秒之前进行复制更新的,A宕机之后会自动选择B为活跃节点(复制更新时间离宕机时间最近)。这种优先级优先于权重,会先考虑时间的优先级。

mongodb同步原理 mongodb主从同步速度_服务器_13

6、读写分离操作

注意:默认情况下非活跃服务器(副本节点)是不能进行数据库读操作的。如下图:

mongodb同步原理 mongodb主从同步速度_mongodb同步原理_14

如果要设置副本节点也可以进行读操作,那么可以设置slaveOkay参数为true。但是此属性在shell中无法完成,这个特性是被写到MongoDB的高级驱动程序中的。