由于当前环境拟使用副本集,所以下面写的都是有关使用副本集的时候需要注意的坑,与学习过程中的一些记录。

同步源不一定是primary节点,而是经过一套规则选择的一个节点,有可能是secondery节点。

failOver时的回滚机制:primary节点挂掉,oplog已经更新,但是其余secondery节点在没有同步。此时集群需要进行重新选出primary节点,此时新的主节点并没有最新的oplog,当后期重启老primary节点时,作为新加入集群的新节点,需要与主节点进行oplog的同步,此时会对节点进行强制一致性处理,形成回滚(rollback),当rollback发生时,MongoDB将把rollback的数据以BSON格式存放到dbpath路径下rollback文件夹中。

一次MongoDB的写入:

  1. 将文档数据写入对应的集合
  2. 更新集合的所有索引信息
  3. 写入一条oplog用于同步
  4. 返回response,并且secondery节点拉取最新的oplog(此处为回滚的坑)
  5. 提交事务并且journal落磁盘

解决方案:Write Concern的配置,http://www.mongoing.com/archives/2916。原理为调整写时的确认界别,使除了当前节点以外的节点也有最新的oplog后,才返回response,完成一个事务。这样当主节点宕掉,也可以有其他节点有最新的oplog,新oplog时间戳的拥有者更可能获得新选举的选票。

{w: “majority”, j:1 }级别,几乎可以满足所有要求。

参考:https://blog.csdn.net/jianlong727/article/details/73321905

新节点加入时的oplog丢失问题:新节点的加入会有一系列的同步操作,在每步同步操作过程中,虽然都会对oplog进行同步,但是如果某一时刻的同步时间大于oplog可存储的量,则会造成oplog的覆写,从而导致新节点的数据丢失。

intial sync流程,(翻译自MongoDB源码上的英文注释)

全量同步开始,设置minvalid集合的_initialSyncFlag。
获取同步源上最新oplog时间戳为t1。
全量同步集合数据 (耗时)。
获取同步源上最新oplog时间戳为t2。
重放[t1, t2]范围内的所有oplog。
获取同步源上最新oplog时间戳为t3。
重放[t2, t3]范围内所有的oplog。
建立集合所有索引 (耗时)。
获取同步源上最新oplog时间戳为t4。
重放[t3, t4]范围内所有的oplog。
全量同步结束,清除minvalid集合的_initialSyncFlag。

解决方案:一是:根据官方说法,需要删除掉节点上的全部数据,重新进行全量同步。参考:https://docs.mongodb.com/manual/tutorial/resync-replica-set-member/

       二是:需要对oplog进行评估,扩大为较合理的oplog大小。

在生产环境中,当primary节点的写入压力过大,而secondery节点拉取oplog的速度相对缓慢,导致的oplog覆写,致使secondery节点状态变为recovering。

解决方案:可使用增加replWriter线程的方法进行解决。

  参考:https://yq.aliyun.com/articles/47336?spm=5176.8091938.0.0.WPuhZ0

majority指的多数节点:在write Concern的参数设置级别的过程中引入了majority,N/2 +1指的就是多数。

  这里引入为什么官方推荐布置奇数个节点的服务器,因为3 -(3/2 +1) = 4 - (4/2 +1)= 1,即无论是三个节点还是四个节点,都只可以容忍1个节点的失效。即三个节点的集群与四个节点的集群实现的效果相同(虽然四个节点的集群多一台物理机,相对来说更加安全。)

  参考:https://docs.mongodb.com/manual/core/replica-set-architectures/

journal与oplog机制的认识:journal是引擎级别,相当于redis中的wal日志操作,用于解决机房断电等非常规情况下,恢复数据。

  oplog则是在MongoDB配置为复制集的情况下,用于对secondery节点进行同步数据的普通数据表。即为local.oplog.rs。secondery节点会使用tail cursor对主节点的oplog进行监控,如果有新数据则进行拉取。

  参考:http://www.mongoing.com/archives/3988

转载于:https://www.cnblogs.com/Junpb/p/10906217.html

