MongoDB的Replication简单介绍

1. 什么是Replication

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

replication

注意:

如果你使用的是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://blog.csdn.net/amuseme_lu/article/details/6219422

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

猜你喜欢

转载自san-yun.iteye.com/blog/1703028