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

原文连接:【MongoDB】windows平台搭建Mongo数据库复制集(相似集群)(一)html

Replica  Sets(复制集)是在mongodDB1.6版本开始新增的功能,它能够实现故障自动切换和自动修复功能成员节点的功能,各个DB之间的数据彻底一致,大大下降了单点故障的风险。 mongodb

【】数据库

 

以上图示是三个节点的Replica Set架构。该图来源于红丸编写的《Mongodb管理与开发精要》这本书。从上图能够看出,结构相似与一个集群,其实彻底能够当作一个集群。由于它确实和集群实现的做用是相同的。 windows

1、部署Replica Sets. 

接下来显示如何在一台服务器上面演示部署3个节点的Replica Sets 服务器

 

2、启动Replica服务

   分别打开三个命令窗口,而后分别执行下面三句话。网络

 

[html]  view plain  copy
 
 在CODE上查看代码片派生到个人代码片
  1. mongod.exe  --replSet rs1 --keyFile "D:\Program Files\mongodb\data\replica\key\r0" --port 28010 --dbpath "D:\Program Files\mongodb\data\replica\data\r0" --logpath "D:\Program Files\mongodb\data\replica\log\r0.log" --logappend  
  2.   
  3.   
  4. mongod.exe  --replSet rs1 --keyFile "D:\Program Files\mongodb\data\replica\key\r1" --port 28011 --dbpath "D:\Program Files\mongodb\data\replica\data\r1" --logpath "D:\Program Files\mongodb\data\replica\log\r1.log" --logappend  
  5.   
  6. cd /d D:\Program Files\mongodb\bin  
  7.   
  8.   
  9. mongod.exe  --replSet rs1 --keyFile "D:\Program Files\mongodb\data\replica\key\r2" --port 28012 --dbpath "D:\Program Files\mongodb\data\replica\data\r2" --logpath "D:\Program Files\mongodb\data\replica\log\r2.log" --logappend  

 

 



3、登陆客户端,初始化Replica Sets环境

 

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

在上篇博客中,咱们主要阐述了在windows平台下如何搭建mongodb复制集。详细博客地址:架构

因为篇幅有限在上篇没有对结果进行验证,在本篇博客中咱们主要进行测试:app

经过rs.status()命令咱们能够查询到各个节点运行正常。测试

 

1、数据同步测试

在280十一、28012端口上进行插入:spa

 

 

查看缘由:网上找到答案

首先这是正常的,由于SECONDARY是不容许读写的, 在写多读少的应用中,使用Replica Sets来实现读写分离。经过在链接时指定或者在主库指定slaveOk,由Secondary来分担读的压力,Primary只承担写操做。对于replica set 中的secondary 节点默认是不可读的。

相详细请看:http://stackoverflow.com/questions/8990158/mongdodb-replicates-and-error-err-not-master-and-slaveok-false-code

 

2、故障自适应测试

 

当检测时主库中止心跳了后,28012把本身选举为主库,请看以下:

28012上面就能够进行插入了:

28011上面如今仍是不能插入

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

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

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

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

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

1、常见场景 

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

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

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

2、工做原理 

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

2.1 关于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大小

 

[html]  view plain  copy
 
 在CODE上查看代码片派生到个人代码片
  1. 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、管理

因为副本集存在许多潜在的复杂配置项,接下来咱们详细介绍这些复杂配置项目;

3.1 配置细节

能够用rs.initiate()和rs.add()方法初始化副本集合。利用config.members.push({})增长节点;
 
 
其余的一些方法:
 

3.2 故障转移与恢复

恢复是在故障后讲副本集还原到原始状态的过程。有两大类故障须要处理。第一类就是包含全部的无损故障,直接重启服务就好。第二种是明确故障,主要是数据文件损坏等等,非正常关闭mongodb服务,若是不更改主机名称和端口号则从新执行数据文件夹,启动后数据后同步过来。若是修改属性,则要用rs.reconfig();
 

3.3 部署策略

副本集最多包含12个节点,提供自动故障转移的最小副本集合配置就是先前例子中。包含两个副本和一个仲裁节点。在生产环境中,仲裁机节点能够运行在应用服务器上,而副本则运行在本身的机器上。对于多数环境而言,这样配置经济又高校
相关文章
相关标签/搜索