MongoDB的Replication简单介绍

    技术2022-05-20  29

     

    MongoDB的Replication简单介绍

    1. 什么是Replication

    数据复制是为了使数据得到最大的可用性,避免单点故障的发生,MongoDB支持在服务器之间进行数据的异步复制,来满足数据的最终一致性。但是同一时刻只有一台服务器是可以写的。当只有一台master时,数据的强一致性就可以得到保障。但当用户从slaves上去读数据时,这里只能保障数据的最终一致性。目前MongoDB提供了三种Replication方式,Matser/Matser, Matser/Slave,Replica Sets

     

     

    注意:

    如果你使用的是v1.6版本以下的MongoDB,你可能使用前两种模式,第三种模式在v1.6.0版本中才提供。另外,v1.6.0版本的Replic Sets还不支持--auth这个参数,不过在v1.7.0版本中就提供了。

     

    2. Replica Sets介绍与配置

    Replica sets是一种结合了Master/Slave模式与自动数据容错、自动恢复的综合体。Replica sets也是"Replica Pairs version 2"。

    2.1 特点

    在集群中支持1-7台服务器自动数据容错与恢复对数据中心敏感对多个slave的支持

    2.2 简单配置

    一个Replica set是一组mongod节点的集成,每个节点上的数据都是冗余的,以此来保证数据的可用性。

    一般配置一个两步,启动Replica set集合中的每一个节点,再对其建立关系。这里我们用三个节点来做

     

    建立数据库目录与启动服务:

    mkdir -p /data/r0 mkdir -p /data/r1 mkdir -p /data/r2 mongod --replSet foo --port 27017 --dbpath /data/r0 mongod --replSet foo --port 27017 --dbpath /data/r1 mongod --replSet foo --port 27017 --dbpath /data/r2  

    建立相应的关系:

    这时你要登陆到其中的一个节点上去,运行如下命令

    mongo localhost:27017 [kyle@arete ~$]$ mongo localhost:27017 MongoDB shell version: 1.5.7 connecting to: localhost:27017/test > config = {_id: 'foo', members: [ {_id: 0, host: 'localhost:27017'}, {_id: 1, host: 'localhost:27018'}, {_id: 2, host: 'localhost:27019'}] } > rs.initiate(config); { "info" : "Config now saved locally. Should come online in about a minute.", "ok" : 1 }  

    你可以用如下命令显示其状态:

    > rs.status() { "set" : "foo", "date" : "Mon Aug 02 2010 11:39:08 GMT-0400 (EDT)", "myState" : 1, "members" : [ { "name" : "arete.local:27017", "self" : true, }, { "name" : "localhost:27019", "health" : 1, "uptime" : 101, "lastHeartbeat" : "Mon Aug 02 2010 11:39:07 GMT-0400", }, { "name" : "localhost:27018", "health" : 1, "uptime" : 107, "lastHeartbeat" : "Mon Aug 02 2010 11:39:07 GMT-0400", } ], "ok" : 1 } 

    2.3 动态加入节点

    打开一个MongoDB服务

    $ ./mongod --replSet foo 

    登陆到已经存在的Replica Sets的主节点上去,运行如下命令

    $ ./mongo MongoDB shell version: ... connecting to: test > rs.add("broadway:27017"); { "ok" : 1 } 

    添加完以后,它会运行相应的数据同步操作。

     

    3. Master/Slave的介绍与配置

    这是一种最普通的数据复制方式,一般要启动两个服务,一个是Master,另一个是Slave

    3.1 启动方法

    $ bin/mongod --master [--dbpath /data/masterdb/] $ bin/mongod --slave --source <masterhostname>[:<port>] [--dbpath /data/slavedb/] 

    其中要注意的是Master有一个参数叫--oplogSize,它是指定编辑日志的大小,这个日志是用来对slave进行数据同步用的,默认是磁盘的5%。

     

    4. 两种复制方式的区别

    Replica Sets主要是提供一种节点出故障后的自动选举功能,就是当这个set中的primary故障后,它会自动选举出一个节点做为primary,而不是整个set变成只读的。

    replica set可以通过如下配置方式来模拟Master/Slave模式

    $ # run mongod instances with "--replSet mysetname" parameter $ # then in the shell: $ mongo --host M > cfg = { > _id : 'mysetname', > members : [ > { _id : 0, host : 'M', priority : 1 }, > { _id : 1, host : 'S', priority : 0, votes : 0 } > ] > }; > rs.initiate(cfg); 

     

    5. 参考

    http://www.mongodb.org/display/DOCS/Replica+Sets

    http://www.mongodb.org/display/DOCS/Replica+Set+Tutorial

    http://www.mongodb.org/display/DOCS/Master+Slave

     


    最新回复(0)