MongoDB的主从复制和副本集
mongoDB的两个特性主从复制和副本集,实现了数据的同步备份
一、主从复制
主从复制是一个简单的数据库同步备份的集群技术.例如主服务器宕机了,可以直接使用从服务器,主服务器恢复后在进行同步,保证了业务的连续性

注意点:
- 主服务器只有一台
- 从服务器需要知道自己的数据源,也就是对应的主服务器
- --master确定主服务器,--slave和--source来控制从服务器
1.举例:
1).主服务器的端口是60000
2).从服务器的端口是60001
如何配置主从复制?
主服务器的配置:
dbpath = D:\MongoDBMSCopy\Master 主数据库地址
port = 60000 主数据库端口号
bind_ip = 127.0.0.1 主数据库所在服务器
master = true 确定我是主服务器
从服务器的配置
dbpath = D:\MongoDBMSCopy\Slave 从数据库地址
port = 60001 从数据库端口号
bind_ip = 127.0.0.1 从数据库所在服务器
source = 127.0.0.1:60000 确定我数据库端口
slave = true 确定自己是从服务器
配置文件写好之后,就可以通过命令来启动主从服务器了,
如下:
启动主服务器
C:\Windows\system32>mongod --config D:\MongoDBMSCopy\Master\Master.conf
启动从服务器
C:\Windows\system32>mongod --config D:\MongoDBMSCopy\Slave\slave.conf
验证是否进行了复制
①打开cmd,连接主服务器,并建立一个Students数据库,插入一个文档名为Students

查看一下数据
> db.students.find()
{ "_id" : 1, "name" : "BigOrange", "age" : 25 }
②打开cmd连接从服务器

如上图所示,证明已经进行了复制
2.主从复制的其他设置项
--only 从节点→指定复制某个数据库,默认是复制全部数据库
--slavedelay 从节点→设置主数据库同步数据的延迟(单位是秒)
--fastsync 从节点→以主数据库的节点快照为节点启动从数据库
--autoresync 从节点→如果不同步则从新同步数据库
--oplogSize 主节点→设置oplog的大小(主节点操作记录存储到local的oplog中)
3.利用shell动态添加和删除从节点
在从数据库中的local数据库会多一个sources文档,它保存着主服务器的信息

如何进行动态添加从节点呢,和正常的添加数据的操作一样,直接通过insert插入remove删除
挂接主节点:
db.sources.insert({“host”:”127.0.0.1:60000”})
删除已经挂接的主节点:
db.sources.remove({“host”:”127.0.0.1:60000”})
二、副本集

第一张图表明A是活跃的B和C是用于备份的
第二张图当A出现了故障,这时候集群根据权重算法推选出B为活跃的数据库
第三张图当A恢复后他自动又会变为备份数据库
例:如何配置一个副本集服务器集群
1.假如有上面ABC三台服务器,如何进行配置呢,同样需要修改配置文件
对于A服务器:
dbpath = D:\MongoDBCopy\A\MongoDB_A.conf #A的配置
port=11111 #端口号
bind_ip=127.0.0.1 #IP地址
replSet = child/127.0.0.1:22222 #设定同伴,这里是B
对于B服务器:
dbpath = D:\MongoDBCopy\B\MongoDB_B.conf #A的配置
port=22222 #端口号
bind_ip=127.0.0.1 #IP地址
replSet = child/127.0.0.1:33333 #设定同伴,这里是C
对于C服务器:
dbpath = D:\MongoDBCopy\C\MongoDB_C.conf #A的配置
port=33333 #端口号
bind_ip=127.0.0.1 #IP地址
replSet = child/127.0.0.1:11111 #设定同伴,这里是A
2.初始化副本集
使用shell进入一台服务器,然后设定初始化副本集
use admin
db.runCommand({"replSetInitiate":
{
"_id":'child',
"members":[{
"_id":,
"host":"127.0.0.1:11111"
},{
"_id":,
"host":"127.0.0.1:22222"
},{
"_id":,
"host":"127.0.0.1:33333"
}]
}
})
哪个节点成为活跃节点,这时候是随机的,如果想要更准确的设置,需要设置权重
3.查看副本集状态
rs.status()

