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

本文涉及的产品
云原生多模数据库 Lindorm,多引擎 多规格 0-4节点
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
云数据库 MongoDB,通用型 2核4GB
简介: 在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
目录
相关文章
|
5月前
|
NoSQL MongoDB 数据库
04 MongoDB - 集合操作
04 MongoDB - 集合操作
23 0
|
8月前
|
NoSQL MongoDB 数据库
MongoDB常用的操作(服务器、数据库、集合)
MongoDB常用的操作(服务器、数据库、集合)
1944 0
|
9月前
|
NoSQL MongoDB Cloud Native
【mongo 系列】mongodb 学习十一,MongoDB 分片集群之分片集合
MongoDB 中 分片集群有专门推荐的模式,例如 分片集合
|
9月前
|
NoSQL MongoDB 数据库
MongoDB 删除集合
MongoDB 删除集合
79 0
|
9月前
|
NoSQL MongoDB 数据库
MongoDB 创建集合
MongoDB 创建集合
370 0
|
11月前
|
NoSQL MongoDB 数据库
开心档-软件开发入门之MongoDB 删除集合
【摘要】 本章节我们为大家介绍如何使用 MongoDB 来删除集合。
|
11月前
|
NoSQL MongoDB 数据库
软件开发入门教程网之MongoDB 创建集合
【摘要】 本章节我们为大家介绍如何使用 MongoDB 来创建集合。
|
11月前
|
缓存 NoSQL MongoDB
开心档-软件开发入门之MongoDB 固定集合(Capped Collections)
【摘要】 本章将会讲解MongoDB 固定集合(Capped Collections)是性能出色且有着固定大小的集合,对于大小固定,我们可以想象其就像一个环形队列,当集合空间用完后,再插入的元素就会覆盖最初始的头部的元素!
|
11月前
|
NoSQL MongoDB 数据库
开心档 - 软件开发入门之 MongoDB 创建集合
本章节我们为大家介绍如何使用 MongoDB 来创建集合。MongoDB 中使用 createCollection() 方法来创建集合。语法格式:
开心档 - 软件开发入门之 MongoDB 创建集合
|
11月前
|
NoSQL MongoDB 数据库
一日一技:如何找到 MongoDB 占用空间最大的集合?
一日一技:如何找到 MongoDB 占用空间最大的集合?
249 0

相关产品

  • 云数据库 MongoDB 版