MongoDB配置副本集时需要注意的机制相关推荐

  1. MongoDB配置副本集(含Arbiter)

    MongoDB配置副本集(含Arbiter) 集群模式为:一主一副一仲裁 安装依赖 yum install net-snmp lsof -yyum install net-snmp -y 配置数据节点 ...

  2. MongoDB配置副本集

    前提 3台节点都安装好mongo 集群: 1台primary 1台secondary 1台ARBITER(做监控的,实际没有数据) 配置步骤 生成keyFile,主节点操作 openssl rand ...

  3. MongoDB之副本集创建

    目录 一 复制 1 复制简介 2 建立副本集 3 网络注意事项 4 安全注意事项 5 观察副本集 6 更改副本集操作 7 如何设计副本集 8 如何进行选举 9 成员变量配置 10 创建索引 二 同步 ...

  4. MongoDB之副本集配置

    MongoDB主从复制 主从复制是 MongoDB 最早使用的复制方式, 该复制方式易于配置,并且可以支持任意数量的从节点服务器,与使用单节点模式相比有如下优点: 在从服务器上存储数据副本,提高了数据 ...

  5. MongoDB之副本集

    MongoDB之副本集 一.简介 MongoDB 是一个基于分布式文件存储的数据库.由 C++ 语言编写.旨在为 WEB 应用提供可扩展的高性能数据存储解决方案. MongoDB 是一个介于关系数据库 ...

  6. SpringBoot整合MongoDB以及副本集、分片集群的搭建

    整合springboot应用 说明: 这里主要以 springboot 应用为基础应用进行整合开发. Spring Data : Spring 数据框架 JPA .Redis.Elasticsearc ...

  7. MongoDB分片副本集搭建

    1.安装mongodb tar xvf mongodb-linux-x86_64-enterprise-rhel70-3.6.2.tgz -C /usr/local/ cd /usr/local mv ...

  8. Golang + MongoDB ReplSet副本集

    本文介绍MongoDB副本集,暂且按照3个节点来配置:A(primary).B(secondary).C(arbiter) 1. 在集群每个节点上安装一份MongoDB: 2. 配置副本集: 3. 配 ...

  9. MongoDB 搭建副本集

    副本集(Replica Set)是一组MongoDB实例组成的集群,由一个主(Primary)服务器和多个备份(Secondary)服务器构成.通过Replication,将数据的更新由Primary ...

  10. MongoDB的副本集

    文章目录 1.副本集-Replica Sets 2.副本集的三个角色 3.副本集架构目标 4.故障测试 1.副本集-Replica Sets MongoDB中的副本集(Replica Set)是一组维 ...

最新文章

  1. SharePoint 2013 商城
  2. gc的原因 频繁full_系统缓慢+CPU 100%+频繁Full GC问题的定位排查思路!
  3. HDU 3530Subsequence(单调队列)
  4. PHP——0128练习相关2——js点击button按钮跳转到另一个新页面
  5. OpenGL笔记4 数据传递二
  6. Spring下载文件出现:UT010029: Stream is closed
  7. Jmeter 接口测试post请求数据失败
  8. 二级c语言笔试试题及答案,1996年9月全国计算机等级考试二级C语言笔试试题及答案...
  9. 错误代码1500什么意思_宽带出错出错提示代码是示什么意思
  10. 在同一个二维坐标系绘制出一元二次曲线, sin正弦、cos余弦曲线 (numpy,matplotlib.pyplot )
  11. 在线文档预览解决方案-Office Web Apps在Windows Server 2008 R2部署教程
  12. yolov3执行reval_voc_py3文件过程出现的错误记录及解决
  13. 工作流程管理系统,表结构与运行机制
  14. 人脸识别评价参数之FAR和FRR
  15. 写给程序猿的把妹指南:概述篇
  16. 【Get深一度】相位差波束指向角推导-相控阵雷达原理
  17. 《抽样技术》第1章 绪论
  18. UVa 109 - SCUD Busters(凸包计算)
  19. mysql hy000_Mysql ERROR 145 (HY000)
  20. 文本处理三剑客之sed命令详解

热门文章

  1. 【5分钟 Paper】Reinforcement Learning with Deep Energy-Based Policies
  2. python中列表中的字典的排序问题
  3. NHibernate教程(14)--使用视图
  4. POJ2395 最小生成树 - Prime算法
  5. 一次数据库优化的对话
  6. JavaScript调试技巧之console.log()详解
  7. 训练赛20160403
  8. [Study] 通过游戏学编程的网站
  9. 我的小站:诗词在线 http://www.chinapoesy.com 欢迎大家测试速度。特别是网通的。...
  10. 微软 .NET 俱乐部在线发布会