NOSQL之Mongodb副本集配置与管理

NOSQL之Mongodb副本集配置与管理

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

一台master(primary):wxseio-web  172.16.2.123
两台slave(secondary):
                      web1 : 172.16.2.109 
                      web2 : 172.16.2.19
全是CentOS6.4-64位, MongoDB 2.4.6


配置和实现方法:

1)、 配置/etc/hosts,把上面三台机器的IP信息写到里面

2)、 配置/usr/local/momgodb/config/mongodb27017.conf,需要修改的东西真是不多,最主要的是屏蔽掉master slave这部分东西,也就是主从复制里面的修改,然后配置replSet=true,有没有空格无所谓,三台虚拟机都只这么配置,可见我们并没有指定谁是master。
port = 27017
logpath = /data/mongodb/27017/mongodb.log
logappend = true
fork = true
dbpath = /data/mongodb/27017
journal = true
replSet = true
rest = true
oplogSize = 64 #单位是M

3)、 先把master跑起来。进入你想成为master的那台机器,重启mongod,然后进入该机器mongo的客户端,进行一下很简单的设置。
rsconf = {
           _id: "true",
           members: [
                      {
                       _id: 0,
                       host: "wxseio-web: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/

猜你喜欢

转载自0001111.iteye.com/blog/2002318