首页 > 其他分享 >Mongo oplog理解

Mongo oplog理解

时间:2024-10-19 09:58:44浏览次数:1  
标签:Mongo maipu 理解 oplog 操作 日志 local 节点

转载请注明出处:

  oplog(操作日志)是MongoDB中用于记录所有写操作的日志。它是一个特殊的集合,存储在副本集的主节点中。oplog用于确保副本集中的副节点与主节点的数据保持一致。当主节点执行写操作时,相应的操作将被记录到oplog中,副节点则通过读取oplog来获取最新的数据变化。

数据结构

  oplog在mongo数据库主节点的local数据下,进入local数据库可以查看这个集合中存储数据的结构:

  进入oplog数据库:

use local

  查看数据结构:

rs0:PRIMARY> db.oplog.rs.findOne()
{
        "ts" : Timestamp(1729001735, 165),
        "t" : NumberLong(187),
        "h" : NumberLong(0),
        "v" : 2,
        "op" : "i",
        "ns" : "topology.filteredReason",
        "ui" : UUID("94a529f7-dbf1-4be0-b296-361094515e13"),
        "wall" : ISODate("2024-10-15T14:15:35.636Z"),
        "lsid" : {
                "id" : UUID("bbf4c6e6-e139-48e2-82df-a0b15bd0a89f"),
                "uid" : BinData(0,"47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=")
        },
        "txnNumber" : NumberLong(29170),
        "stmtId" : 0,
        "prevOpTime" : {
                "ts" : Timestamp(0, 0),
                "t" : NumberLong(-1)
        },
        "o" : {
                "_id" : "75a4d50f-8f37-4d06-8abe-d1c2b0de97a0",
                "reason" : "link[maipu_3:gigabitethernet3>maipu_2:gigabitethernet3] has no label",
                "type" : "LINK",
                "key" : "maipu_3:gigabitethernet3>maipu_2:gigabitethernet3",
                "tePolicyColorTupleId" : "maipu_3_maipu_1_MaiPu31_3628",
                "_class" : "com.tethrnet.terra.service.sr.topology.lib.model.terra.te.svc.filteredreasontop.FilteredReason"
        }
}
rs0:PRIMARY>

  oplog是一个无限增长的集合,包含以下主要字段:

  • ts:时间戳,表示操作的时间。
  • h:哈希值,用于唯一标识该操作。
  • op:操作类型,可能的值包括“i”(插入)、“u”(更新)、“d”(删除)。
  • ns:命名空间,表示操作所属的数据库和集合。
  • o:操作的详细内容,具体取决于操作类型。

特性

  1. oplog(操作日志)是一个特殊的固定大小集合,记录所有修改数据库数据的操作。
  1. 它可以超越其配置大小限制,以避免删除大多数提交点。
  1. 每个副本集成员都包含oplog的副本,位于local.oplog.rs集合中。
  1. 操作日志中的每个操作都是幂等的,即应用一次或多次都会产生相同的结果。
  1. oplog用于复制和恢复节点,如果节点下线,需要oplog来恢复状态。

配置

  1. 默认情况下,MongoDB会自动创建oplog,但可以自定义其大小。
  1. 可以通过oplogSizeMB选项指定初始oplog大小。
  1. 使用replSetResizeOplog命令动态更改oplog大小,无需重启mongod。
  1. 可以设置最小保留时间,防止删除最近的操作日志条目。

oplog的作用

  • 数据同步:副节点通过读取oplog来同步主节点的写入操作,确保数据一致性。
  • 故障恢复:在主节点发生故障时,可以根据oplog中的信息快速恢复数据。
  • 查询历史:oplog提供了一个操作历史的记录,有助于审计和问题排查。

命令

  oplog存储在local数据库中。进入MongoDB shell后,您需要切换到local数据库:

  1. 查看当前最大oplog大小:
    db.getSiblingDB("local").oplog.rs.stats(1024*1024).maxSize
  2. 更改最大oplog大小:
    db.adminCommand({
      replSetResizeOplog: 1,
      size: Double(16384) // megabytes
    })
  3. 过滤oplog日志

    只对特定操作或特定时间范围内的日志,可以使用查询条件过滤结果。例如,查看类型为“插入”的操作:

    db.oplog.rs.find({ op: "i" }).pretty()
  4. 设置最小保留时间:
    db.adminCommand({
      replSetResizeOplog: 1,
      minRetentionHours: 24 // 保留至少24小时的日志条目
    })

