ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

MongoDB Oplog详解

2021-07-21 00:01:42  阅读:618  来源: 互联网

标签:副本 MongoDB oplog 详解 Oplog 操作 日志 节点


关于Oplog的官网说明 : https://docs.mongodb.com/manual/core/replica-set-oplog/

1、Oplog简介。Oplog即操作日志(operation log)是用于保存Mongodb数据库所有数据操作记录(实际上只记录改动数据库数据的操作记录,即增/删/改)的固定大小集合(Capped Collections)。类比过来的话就相当于是mysql的binlog日志。

Oplog的存在及大地方便了MongoDB副本集的各节点的数据同步。

2、副本集数据同步的过程。

其流程大概如下:Primary节点写入数据,Secondary节点读取Pirmary的oplog然后再通过异步进程复制数据,之后再将操作记录写到自己的oplog。①如果某个备份点由于某些原因挂掉了,重新启动后就会自动从oplog的最后一个操作开始同步;同步完成后,将操作写入自己的oplog。②所有的副本集成员都会有一个oplog的副本 ③oplog中的每次操作都是幂等的,即即便有操作被同步了两次或多次也不会有什么负面影响。④为了提高复制效率,副本集中的所有节点之间会相互的进行心跳检测(ping),每个节点都可以从其他节点获取oplog。

注:对于固定集合(Capped Collections)就把他想成一个环形队列,当集合空间用完后,再插入元素就会覆盖最初始的头部元素。

3、Oplog的默认大小

当你首次启动副本集成员的时候,如果你没有指定oplog的打下,mongodb会自动创建一个默认大小的oplog。对于Unix 和Windows系统,默认oplog的大小取决于引擎,如下:

Storage EngineDefault Oplog SizeLower BoundUpper Bound
In-Memory5% of physical memory50 MB50 GB
WiredTiger5% of free disk space990 MB50 GB
MMAPv15% of free disk space990 MB50 GB

在大多数情况下,默认的oplog大小是足够用的。例如,如果oplog占可用磁盘空间的5%,并在24小时的操作中填满,则副本节点可以实现24小时不从oplog复制数据也不会影响最终同步(例如副本节点宕机)。大多数副本集的操作量要小得多,它们的oplog可以容纳更多的操作。

通常系统中存在以下操作的话,可能就需要设置更大的Oplog值来避免数据的丢失。

①一次性更新大量数据 ②删除域插入大致同样数量的数据 ③大量的更新现有数据

4、oplog常用命令

(1)查看oplog的状态:

rs.printReplicationInfo()

(2)查看oplog存储设置的大小

use local

db.oplog.rs.stats().maxSize

(3)查看oplog最大大小和现在占用大小以及记录时长

db.getReplicationInfo()

(4)更改副本集成员的Oplog大小  

db.adminCommand({replSetResizeOplog: 1, size: 15000})

注意点:

(1)sharding架构下,mongos不能查看oplog,但是我们可以到每个mongod实例去看。

另外,上面诸多命令在单mongo实例下也是不能用的(提示没有探测到副本集)。

 

与之类似的玩法:

redis中的玩法:

其实这个玩法和redis的AOF持久化完全就是一个思想,AOF持久化就是以日志的形式记录服务器所处理的数据改动操作,记录下来;万一redis挂了进行数据恢复的时候就先恢复RDB持久化下来的二进制压缩存储,然后以之为契机重现一遍写 增、删、改操作即可。

mysql中的玩法:

MySQL 的二进制日志 binlog 可以说是 MySQL 最重要的日志,它记录了所有的 DDL 和 DML 语句(除了数据查询语句select、show等),以事件形式记录,还包含语句所执行的消耗的时间,MySQL的二进制日志是事务安全型的。binlog 的主要目的是复制和恢复。Binlog日志的两个最重要的使用场景
①MySQL主从复制:MySQL Replication在Master端开启binlog,Master把它的二进制日志传递给slaves来达到master-slave数据一致的目的
②数据恢复:通过使用 mysqlbinlog工具来使恢复数据

标签:副本,MongoDB,oplog,详解,Oplog,操作,日志,节点
来源: https://blog.csdn.net/mijichui2153/article/details/118944699

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有