上图可以看到,端口为11111的服务器被选择为活跃服务器
注意:
备份点不能进行查询操作的,只有活跃点才能进行查询操作
①在活跃服务器上添加一个数据库并添加一个文档
child:PRIMARY> show dbs
admin (empty)
local 4.076GB
child:PRIMARY> use Students
switched to db Students
child:PRIMARY> db.student.insert({name:"BigOrange",age:25})
WriteResult({ "nInserted" : 1 })
child:PRIMARY> db.student.find()
{ "_id" : ObjectId("56fa6b9159b5751566c1c37f"), "name" : "BigOrange", "age" : 25
}
child:PRIMARY>
②切换到其中一个备份服务器,发现不能进行查询
C:\Windows\system32>mongo 127.0.0.1:22222/test
MongoDB shell version: 2.6.5
connecting to: 127.0.0.1:22222/test
child:SECONDARY> show dbs
Students 0.078GB
admin (empty)
local 2.077GB
child:SECONDARY> use Students
switched to db Students
child:SECONDARY> show collections
2016-03-29T19:50:09.064+0800 error: { "$err" : "not master and slaveOk=false", "
code" : 13435 } at src/mongo/shell/query.js:131
child:SECONDARY> db.student.find()
error: { "$err" : "not master and slaveOk=false", "code" : 13435 }
child:SECONDARY>
补充:
节点和初始化高级参数
standard 常规节点:参与投票有可能成为活跃节点
passive 副本节点:参与投票,但是不能成为活跃节点
arbiter 仲裁节点:只是参与投票不复制节点也不能成为活跃节点
高级参数
Priority 0到1000之间 ,0代表是副本节点 ,1到1000是常规节点
arbiterOnly : true 仲裁节点
用法
把上面A设置为仲裁节点
其他的不变,在初始化的时候,写成如下
use admin
db.runCommand({"replSetInitiate":
{
"_id":'child',
"members":[{
"_id":,
"host":"127.0.0.1:11111",
arbiterOnly : true
},{
"_id":,
"host":"127.0.0.1:22222",
},{
"_id":,
"host":"127.0.0.1:33333"
}]
}
})

其他使用可以参考如下
http://blog.itpub.net/29254281/viewspace-1176553/
4.读写分离操作→扩展读
设置读写分离
slaveOkay : true
MongoDB的主从复制和副本集的更多相关文章
- MongoDB之主从复制和副本集(四)
简单主从复制 采用一主一从或一主多从的布署模式,可以将读写分离开来,提高数据库的可用性,不过mongodb的主从模式并不能在主节点崩溃后,从节点替换主节点的工作,一般可以在开发阶段使用. 实现步骤 设 ...
- MongoDB主从复制和副本集
MongoDB有主从复制和副本集两种主从复制模式,主从复制最大的问题就是无法自动故障转移,MongoDB副本集解决了主从模式无法自动故障转义的特点,因此是复制的首选.对于简单的主从复制无法自动故障转移 ...
- MongoDB 删除,添加副本集,并修改副本集IP等信息
MongoDB 删除,添加副本集,并修改副本集IP等信息 添加副本,在登录到主节点下输入 rs.add("ip:port"); 删除副本 rs.remove("ip:po ...
- MongoDB 带访问控制的副本集部署
当你需要用到一个MongoDB 副本集集群,用于开发测试时, 可以通过下面的步骤简单完成. 版本及环境 MongoDB4.4 Centos6.5 一. 下载安装 MongoDB Server 及 ...
- 8.MongoDB系列之创建副本集(一)
1. 复制简介 在MongoDB中,创建副本集后就可以使用复制功能了,副本集是一组服务器,其中一个是用于处理写操作的主节点,还有多个用于保存主节点的数据副本的从节点,如果主节点崩溃了,则从节点会从中选 ...
- Mongodb主从复制 及 副本集+分片集群梳理
转载努力哥原文,原文连接https://www.cnblogs.com/nulige/p/7613721.html 介绍了Mongodb的安装使用,在 MongoDB 中,有两种数据冗余方式,一种 是 ...
- MongoDB 3.0 常见集群的搭建(主从复制,副本集,分片....)
一.mongodb主从复制配置 主从复制是mongodb最常用的复制方式,也是一个简单的数据库同步备份的集群技术,这种方式很灵活.可用于备份,故障恢复,读扩展等. 最基本的设置方式就是建立一个主节 ...
- MongoDB 学习笔记(七):主从复制与副本集
一.主从复制 1.主从复制是一个简单的数据库同步备份的集群技术,如下图:要明确的知道主服务器与从服务器,且从服务器要明确的知道主服务器的存在. 2.在MongoDB中在启动数据库服务时,可以用mast ...
- Mongodb 主从复制与副本集实验
1.实验主从复制,并验证复制成功,抓图实验过程 Step1:创建相应的目录 Mkdir -p ./dbs/master Mkdir -p ./dbs/slave Step2:开启主服务 ./bin/ ...
随机推荐
- adb pull命令复制android数据库文件.db到电脑
1.win+r cmd进入命令行 2.cd 进入[sdk]/platform-tools目录下 3.执行下面命令行,复制xxx.db到F:/dest adb pull /data/data/[pack ...
- Android实例-自定义程序名称、图标、全屏和可旋转方向(XE8+小米2)
1.自定义程序名称Project->Options->Version Info->label(改成需要显示的中文名即可) ,但是需要安装到安卓手机才可以显示. 2.全屏显示Proje ...
- 配dump文件
ulimit -c unlimited echo 'ulimit -c unlimited' >>/etc/profile
- HTTP笔记:URI与URL
URI与URL 简单理解是这样的:理解URI和URL的区别,我们引入URN这个概念.URI = Universal Resource Identifier 统一资源标志符URL = Universal ...
- Python中raw字符串与多行字符串
如果一个字符串包含很多需要转义的字符,对每一个字符都进行转义会很麻烦.为了避免这种情况,我们可以在字符串前面加个前缀r ,表示这是一个 raw 字符串,里面的字符就不需要转义了.例如: r'\(~_~ ...
- MSSQLSERVER数据库- 配置数据库邮件配置的操作过程
还是第一次发现数据库可以发邮件.查了一下百度,试了一下,发现可以. 1.简单了解数据库邮件的概念和使用的传输协议及系统体系: 数据库邮件是从 SQL Server 数据库引擎中发送电子邮件的企业解决方 ...
- SQLite数据库入门教程
SQLite数据库入门教程 SQLite 是一个开源的嵌入式关系数据库,实现自包容.零配置.支持事务的SQL数据库引擎. 其特点是高度便携.使用方便.结构紧凑.高效.可靠. 与其他数据库管理系统不同, ...
- 剑指OFFER之顺时针打印矩阵(九度OJ1391)
题目描述: 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2 ...
- mysql之union
今天来写写union的用法及一些需要注意的. union:联合的意思,即把两次或多次查询结果合并起来. 要求:两次查询的列数必须一致 推荐:列的类型可以不一样,但推荐查询的每一列,想对应的类型以一样 ...
- java反射快速入门(一)
本文会从以下几个方面讲起 ① 反射的简单解释 ② java反射的API接口 及 demo ③ 反射的优缺点.应用场景 一.什么是反射? java反射:在程序运行中动态获取类的信息,及动态调用对象的方法 ...