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

一、常见场景

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

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

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

二、工作原理

副本集依赖于两个基础机制: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大小

  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.1 配置细节

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

3.2 故障转移与恢复

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

3.3 部署策略

副本集最多包含12个节点,提供自动故障转移的最小副本集合配置就是先前例子中。包含两个副本和一个仲裁节点。在生产环境中,仲裁机节点可以运行在应用服务器上,而副本则运行在自己的机器上。对于多数环境而言,这样配置经济又高校
 
关于mongodb的副本集的搭建与详解,也可参考:http://blog.csdn.net/mchdba/article/details/51638131

windows平台搭建Mongo数据库复制集(类似集群)(三)的更多相关文章

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

    原文链接:[MongoDB]windows平台搭建Mongo数据库复制集(类似集群)(一) Replica  Sets(复制集)是在mongodDB1.6版本开始新增的功能,它可以实现故障自动切换和自 ...

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

    关于windows平台搭建Mongo数据库复制集这个话题,我已经在前面写了两篇博客 第一篇: 怎样在windows平台搭建Mongo数据库复制集 第二篇: 数据同步和故障自适应測试 在本篇里面,咱们重 ...

  3. windows平台搭建Mongo数据库复制集(类似集群)(一)

    Replica  Sets(复制集)是在mongodDB1.6版本开始新增的功能,它可以实现故障自动切换和自动修复功能成员节点的功能,各个DB之间的数据完全一致,大大降低了单点故障的风险. [] 以上 ...

  4. windows平台搭建Mongo数据库复制集(类似集群)(二)

    通过rs.status()命令我们可以查询到各个节点运行正常. 一.数据同步测试 在28011.28012端口上进行插入: 因为SECONDARY是不允许读写的, 在写多读少的应用中,使用Replic ...

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

    Replica  Sets(复制集)是在mongodDB1.6版本号開始新增的功能.它能够实现故障自己主动切换和自己主动修复功能成员节点的功能,各个DB之间的数据全然一致,大大减少了单点故障的风险. ...

  6. MySQL集群---②Windows平台搭建MySQL CLUSTER集群

    原文:http://blog.csdn.net/mazhaojuan/article/details/42211857 本文将通过两台电脑来简单介绍一下Windows平台如何搭建MySQL集群. My ...

  7. Windows 环境搭建 PostgreSQL 物理复制高可用架构数据库服务

    PostgreSQL 高可用数据库的常见搭建方式主要有两种,逻辑复制和物理复制,上周已经写过了关于在Windows环境搭建PostgreSQL逻辑复制的教程,这周来记录一下 物理复制的搭建方法. 首先 ...

  8. 「C语言」在Windows平台搭建C语言开发环境的多种方式

    新接触C语言,如何在Windows下进行C语言开发环境的搭建值得思考并整理. 以下多种开发方式择一即可(DEV C++无须环境准备). 注:本文知识来源于  Windows 平台搭建C语言集成开发环境 ...

  9. 在Windows平台搭建C语言开发环境

    一.在Windows平台搭建DEV C++集成开发环境     官网 https://sourceforge.net/projects/orwelldevcpp/ 中下载Dev C++运行即可 环境准 ...

随机推荐

  1. shell学习记录----初识sed和gawk

    Linux命令行与shell脚本编程大全中关于sed和gawk的介绍合在一起,而且结构有点乱. 不像之前的命令写的很清楚.所以这次我需要写下来整理一下. 一.sed部分 1.1 sed命令格式如下: ...

  2. 使用iScroll时input复选框不能选中解决方法

    http://blog.csdn.net/xw505501936/article/details/51886018

  3. WebService-.Net:添加web引用和添加服务引用有什么区别?

    ylbtech-WebService-.Net:添加web引用和添加服务引用有什么区别? 1.返回顶部 1. 添加web引用和添加服务引用有什么区别,Add Service References 和 ...

  4. vs2017或vs2019添加引用时报错

    我先安装的是vs2019,进入VS命令提示符里后一直说:gacutil 不是有效的命令,一直没能解决,然后直接装了vs2017后,该命令可以使用了, 还是用VS2017吧,2019的版本感觉还有点问题 ...

  5. Jmeter发送SOAP请求对WebService接口测试

    Jmeter发送SOAP请求对WebService接口测试 1.测试计划中添加一个用户自定义变量 2.HTTP信息头管理器,添加Content-Tpe,  application/soap+xml;c ...

  6. JSP_01

    1.定义局部变量.输出语句 <!doctype html> <html> <head> <title>定义局部变量.输出语句</title> ...

  7. python中函数的嵌套和作用域链

    1.三元运算if条件成立的结果 if 条件 else 条件不成立的结果例如: a=20 b=10 c=a if a>b else b print(c) 2.命名空间 全局命名空间:创建的存储“变 ...

  8. Go语言格式化字符串

    %s: 普通字符串 %q: 引号包含字符串 %x, %o, %b: 十六进制,8进制,2进制 %t: bool值 %d decimal integer %v any value in a natura ...

  9. LeetCode10 Indexed tree

    Binary Indexed Tree(Fenwick tree): 是一个查询和修改复杂度都为log(n)的数据结构.主要用于查询任意两位之间的所有元素之和,但是每次只能修改一个元素的值:经过简单修 ...

  10. 针对三星Exynos CPU Root漏洞

    因为系统为了保护这些符号地址泄露,而用的一种保护手段,从而使除root用户外的普通用户不能直接查看符号地址: 原因在于内核文件kallsyms.c中的显示符号地址命令中做了如下限制: seq_prin ...