分布式文档存储数据库(MongoDB)副本集配置

副本集特征:

  • N 个节点的集群
  • 任何节点可做为主节点
  • 全部写入操做都在主节点上
  • 自动故障转移
  • 自动恢复

 

相关文章:javascript

                                http://www.cnblogs.com/huangxincheng/archive/2012/02/18/2356595.htmlhtml

菜鸟教程MongoDB配置: http://www.runoob.com/mongodb/mongodb-tutorial.htmljava

推荐官网的副本集配置:   https://docs.MongoDB.com/manual/tutorial/deploy-replica-set/mysql

引述大神一段总结:        http://blog.csdn.NET/huwei2003/article/details/40453223spring

{sql

MongoDB的复制至少须要两个节点。其中一个是主节点,负责处理客户端请求,其他的都是从节点,负责复制主节点上的数据。mongodb

从概念上说一下MongoDB副本集主从复制的区别。数据库

其实副本集(Replica Set)是主从复制的高级形式。高级在哪里呢?主动复制实现了数据备份+读扩展,可是master一旦宕机,全部服务将中止,须要手动启动slave。而副本集在此基础上实现了备份自动重启的功能,也就是某一台slave会自告奋勇,担当起master的职责。因此有三个角色,master(Primary),slave(Secondary),还有仲裁服务器。服务器

}测试

下面是我本身的测试过程

环境:win7,MongoDB3.2 

副本集优点:副本集实现了备份自动重启的功能,也就是master一旦down掉,无需手动启动slave ,某一台会自动slave自告奋勇,担当起master的职责,维持数据库的读写操做

目标:

 

一台master(primary):master 192.168.228.1:27017

三台slave(secondary):mslave1 192.168.228.1:27018 ;   mslave2 192.168.228.1:27019 ;  mslave3 192.168.228.134:27017

其中192.168.228.1是本地win7地址,192.168.228.134是我虚拟机win7的地址,都是64位

(我机器和虚拟机用的nat方式互联,全部个人地址192.168.228.1这么恶心的地址    T_T)

 

第一步:基本配置

略过mongodb的安装和基本操做,我之前的文章都写的很清楚,不赘述

http://blog.csdn.Net/rainyspring4540/article/details/52584257

 

第二步:手动建立四个服务实例的文件目录,,并配置好各自bin目录的环境变量

192.168.228.1:27017      对应 本机D:/data/rs27017

192.168.228.1:27018      对应 本机D:/data/rs27018

192.168.228.1:27019      对应 本机D:/data/rs27019

192.168.228.134:27017  对应 虚拟机D:/data

 

第二步:首先启动本地192.168.228.1:27017的服务器副本集实例,做为master

cmd打开命令提示符,运行

 

mongod  --dbpath d:/data/rs27017 --replSet mySet  --port 27017  

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

 

 

mongo --port 27017  

接着定义变量,运行:

 

conf = {_id:"mySet",members:[{_id:0,host:"192.168.228.1:27017"}]}  

回车

 

接着运行初始化:

 

rs.initiate(conf)  

回车显示以下:

 

 

接着你输入(设置主数据库)

 

 

db.isMaster()  

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

 

 

第三步:启动本地其余的服务,加入到副本集中

即192.168.228.1:27018和192.168.228.1:27019

打开2个命令提示符,分别输入并回车

 

 

mongod --dbpath d:/data/rs27018 --replSet mySet --port 27018  

mongod --dbpath d:/data/rs27019 --replSet mySet --port 27019  

 

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

 

 

mongo --port 27017  


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

 

 

rs.add("192.168.228.1:27018")  

rs.add("192.168.228.1:27019")  


显示以下:

 

添加成功了,

此时你能够登录任意机器输入rs.status()查看集合,我登录的是slave  192.168.228.1:27019

如图:

 

第四步:添加虚拟机的数据库服务器到副本集中

即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 我这里配置读写的都是采用默认的,即master是读写,slave只读

4 登陆任意服务实例,运行rs.isMaster()能够查看当前服务是不是master,运行rs.status()查看副本群内部状况

相关文章
相关标签/搜索