(2)MongoDB副本集自动故障转移原理(含客户端)

本文涉及的产品
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
简介: 前文我们搭建MongoDB三成员副本集,了解集群基本特性,今天我们围绕下图聊一聊背后的细节。

e38ab70dd76b21298a9171028f67a801.png


默认搭建的副本集均在主节点读写,辅助节点冗余部署,形成高可用和备份,具备自动故障转移能力。


集群心跳保活


集群每个节点以周期性向其他成员发出心跳命令 replSetHeartbeat 来获取状态,

根据应答消息来更新节点的状态,根据最终状态确定是否重选主节点。


默认心跳周期 heartbeatIntervalMillis= 2000ms;

认定Primary节点失联的阈值 electionTimeoutMillis=10s


dc2bd535ebbd314382eaaf3352f61ed4.jpg


异步复制


辅助节点复制主节点的oplog,并将改变应用到数据集,从而保持与主节点数据同步。、


这里有三个知识点:


  • oplog是一个特殊的封顶集合capped collection, 主节点上的operation log会记录在主节点的oplog中,辅助节点异步拷贝这些操作,这样所有的节点的都包含operatin log的一个副本:local.oplog.rs集合


  • 每次异步复制触发的时机是在心跳保活阶段,所有的辅助节点都会在ping阶段从其他成员插入oplog文档。


  • oplog中的每个操作都是冥等的:无论是一次还是多次应用到目标数据集,oplog操作会产生相同的结果


删除和插入操作


若多次应用删除操作,后续删除操作无效果;


若多次应用插入操作,因为每次操作均包含包含_id值,因此它也不会插入文档的第二个副本(因为_id必须是唯一的)


当有新节点加入集群,该节点会启动另一种同步复制:initial sync, 将所有数据从某副本集成员完全拷贝, 复制完成,会过渡为辅助节点。


选举主节点


集群会因为各种事件触发选举主节点


  • 在集群中添加新节点


  • 初始化replica set集群


  • 执行人工运维命令(rs.stepDown()  rs.reconfig())维护集群


  • 辅助节点与主节点失联时间超过默认10s


自动故障转移说的是最后一种情况:


61e58fdc910954c76b8f12d9fe907907.png


默认情况下,辅助节点A与主节点心跳失联超过10s,A节点标记主节点不可用;

之后与其他辅助节点心跳保活,沟通各自信息(节点的票数、节点优先级、PingMs等因素)确立出新主节点。


在发生故障转移时,集群不能再执行写入操作;若客户端配置在辅助节点读取(read preference),则集群可继续提供读取能力。


你的应用程序可用重试逻辑应对自动故障转移和后续的重选。


从MongoDB3.6版本开始,MongoDB Driver可侦测主节点的失联,并执行一次重试操作。


tip


适配MongoDB4.2的Driver默认会重试写入操作;


适配Mongodb4.0-3.6的Driver需显式在连接字符串包含retryWrites = true,以确保主节点失联时能重试写入操作。


连接副本集的配置字符串,其中rs0是集群配置文件中 replSetName。


mongodb://account:passward@mongodb0.example.com:27017,mongodb1.example.com:27017,mongodb2.example.com:27017?replicaSet=rs0


OK, 以上便是MongoDB副本集心跳保活、异步复制、自动故障转移的背景知识。



相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。   相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
相关文章
|
2月前
|
存储 缓存 NoSQL
MongoDB内部的存储原理
这篇文章详细介绍了MongoDB的内部存储原理,包括存储引擎WiredTiger的架构、btree与b+tree的比较、cache机制、page结构、写操作流程、checkpoint和WAL日志,以及分布式存储的架构。
74 1
MongoDB内部的存储原理
|
28天前
|
存储 NoSQL MongoDB
MongoDB 复制(副本集)
10月更文挑战第17天
36 2
MongoDB 复制(副本集)
|
5月前
|
存储 监控 NoSQL
MongoDB索引解析:工作原理、类型选择及优化策略
MongoDB索引解析:工作原理、类型选择及优化策略
|
2月前
|
存储 NoSQL Shell
MongoDB复制(副本集)总结
这篇文章是关于MongoDB副本集的总结,包括复制原理、设置副本集、案例分析等内容。
41 1
|
4月前
|
存储 NoSQL MongoDB
MongoDB 索引原理与索引优化
MongoDB 索引原理与索引优化
101 1
|
3月前
|
NoSQL MongoDB Windows
MongoDB 读写分离——Windows MongoDB 副本集配置
MongoDB 读写分离——Windows MongoDB 副本集配置
68 0
|
5月前
|
存储 JSON NoSQL
深入解析MongoDB的存储原理
深入解析MongoDB的存储原理
深入解析MongoDB的存储原理
|
6月前
|
监控 NoSQL MongoDB
【MongoDB 专栏】MongoDB 的副本集故障转移与恢复
【5月更文挑战第11天】MongoDB的副本集是高可用性关键,提供数据冗余和自动故障转移。由主节点和从节点组成,主节点处理写操作,从节点同步数据。当主节点故障,副本集通过选举产生新主节点,确保服务不间断。故障转移涉及节点优先级和数据同步状态的考量。恢复阶段解决数据不一致,重点包括节点部署监控、数据同步策略、选举机制和备份恢复计划。网络延迟和大规模数据可能带来挑战,需优化网络、性能调优和定期演练。随着技术进步,副本集的故障转移与恢复将更高效、智能,保障数据安全,支撑业务系统的稳定运行。
349 3
【MongoDB 专栏】MongoDB 的副本集故障转移与恢复
|
5月前
|
存储 监控 NoSQL
MongoDB 副本集:构建可靠的数据备份与高可用性系统
MongoDB 副本集:构建可靠的数据备份与高可用性系统
105 0
|
23天前
|
NoSQL Cloud Native atlas
探索云原生数据库:MongoDB Atlas 的实践与思考
【10月更文挑战第21天】本文探讨了MongoDB Atlas的核心特性、实践应用及对云原生数据库未来的思考。MongoDB Atlas作为MongoDB的云原生版本,提供全球分布式、完全托管、弹性伸缩和安全合规等优势,支持快速部署、数据全球化、自动化运维和灵活定价。文章还讨论了云原生数据库的未来趋势,如架构灵活性、智能化运维和混合云支持,并分享了实施MongoDB Atlas的最佳实践。