其他重要信息

  1. oplog大小取决于存储引擎和可用空间。内存存储引擎使用5%物理内存,WiredTiger使用5%可用空间。
  1. 默认情况下,不设置最小保留时间,系统会自动截断以维持配置的最大oplog大小。
  1. 在副本集中运行时,不能手动对oplog执行写操作。
  1. oplog对于复制和恢复节点至关重要,不能删除local.oplog.rs集合。
  1. 在sharded集群中,每个副本组都有自己的oplog。

  通过理解和正确配置oplog,您可以优化MongoDB的复制性能,并确保数据的一致性和可用性。适当的oplog大小对于高效的复制和恢复至关重要。

 

 

 

标签:Mongo,maipu,理解,oplog,操作,日志,local,节点
From: https://www.cnblogs.com/zjdxr-up/p/18475527

相关文章

  • Range范围选区的理解
    <!--*@Date:2024-10-1410:02:56*@Description:Modifyhereplease--><!doctypehtml><htmllang="en"><head><metacharset="UTF-8"/><metaname="viewport"content="width=......
  • Python学习的自我理解和想法(15)
    学的是b站的课程(千锋教育),跟老师写程序,不是自创的代码!今天是学Python的第15天,从今天开始,每天一到两个常用模块,更完恢复到原来的,开学了,时间不多,写得不多,见谅。目录OS模块(1).获取当前目录(2)获取当前路径(3)创建文件夹(4)删除文件夹(5)重命名文件或者文件夹(6)删除文件......
  • 通过比较list与vector在简单模拟实现时的不同进一步理解STL的底层
     cplusplus.com/reference/list/list/?kw=list当我们大致阅读完list的cplusplus网站的文档时,我们会发现它提供的接口大致上与我们的vector相同。当然的,在常用接口的简单实现上它们也大体相同,但是它们的构造函数与迭代器的实现却大有不同。(食用本文时建议与文末的模拟实现代......
  • 【Java后端】SpringBoot 自动配置原理解析
    为什么就这一个注解,就可以让SpringBoot自动配置呢?为了更清晰地阐述SpringBoot自动配置的底层原理,我们将结合源码进行更深入的分析,并加入一些关键步骤的代码片段。 注意:按住Ctrl键不松,点击相应注解,即可进入对应源码1. @SpringBootApplication 注解的秘密:开启自动配置......
  • 如何理解分布式事务
    在分布式系统环境中,分布式事务是一个关键的技术挑战。那么,什么是分布式事务呢?让我们一起来深入理解。一、分布式事务的定义分布式事务是指在分布式系统中,为了保证数据的一致性,涉及多个节点的事务操作。在传统的单体应用中,事务通常由数据库管理系统来处理,保证了数据的一致......
  • 堆栈!言简意赅理解!
    前言        在我们的生活中,常常会遇到需要整理和管理物品的情况,比如在玩具箱中放置玩具。我们可以把最后放进箱子的玩具放在最上面,这样我们每次玩耍时,只需从最上面拿出玩具即可。这种管理方式称为“堆栈”。在计算机科学中,堆栈是一种重要的数据结构,能够以“后进先出......
  • 深入理解浮点数的运算
    浮点数的运算步骤浮点数的加减运算一般由以下五个步骤完成:对阶、尾数运算、规格化、舍入处理、溢出判断所谓对阶是指将两个进行运算的浮点数的阶码对齐的操作。对阶的目的是为使两个浮点数的尾数能够进行加减运算。因为,当进行$M_{x}\times2^{E_{x}}$与$M_{y}\times2^{E......
  • 【人工智能-初级】第5章 支持向量机(SVM):原理解析与代码实现
    文章目录一、支持向量机简介二、支持向量机的数学原理2.1线性可分支持向量机2.2软间隔与非线性支持向量机2.3核函数三、SVM的优缺点3.1优点3.2缺点四、Python实现支持向量机4.1导入必要的库4.2生成数据集并进行预处理4.3创建SVM分类器并进行训练4.4模型预测与......
  • SpringBoot驱动的智能物流管理解决方案
    1系统概述1.1研究背景随着计算机技术的发展以及计算机网络的逐渐普及,互联网成为人们查找信息的重要场所,二十一世纪是信息的时代,所以信息的管理显得特别重要。因此,使用计算机来管理智能物流管理系统的相关信息成为必然。开发合适的智能物流管理系统,可以方便管理人员对智能......
  • 深入理解浮点数的表示
    浮点数的表示通常,浮点数表示为:\[N=(-1)^{S}\timesM\timesR^{E}\]其中,S取值为0或者1,用来决定浮点数的符号;M是一个二进制定点小数,称为尾数,一般用定点原码小数表示;E是一个二进制顶点整数,称为阶码或者指数,用移码表示。R是基数(隐含),可以约定为2、4、16等浮点数的表示范围......