【MongoDB】windows平台搭建Mongo数据库复制集(相似集群)(三)

关于windows平台搭建Mongo数据库复制集这个话题,我已经在前面写了两篇博客

第一篇: 怎样在windows平台搭建Mongo数据库复制集 

第二篇: 数据同步和故障自适应測试

在本篇里面,咱们重点总结一下复制集,以及分析一下它的工作原理

一、常见场景 

应用程序和数据库之间的网络连接丢失 

计划停机、断电、数据库服务硬盘故障等等

复制能够进行故障转移,复制能让你在副本间均衡读负载,保证复制节点与主节点保持同步

二、工作原理 

副本集依赖于两个基础机制:oplog和“心跳”(heartbeat).oplog让数据的复制成为可能,而“心跳”则监控健康情况并出发故障转移;

2.1 关于oplog 

oplog是MongoDB复制的关键,oplog是一个固定集合,位于每一个复制节点的local数据库中,记录了对数据库的全部变更,每次client向主节点写入数据,就会自己主动向主节点的oplog里加入爱一条记录,当中博客了足够的信息来再现数据。

一旦写操作被拷贝到某个从节点上。从节点的oplog也会保存一条记录。

local数据库里保存了全部的副本集元数据和oplog,由于本身不能被复制。



那我们具体在看oplog


在此注意,每一个从节点都有一份自己的oplog,从节点使用长轮询的方式马上应用来自主节点oplog的新条目。假设丛节点在主节点的oplog中找不到自己要同步的点。那么就永久停止复制。

这是会在日志中有例如以下异常:

replcation data too stale, halting

caught syncException 

调整oplog的大小,利用命令db.getReplicationInfo()能够查看分配了多少oplog空间。同一时候利用例如以下命令能够改变默认oplog大小

mongod.exe --replSet myapp --oplogSize 1024 

2.2 心跳检測以及故障转移

副本集的心跳检測有助于选举和故障转移。

默认情况下,每一个副本集成员每隔2s ping一次其它成员。这样一来系统就能够弄清自己的健康状况了。执行rs.status()也能够看到健康状态。

注意:在三个节点中。假设两个从节点都被杀掉了,在主节点的log会多例如以下一句话:


replSet can't see a majority of the set, 

replSet Secondary 

意思是没有多数节点。主节点就把自己降级为从节点;

三、管理

因为副本集存在很多潜在的复杂配置项,接下来我们具体介绍这些复杂配置项目;

3.1 配置细节

能够用rs.initiate()和rs.add()方法初始化副本集合。

利用config.members.push({})添加节点;




其它的一些方法:


3.2 故障转移与恢复

恢复是在故障后讲副本集还原到原始状态的过程。有两大类故障须要处理。

第一类就是包括全部的无损故障,直接重新启动服务就好。

另外一种是明白故障。主要是数据文件损坏等等,非正常关闭mongodb服务,假设不更改主机名称和port号则又一次运行数据目录,启动后数据后同步过来。假设改动属性。则要用rs.reconfig();


3.3 部署策略

副本集最多包括12个节点,提供自己主动故障转移的最小副本集合配置就是先前样例中。

包括两个副本和一个仲裁节点。在生产环境中。仲裁机节点能够执行在应用server上,而副本则执行在自己的机器上。对于多数环境而言。这样配置经济又高校




posted @ 2017-06-08 09:42  yxysuanfa  阅读(284)  评论(0编辑  收藏  举报