原文连接:【MongoDB】windows平台搭建Mongo数据库复制集(相似集群)(一)html
Replica Sets(复制集)是在mongodDB1.6版本开始新增的功能,它能够实现故障自动切换和自动修复功能成员节点的功能,各个DB之间的数据彻底一致,大大下降了单点故障的风险。 mongodb
【】数据库
以上图示是三个节点的Replica Set架构。该图来源于红丸编写的《Mongodb管理与开发精要》这本书。从上图能够看出,结构相似与一个集群,其实彻底能够当作一个集群。由于它确实和集群实现的做用是相同的。 windows
接下来显示如何在一台服务器上面演示部署3个节点的Replica Sets 服务器
分别打开三个命令窗口,而后分别执行下面三句话。网络
在上篇博客中,咱们主要阐述了在windows平台下如何搭建mongodb复制集。详细博客地址:架构
因为篇幅有限在上篇没有对结果进行验证,在本篇博客中咱们主要进行测试:app
经过rs.status()命令咱们能够查询到各个节点运行正常。测试
在280十一、28012端口上进行插入:spa
查看缘由:网上找到答案
首先这是正常的,由于SECONDARY是不容许读写的, 在写多读少的应用中,使用Replica Sets来实现读写分离。经过在链接时指定或者在主库指定slaveOk,由Secondary来分担读的压力,Primary只承担写操做。对于replica set 中的secondary 节点默认是不可读的。
当检测时主库中止心跳了后,28012把本身选举为主库,请看以下:
28012上面就能够进行插入了:
28011上面如今仍是不能插入
关于windows平台搭建Mongo数据库复制集这个话题,我已经在前面写了两篇博客
第一篇: 如何在windows平台搭建Mongo数据库复制集
第二篇: 数据同步和故障自适应测试
在本篇里面,我们重点总结一下复制集,以及分析一下它的工做原理
应用程序和数据库之间的网络链接丢失
计划停机、断电、数据库服务硬盘故障等等
复制能够进行故障转移,复制能让你在副本间均衡读负载,保证复制节点与主节点保持同步
副本集依赖于两个基础机制:oplog和“心跳”(heartbeat).oplog让数据的复制成为可能,而“心跳”则监控健康状况并出发故障转移;
oplog是MongoDB复制的关键,oplog是一个固定集合,位于每一个复制节点的local数据库中,记录了对数据库的全部变动,每次客户端向主节点写入数据,就会自动向主节点的oplog里添加爱一条记录,其中博客了足够的信息来再现数据。一旦写操做被复制到某个从节点上,从节点的oplog也会保存一条记录。
local数据库里保存了全部的副本集元数据和oplog,由于自己不能被复制;
那咱们详细在看oplog
在此注意,每一个从节点都有一份本身的oplog,从节点使用长轮询的方式当即应用来自主节点oplog的新条目。若是丛节点在主节点的oplog中找不到本身要同步的点,那么就永久中止复制。这是会在日志中有以下异常:
replcation data too stale, halting
caught syncException
调整oplog的大小,利用命令db.getReplicationInfo()能够查看分配了多少oplog空间,同时利用以下命令能够改变默认oplog大小
副本集的心跳检测有助于选举和故障转移。默认状况下,每一个副本集成员每隔2s ping一次其余成员。这样一来系统就能够弄清本身的健康情况了。运行rs.status()也能够看到健康状态。
注意:在三个节点中,若是两个从节点都被杀掉了,在主节点的log会多以下一句话:
replSet can't see a majority of the set,
replSet Secondary
意思是没有多数节点,主节点就把本身降级为从节点;
因为副本集存在许多潜在的复杂配置项,接下来咱们详细介绍这些复杂配置项目;