您的位置:首页 > 数据库 > Mongodb

mongodb3.2副本集配置

2016-10-31 11:39 337 查看
网上的资料太乱了,等弄好了再看官网才发现官网写的最清晰和简洁
推荐官网的副本集配置:https://docs.mongodb.com/manual/tutorial/deploy-replica-set/
引述大神一段总结:http://blog.csdn.net/huwei2003/article/details/40453223

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

环境:win7,MongoDB3.2
副本集优势:副本集实现了备份自动重启的功能,也就是master一旦down掉,无需手动启动slave ,某一台会自动slave挺身而出,担当起master的职责,维持数据库的读写操作
目标:
一台master(primary):master 127.0.0.1:5555
三台slave(secondary):mslave1 127.0.0.1:6666 ; mslave2 127.0.0.1:7777 ; mslave3 192.168.228.134:27017
其中192.168.228.134是我虚拟机win7的地址,都是64位

第一步:基本配置
略过mongodb的安装和基本操作,见我另一篇博文:http://www.cnblogs.com/leskang/p/6000852.html

第二步:设置master服务器
1、手动创建四个服务实例的文件目录,,并配置好各自bin目录的环境变量,我本地的话只要配置一次
127.0.0.1:5555 对应 本机D:\mongodata\5555
127.0.0.1:6666 对应 本机D:\mongodata\6666
127.0.0.1:7777 对应 本机E:\mongodata\7777
192.168.228.134:27017 对应 虚拟机D:/data

2、启动本地127.0.0.1:5555的服务器副本集实例,作为master
cmd打开命令提示符,运行

mongod --dbpath D:\mongodata\5555 --replSet mySet --port 5555


启动服务后,另打开一个命令提示符进行登陆

mongo --port 5555


接着定义变量,运行:

conf = {_id:"mySet",members:[{_id:0,host:"127.0.0.1:5555"}]}


回车
接着运行:

rs.initiate(conf)


回车显示如下:



接着你输入:

db.isMaster()


会显示出你的当前数据库服务实例已经加到副本集中,并且是master,如图:



第三步:启动本地其他的服务,加入到副本集中,即127.0.0.1:5555和127.0.0.1:6666
打开2个命令提示符,分别输入并回车

mongod --dbpath D:\mongodata\6666 --replSet mySet --port 6666
mongod --dbpath E:\mongodata\7777 --replSet mySet --port 7777


另外在本地打开命令提示符,登陆master:

mongo --port 27017


接着添加刚刚那2个服务实例到副本集中,分别输入并回车:

rs.add("127.0.0.1:6666")
rs.add("127.0.0.1:7777")


显示如下:



添加成功了,此时你可以登陆任意机器输入rs.status()查看集合,我登陆的是slave 127.0.0.1:7777
如图:



第四步:添加虚拟机的数据库服务器到副本集中
即192.168.228.134:27017
方法基本同上:到虚拟机中先启动服务,同样运行
mongod --dbpath d:/data --replSet mySet --port 27017
接着回到本机,打开命令提示符,登陆master
mongo --port 27017
同上接着添加虚拟机的服务到副本集中
rs.add("192.168.228.134:27017")
一切ok了
测试:
1 登陆master 插入一些数据,再去slave里看 同样存在,复制成功。
  注意:新建的slave是不能读和写的,当在从服务器上读时会出现errmsg:not master and slaveOk=flase code:13435 错误,需要执行:rs.slaveOk()来开启读功能
2 关闭master的窗口(即停止master服务)后,原来的master无法访问,另外的一个slave变成了master,依然可以正常添加修改数据
3 登录任意服务实例,运行rs.isMaster()可以查看当前服务是否是master,运行rs.status()查看副本群内部情况
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: