mongodb之 oplog 日志详解
1:oplog简介
oplog是local库下的一个固定集合,Secondary就是通过查看Primary 的oplog这个集合来进行复制的。每个节点都有oplog,记录这从主节点复制过来的信息,这样每个成员都可以作为同步源给其他节点。
2:副本集数据同步的过程
副本集中数据同步的详细过程:Primary节点写入数据,Secondary通过读取Primary的oplog得到复制信息,开始复制数据并且将复制信息写入到自己的oplog。如果某个操作失败(只有当同步源的数据损坏或者数据与主节点不一致时才可能发生),则备份节点停止从当前数据源复制数据。如果某个备份节点由于某些原因挂掉了,当重新启动后,就会自动从oplog的最后一个操作开始同步,同步完成后,将信息写入自己的oplog,由于复制操作是先复制数据,复制完成后再写入oplog,有可能相同的操作会同步两份,不过MongoDB在设计之初就考虑到这个问题,将oplog的同一个操作执行多次,与执行一次的效果是一样的。可以简单的将其视作Mysql中的binlog。
3:同步类型
initial sync(初始化):这个过程发生在当副本集中创建一个新的数据库或其中某个节点刚从宕机中恢复,或者向副本集中添加新的成员的时候,默认的,副本集中的节点会从离它最近的节点复制oplog来同步数据,这个最近的节点可以是primary也可以是拥有最新oplog副本的secondary节点。
replication(复制):在初始化后这个操作会一直持续的进行着,以保持各个secondary节点之间的数据同步。
4:Oplog大小:
capped collection是MongoDB中一种提供高性能插入、读取和删除操作的固定大小集合,当集合被填满的时候,新的插入的文档会覆盖老的文档。
在64位的Linux,Solaris,FreeBSD以及Windows系统上,MongoDB会分配磁盘剩余空间的5%作为oplog的大小,如果这部分小于1GB则分配1GB的空间
在64的OS X系统上会分配183MB
在32位的系统上则只分配48MB
5:oplog的增长速度
oplog是固定大小,他只能保存特定数量的操作日志,通常oplog使用空间的增长速度跟系统处理写请求的速度相当,如果主节点上每分钟处理1KB的写入数据,那么oplog每分钟大约也写入1KB数据。如果单次操作影响到了多个文档(比如删除了多个文档或者更新了多个文档)则oplog可能就会有多条操作日志。db.testcoll.remove() 删除了1000000个文档,那么oplog中就会有1000000条操作日志。如果存在大批量的操作,oplog有可能很快就会被写满了。
6:oplog的监控
## 查看 oplog 的状态
shard1:PRIMARY> rs.printReplicationInfo()
configured oplog size: 1674.7353515625MB
log length start to end: 102397secs (28.44hrs)
oplog first event time: Tue Oct 09 2018 18:17:42 GMT+0800 (CST)
oplog last event time: Wed Oct 10 2018 22:44:19 GMT+0800 (CST)
now: Wed Oct 10 2018 22:44:23 GMT+0800 (CST
## 查看集群 Oplog 使用情况
shard1:PRIMARY> db.getReplicationInfo()
{
"logSizeMB" : 1674.7353515625,
"usedMB" : 0.33,
"timeDiff" : 102307,
"timeDiffHours" : 28.42,
"tFirst" : "Tue Oct 09 2018 18:17:42 GMT+0800 (CST)",
"tLast" : "Wed Oct 10 2018 22:42:49 GMT+0800 (CST)",
"now" : "Wed Oct 10 2018 22:42:52 GMT+0800 (CST)"
}
## 查看集群延迟情况
shard1:PRIMARY> db.printSlaveReplicationInfo()
source: 10.100.25.42:27001
syncedTo: Wed Oct 10 2018 22:40:39 GMT+0800 (CST)
0 secs (0 hrs) behind the primary
mongodb之 oplog 日志详解的更多相关文章
- MongoDB各种查询操作详解
这篇文章主要介绍了MongoDB各种查询操作详解,包括比较查询.关联查询.数组查询等,需要的朋友可以参考下 一.find操作 MongoDB中使用find来进行查询,通过指定find的第一个参数可 ...
- Spark小课堂Week6 启动日志详解
Spark小课堂Week6 启动日志详解 作为分布式系统,Spark程序是非常难以使用传统方法来进行调试的,所以我们主要的武器是日志,今天会对启动日志进行一下详解. 日志详解 今天主要遍历下Strea ...
- MySQL日志文件之错误日志和慢查询日志详解
今天天气又开始变得很热了,虽然很热很浮躁,但是不能不学习,我在北京向各位问好.今天给大家分享一点关于数据库日志方面的东西,因为日志不仅讨厌而且还很重要,在开发中时常免不了与它的亲密接触,就在前几天公司 ...
- tomcat 日志详解
1 tomcat 日志详解 1.1 tomcat 日志配置文件 tomcat 对应日志的配置文件:tomcat目录下的/conf/logging.properties. tomcat 的日志等级有 ...
- springboot快速入门(二)——项目属性配置(日志详解)
一.概述 application.properties就是springboot的属性配置文件 在使用spring boot过程中,可以发现项目中只需要极少的配置就能完成相应的功能,这归功于spring ...
- tomcat日志详解
1 tomcat 日志详解 1.1 tomcat 日志配置文件 tomcat 对应日志的配置文件:tomcat目录下的/conf/logging.properties. tomcat 的日志等级有:日 ...
- Apache/Nginx/IIS 访问日志详解
Apache日志详解 1.Apache日志文件名称及所在路径 日志文件一般都是保存在在apache/logs目录下,实际情况可以根据Apache的配置文件去查找日志文件所在的路径. 例如phpstud ...
- 【夯实Mysql基础】MySQL在Linux系统下配置文件及日志详解
本文地址 分享提纲: 1. 概述 2. 详解配置文件 3. 详解日志 1.概述 MySQL配置文件在Windows下叫my.ini,在MySQL的安装根目录下:在Linux下叫my.cnf,该文件位于 ...
- Squid 日志详解
原文地址: http://www.php-oa.com/2008/01/17/squid-log-access-store.html access.log 日志 在squid中access访问日志最为 ...
随机推荐
- unity3d 九宫密码锁
using UnityEngine;using System.Collections.Generic;using System;using UnityEngine.EventSystems;using ...
- 字典和json 的区别 和转换
前言:字典和json非常像.接下来比较一下两者的异同 先看一下字典的写法: a = {', ', ' } 再看一下json的写法: { "studentInfo": { " ...
- 20165214 2017-2018-2 《Java程序设计》课程总结
20165214 2017-2018-2 <Java程序设计>课程总结 每周任务链接 预备作业1:我期望的师生关系 预备作业2:C语言基础调查和java学习展望 预备作业3:Linux安装 ...
- 在使用Idea配置jQuery的问题
今天使用idea中引入jQuery代码时,发生的几个错误,时刻提醒 1.jQuery的驱动包要放置在web目录下 2.引入jQuery的驱动包时,语句格式为<script></scr ...
- nginx随机模块——ngx_http_random_index_module
今天我给大家分享一个挺好玩的模块,随机变换网站首页的模块 这个模块他的作用于只有在location中,具体写法如下 只需要在localtion开启这个模块就好了,然后呢我们在/usr/share/ng ...
- python-函数参数不固定
默认参数的应用场景: 1.默认安装 2.数据库连接,默认端口号 参数不固定的情况: 参数组: args:将接收的位置参数转换成元组 def test(*args): print(args) ...
- C#窗体换肤
Form1.cs using System;using System.Collections.Generic;using System.ComponentModel;using System.Data ...
- Java学习笔记8(面向对象3:接口)
接口的概念: 接口是功能的集合,同样可以看最做事一种数据类型,是比抽象类更为抽象的"类”. 接口之描述所应该具备的方法,并没有具体实现,具体的实现有接口的实现类(相当于接口的子类)来完成.这 ...
- Js代码一些要素
---恢复内容开始--- 条件语句 is(条件){ 语句 }else { 语句 } {}在js中我们把他叫代码块.如果代码块里内容没有执行完,语句就不会向下执行. 代码块是一个独立的整体.如果js中莫 ...
- python day11 ——1. 函数名的使⽤ 2. 闭包 3. 迭代器
⼀. 函数名的运⽤. 1.函数名的内存地址 def func(): print("呵呵") print(func) 结果: <function func at 0x11 ...