博客
关于我
MongoDB复制集底层原理
阅读量:800 次
发布时间:2023-02-09

本文共 1266 字,大约阅读时间需要 4 分钟。

MongoDB复制集原理

MongoDB的复制集是一种高可用性的数据同步机制,通过Raft算法实现主备节点的自动选举与故障转移。本文将深入探讨复制集的工作原理、优化策略以及实际应用中的注意事项。

复制集选举

MongoDB的复制集选举使用Raft算法,由大多数节点存活来确保选举成功。在实际实现中,MongoDB对Raft协议进行了扩展,包括:

  • 链式复制:备节点不仅可以从主节点同步数据,还可以选择心跳延时最小的节点作为同步源。
  • 预投票阶段:用于防止网络分区导致Term值激增。
  • 投票优先级:备节点可根据优先级主动发起投票。
  • 复制集最多可包含50个成员,但仅7个投票成员。若存活节点不足半数,复制集将无法选举主节点,所有节点仅支持读操作。

    平票问题可通过定时器随机偏差和仲裁者角色解决。定时器周期略大于electionTimeoutMillis,通过随机偏差避免同时发起选举。

    自动故障转移

    心跳机制

    心跳间隔默认为2秒,心跳成功则持续发送,失败则重试。心跳检测失败触发选举超时检测,若未响应则触发选举。

    选举超时检测

    默认周期为10秒,可通过electionTimeoutMillis调整。若心跳失败,定时器触发选举,备节点成为主节点。

    选举超时检测需满足以下条件:

  • 当前节点为备节点。
  • 具备选举权限。
  • 心跳检测未成功。
  • 复制集数据同步机制

    oplog同步

    复制集通过oplog进行数据同步,类似于MySQL的Binlog。oplog是一个固定大小的集合,支持动态调整。

    oplog记录写操作日志,备节点拉取并本地回放。每个备节点维护offset,用于跟踪同步进度。通过tailable cursor优化持续拉取。

    oplog参数配置

    oplog大小默认为磁盘5%的最小值或50GB。MongoDB 4.0及以上版本支持动态调整,使用replSetResizeOplog命令。

    幂等性

    oplog记录必须是幂等的,确保数据变更原子性。写操作需转换为可幂等的操作,例如$inc转换为$set。

    大数组更新风险

    数组更新可能导致oplog记录增大,影响同步效率。当数组操作涉及位置调整或改变元素顺序时,会记录整个数组状态,导致同步开销增加。

    复制延迟

    由于oplog固定大小,备节点可能无法及时同步主节点的写入,导致复制延迟。延迟过大可能引发数据不一致,增加回滚风险。

    数据回滚

    主节点故障时,备节点重新选举为主节点。旧主节点回滚数据至rollback目录,影响数据持久性。使用writeConcern:majority可降低回滚风险。

    同步源选择

    MongoDB允许备节点作为同步源,当settings.chainingAllowed开启时,备节点可选择最近的节点同步。可通过replSetSyncFrom命令临时指定同步源。

    总结

    MongoDB的复制集通过Raft算法实现高可用性,oplog机制确保数据同步。优化策略包括合理配置oplog大小、避免大数组操作、监控复制延迟等。理解复制集原理有助于优化数据库性能与高可用性配置。

    转载地址:http://knffk.baihongyu.com/

    你可能感兴趣的文章
    NIFI从MySql中离线读取数据再导入到MySql中_无分页功能_02_转换数据_分割数据_提取JSON数据_替换拼接SQL_添加分页---大数据之Nifi工作笔记0037
    查看>>
    NIFI从PostGresql中离线读取数据再导入到MySql中_带有数据分页获取功能_不带分页不能用_NIFI资料太少了---大数据之Nifi工作笔记0039
    查看>>
    nifi使用过程-常见问题-以及入门总结---大数据之Nifi工作笔记0012
    查看>>
    NIFI分页获取Mysql数据_导入到Hbase中_并可通过phoenix客户端查询_含金量很高的一篇_搞了好久_实际操作05---大数据之Nifi工作笔记0045
    查看>>
    NIFI分页获取Postgresql数据到Hbase中_实际操作---大数据之Nifi工作笔记0049
    查看>>
    NIFI同步MySql数据_到SqlServer_错误_驱动程序无法通过使用安全套接字层(SSL)加密与SQL Server_Navicat连接SqlServer---大数据之Nifi工作笔记0047
    查看>>
    NIFI同步MySql数据源数据_到原始库hbase_同时对数据进行实时分析处理_同步到清洗库_实际操作06---大数据之Nifi工作笔记0046
    查看>>
    Nifi同步过程中报错create_time字段找不到_实际目标表和源表中没有这个字段---大数据之Nifi工作笔记0066
    查看>>
    NIFI大数据进阶_FlowFile拓扑_对FlowFile内容和属性的修改删除添加_介绍和描述_以及实际操作---大数据之Nifi工作笔记0023
    查看>>
    NIFI大数据进阶_FlowFile生成器_GenerateFlowFile处理器_ReplaceText处理器_处理器介绍_处理过程说明---大数据之Nifi工作笔记0019
    查看>>
    NIFI大数据进阶_FlowFile生成器_GenerateFlowFile处理器_ReplaceText处理器_实际操作---大数据之Nifi工作笔记0020
    查看>>
    NIFI大数据进阶_Json内容转换为Hive支持的文本格式_实际操作_02---大数据之Nifi工作笔记0032
    查看>>
    NIFI大数据进阶_Json内容转换为Hive支持的文本格式_操作方法说明_01_EvaluteJsonPath处理器---大数据之Nifi工作笔记0031
    查看>>
    NIFI大数据进阶_Kafka使用相关说明_实际操作Kafka消费者处理器_来消费kafka数据---大数据之Nifi工作笔记0037
    查看>>
    NIFI大数据进阶_Kafka使用相关说明_实际操作Kafka生产者---大数据之Nifi工作笔记0036
    查看>>
    NIFI大数据进阶_NIFI的模板和组的使用-介绍和实际操作_创建组_嵌套组_模板创建下载_导入---大数据之Nifi工作笔记0022
    查看>>
    NIFI大数据进阶_NIFI监控功能实际操作_Summary查看系统和处理器运行情况_viewDataProvenance查看_---大数据之Nifi工作笔记0026
    查看>>
    NIFI大数据进阶_NIFI监控的强大功能介绍_处理器面板_进程组面板_summary监控_data_provenance事件源---大数据之Nifi工作笔记0025
    查看>>
    NIFI大数据进阶_NIFI集群知识点_认识NIFI集群以及集群的组成部分---大数据之Nifi工作笔记0014
    查看>>
    NIFI大数据进阶_NIFI集群知识点_集群的断开_重连_退役_卸载_总结---大数据之Nifi工作笔记0018
    查看>>