mongodb中提供了复制(Replication)机制,通过该机制可以帮助我们很容易实现读写分离方案,并支持灾难恢复(服务器断电)等意外情况下 的数据安全。
在老版本(1.6)中,Mongo提供了两种方式的复制:master-slave及replica pair模式(注:mongodb最新支持的replset复制集方式可看成是pair的升级版,它解决pair只能在两个结点间同步的限制,支持多个结 点同步且支持主从宕机时的自动切换, 在1.6版以后提供)。
利用前者,我们可以实现读写分离(主从复制模式),后者则支持当主服务器断电情况下的集群中其它slave自动接管,并升级为主服务器。 并且如果后来的也出错了,那么master状态将会转回给第一个服务器(之前宕机但后来又恢复运行的服务器)。
同时mongodb支持使用安全认证(enable)。不管哪种replicate方式,只要在master/slave中创建一个能为各个 database认识的用户名/密码即可。其认证过程如下:
下面介绍分别介绍一下这两种复制的配置方式:
Master-Slave(主从)模 式:
一个server可以同时为master和slave。一个slave可以有多个master(不推荐,可能会产生不可预期的结果)。
配置选项:
-- master 以主服务器方式启动
-- slave 以从服务器方式启动
-- autoresync :自动重新sync,因为该操作会copy 主服务器上的所有document,比较耗时,在10分钟内最多只会进行一次。
-- oplogSize :指定master上用于存放更改的数据量,如果不指定,在32位机上最少为 50M,在64位机上最少为 1G,最大为磁盘空间的5%。
-- source 主服务器地址(与--slave组合使用)
-- only 仅限于同步指定数据库(下面示例为test库)
-- slavedelay 同步延时
下面是本人在本地为了测试方便所使用的配置参数
Master: IP->10.0.1.103
Slave: IP->10.0.4.210
Replica pairs模式
以这种方式启动后,数据库会自动协商谁是master谁是slave。一旦一个数据库服务器断电,另一个会自动接管,并从那一刻起起为master。万一 另一个将来也出错了,那么master状态将会转回给第一个服务器。以这种复制方式启动mongod的命令如下:
配置选项:
mongod --pairwith <remoteserver> --arbiter <arbiterserver>
-- pairwith : remoteserver是pair里的另一个server
-- arbiter : arbiterserv
在老版本(1.6)中,Mongo提供了两种方式的复制:master-slave及replica pair模式(注:mongodb最新支持的replset复制集方式可看成是pair的升级版,它解决pair只能在两个结点间同步的限制,支持多个结 点同步且支持主从宕机时的自动切换, 在1.6版以后提供)。
利用前者,我们可以实现读写分离(主从复制模式),后者则支持当主服务器断电情况下的集群中其它slave自动接管,并升级为主服务器。 并且如果后来的也出错了,那么master状态将会转回给第一个服务器(之前宕机但后来又恢复运行的服务器)。
同时mongodb支持使用安全认证(enable)。不管哪种replicate方式,只要在master/slave中创建一个能为各个 database认识的用户名/密码即可。其认证过程如下:
slave先在local.system.users里查找 一个名为"repl"的用户,找到后用它去认证master。如果"repl"用户没有找到,则使用local.system.users中的第一个用户 去认证。local数据库和admin数据库一样,local中的用户可以访问整个db server。
下面介绍分别介绍一下这两种复制的配置方式:
Master-Slave(主从)模 式:
一个server可以同时为master和slave。一个slave可以有多个master(不推荐,可能会产生不可预期的结果)。
配置选项:
-- master 以主服务器方式启动
-- slave 以从服务器方式启动
-- autoresync :自动重新sync,因为该操作会copy 主服务器上的所有document,比较耗时,在10分钟内最多只会进行一次。
-- oplogSize :指定master上用于存放更改的数据量,如果不指定,在32位机上最少为 50M,在64位机上最少为 1G,最大为磁盘空间的5%。
-- source 主服务器地址(与--slave组合使用)
-- only 仅限于同步指定数据库(下面示例为test库)
-- slavedelay 同步延时
下面是本人在本地为了测试方便所使用的配置参数
Master: IP->10.0.1.103
mongod --dbpath=d:/mongodb/db --master --oplogSize 64
mongod --dbpath=d:/mongodb/db --slave --source 10.0.1.103:27017 --only test --slavedelay 100
补充:受限的master-master复制,这种模式对插入、查询及根据_id进行的删除操作都是安全的。但对同一对象的并发更新无法进行。 Mongo 不支持完全的master-master复制,通常情况下不推荐使用master-master模式,但在一些特定的情况下master- master也可用。master-master也只支持最终一致性。配置master-master只需运行mongod时同时加上--master选 项和 --slave选项。如下:
mongod --dbpath=d:/mongodb/db --port 27017 --master --slave --source localhost:27018
mongod --dbpath=d:/mongodb/db --port 27018 --master --slave --source localhost:27017
mongod --dbpath=d:/mongodb/db --port 27017 --master --slave --source localhost:27018
mongod --dbpath=d:/mongodb/db --port 27018 --master --slave --source localhost:27017
Replica pairs模式
以这种方式启动后,数据库会自动协商谁是master谁是slave。一旦一个数据库服务器断电,另一个会自动接管,并从那一刻起起为master。万一 另一个将来也出错了,那么master状态将会转回给第一个服务器。以这种复制方式启动mongod的命令如下:
配置选项:
mongod --pairwith <remoteserver> --arbiter <arbiterserver>
-- pairwith : remoteserver是pair里的另一个server
-- arbiter : arbiterserv