MongoDB系列之三(副本集配置 持续更新)

来源:互联网 发布:ubuntu chrome火狐 编辑:程序博客网 时间:2024/05/16 10:56

MongoDB系列之三(副本集配置 持续更新)

今天我测试了一下MongoDB的副本集的配置。

首先从概念上说一下MongoDB副本集和主从复制的区别。其实副本集(Replica Set)是主从复制的高级形式。高级在哪里呢?主动复制实现了数据备份+读扩展,但是master一旦down掉,需要手动启动slave。副本集在此基础上实现了备份自动重启的功能,也就是某一台slave会挺身而出,担当起master的职责。所以有三个角色,master(Primary),slave(Secondary),还有仲裁服务器。

我的测试环境和上次基本相同:

一台master(primary):mmaster 192.168.42.132

两台slave(secondary):mslave1 192.168.42.134 mslave2 192.168.42.135

全是ubuntu 12.10 server 版 OS, MongoDB 2.4.3


配置和实现方法:

1 配置/etc/hosts,把上面三台虚拟机的DNS信息写到里面

2 配置/etc/mongodb.conf,需要修改的东西真是不多,最主要的是屏蔽掉master slave这部分东西,也就是主从复制里面的修改,然后配置replSet=true,有没有空格无所谓,三台虚拟机都只这么配置,可见我们并没有指定谁是master。

3 先把master跑起来。进入你想成为master的那台机器,重启mongod,然后进入该机器mongo的客户端,进行一下很简单的设置。

rsconf = {           _id: "rs0",           members: [                      {                       _id: 0,                       host: "<hostname>:27017"                      }                    ]         }
rs.initiate( rsconf )
这是构建一个配置的对象,然后初始化一下。第一个ID是副本集的名字,member里面是指定了成员机器的id和网络位置。这里先把master添加进来就好了,下面可以一台一台的添加其他的成员。注意要稍等一段时间,MongoDB需要时间来转换他的状态。该机器被默认为了master(primary)。

4 再把slave加进我们的副本集里面。现在master里面add一个slave

rs.add("<hostname>:27017")
然后到这台slave所在的虚拟机上面去,重启MongoDB,进入Mongo客户端,一分钟后你会发现slave变成了Secondary,并且同步了数据。但是,事情还没有完。你测试会发现,不能读取数据,虽然数据同步了。没关系,这这MongoDB slave还需要你确认一下,只要输入

rs.slaveOk()
在测试你就会发现可以读取数据了。

5 添加仲裁服务器。这个我是删除了一种一台slave2,然后通过命令rs.addArb("host:port")添加上仲裁服务器,然后测试的,不需要其他配置。当master被关掉后,能够实现转换,测试成功。注意,根据我看到的资料,没有仲裁是不能实现自动转换的,仲裁服务器参考资料:http://docs.mongodb.org/manual/tutorial/add-replica-set-arbiter/

以上就是我的测试过程,发现网上很多资料都不靠谱,所以大家谨慎使用资料。我的参考资料是

http://docs.mongodb.org/manual/tutorial/deploy-replica-set/

也就是英文的官方网站资料,10gen的资料做的还是很准确的,所以建议大家看这个,很快可以上手。

最后上个图,可以看到我的副本集状态:

PS1:有人可能会问建立Replica Set之后,万一出现Primary宕机,IP地址的问题如何解决。没有问题,读者可以查阅下资料,MongoDB的API已经提供了解决的方法。我使用的libmongo-client是c语言的API,里面提供的mongo_sync_reconnect()函数,自动找到新的Primary的IP,进行重连。

PS2:注意配置oplogSize这个参数,以M为单位,否则可能出现oplog.rs预分配空间过大的问题。


0 0
原创粉丝点击