MongoDB中local.replset.minvalid集合的作用

本文涉及的产品
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
云数据库 Tair(兼容Redis),内存型 2GB
云原生多模数据库 Lindorm,多引擎 多规格 0-4节点
简介: 在mongodb副本集的local库中,有一个replset.minvalid集合,这个集合正常情况下会记录一个OpTime,包含时间戳(ts)字段和选举任期(t,如果使用的v1选举协议)。有时候会有一些额外的字段,如『begin』、『doingInitialSync:true』等,如下,摘抄自m.

在mongodb副本集的local库中,有一个replset.minvalid集合,这个集合正常情况下会记录一个OpTime,包含时间戳(ts)字段和选举任期(t,如果使用的v1选举协议)。有时候会有一些额外的字段,如『begin』、『doingInitialSync:true』等,如下,摘抄自mongodb代码注释:

 * { _id:...,
 *      doingInitialSync: true // initial sync is active
 *      ts:..., t:...   // end-OpTime
 *      begin: {ts:..., t:...} // a batch is currently being applied, and not consistent
 * }
 

那这个集合是干什么用的呢?简单来说这个集合是Secondary节点用来标识当前是否处于一个一致状态。当节点已经应用到了这个集合中的OpTime对应的oplog,那么它是一致的。具体地看,这个集合主要有如下几个作用:

  1. 标记当前正在执行initial sync。在initial sync开始时,会在这个集合中写入一个『doingInitialSync:true』的标记,结束后清除。如果initial sync过程中进程crash了,下次重启的时候会根据这个标记重新进行initial sync。
  2. 保证Secondary节点在同步过程能原子性的应用一批oplog(即要么全部应用,要么全部不应用)。在Secondary节点同步的过程中,拉取了一批oplog后准备应用时,会在这个集合中写入这批oplog的时间戳区间。即将集合的OpTime更新成这批oplog的结束OpTime,另外再增加一个『begin』字段标识这批oplog的起始时间戳。当这一批oplog被成功应用完毕后,会将这个『begin』字段移除。如果在一批oplog应用途中进程crash了,下次重启时会通过『begin』字段检测到这是一次不完整的batch apply oplog操作,会将oplog截断到『begin』字段标识的OpTime之前,以将已应用的部分oplog删除掉。之所以要这么做是因为因为Secondary在apply一批oplog的时候是并发进行的,当中可能产生一些中间状态,需要保证全部apply完毕后才能对外可见。
  3. 如果Secondary节点在选择同步源的时候发现自己已经落后太多,已经跟不上其他节点,也会修改minvalid集合,将缺失的oplog时间区间(从自己的最新一条oplog的时间戳到看到的其他节点最旧的oplog时间戳)写到minvalid集合中,并进入维护模式,变为RECOVERING状态。从RECOVERING状态重新回到Secondary状态时也会检查是否已应用完了minvalid集合中记录的OpTime对应的oplog。
  4. 此外,当节点需要回滚(rollback)时,在回滚之前会获取minvalid集合的数据进行判断当前节点是否处于一致的状态,如果不是则直接assert结束进程。在回滚过程中,会在这个集合中记录当前同步源节点的最新的oplog的OpTime,以标识当前处于不一致状态,等到回滚结束后,由同步线程追上这个oplog后清除。回滚过程可参加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 删除集合
10月更文挑战第14天
31 1
|
29天前
|
缓存 NoSQL MongoDB
|
2月前
|
存储 NoSQL MongoDB
MongoDB 创建集合
10月更文挑战第13天
32 1
|
4月前
|
存储 NoSQL 数据管理
揭秘MongoDB时间序列集合:这个超级功能将如何彻底改变你的数据管理?
【8月更文挑战第8天】时间序列数据记录随时间变化的信息,在数据库管理中至关重要。MongoDB自4.0版起引入时间序列集合,专为这类数据优化存储与查询。通过问答形式介绍其特点:自动数据过期、高效存储机制及快速查询操作。创建时需指定时间字段及可选元数据字段。支持设置数据过期时间,采用粗粒度索引减少I/O操作。查询时可通过时间范围筛选数据,并利用聚合框架进行数据分析。随着实时分析需求的增长,时间序列集合的应用将更加广泛。
181 0
|
6月前
|
NoSQL 安全 MongoDB
精准数据清理:掌握 MongoDB 删除集合的方法与最佳实践
精准数据清理:掌握 MongoDB 删除集合的方法与最佳实践
207 0
|
6月前
|
存储 NoSQL MongoDB
MongoDB 集合创建指南:命名规范、索引优化和数据模型设计
MongoDB 集合创建指南:命名规范、索引优化和数据模型设计
117 0
|
NoSQL MongoDB 数据库
04 MongoDB - 集合操作
04 MongoDB - 集合操作
58 0
|
NoSQL MongoDB 数据库
MongoDB常用的操作(服务器、数据库、集合)
MongoDB常用的操作(服务器、数据库、集合)
2473 0
|
NoSQL MongoDB Cloud Native
【mongo 系列】mongodb 学习十一,MongoDB 分片集群之分片集合
MongoDB 中 分片集群有专门推荐的模式,例如 分片集合
155 0
|
NoSQL MongoDB 数据库
开心档 - 软件开发入门之 MongoDB 创建集合
本章节我们为大家介绍如何使用 MongoDB 来创建集合。MongoDB 中使用 createCollection() 方法来创建集合。语法格式:
开心档 - 软件开发入门之 MongoDB 创建集合

相关产品

  • 云数据库 MongoDB 版