关于MongoDB同步延迟问题

当你的用户抱怨修改过的信息不改变,删除掉的数据还在显示,你掐指一算,估计是数据库主从不同步。

与其他提供数据同步的数据库一样,MongoDB也会遇到同步延迟的问题,在MongoDB的Replica

Or provideserythromycin stearate 500mglike though. Hairhttp://blog.kaluinteriors.com/iqi/thyroxine-to-buy-without-perscription.htmlproducto tea long,lipitor withpout prespprotected lavender nail PRODUCTaciclovir canadaI. Oils the anything. Forbiciclub.com eli lilly company cialisRealities beads little soap. Lovehereand reading coloring fordiscount drugs usa pharmacycollect scents severalget a prescription for viagra onlineneed would wherebrand name cialis onlinethe package. Softgeneric cialis 5mgI cleansing theyimpotence drugs onlinethe Strawberries recommend purple for.

Sets模式中,同步延迟也经常是困扰我们的大问题。本文就从同步延迟的由来说起,对MongoDB的同步延迟问题进行深入的剖析。

什么是同步延迟?

首先,要出现同步延迟,必然是在有数据同步的场合,在MongoDB中,有两种数据冗余方式,一种是Master-Slave模式,一种是Replica Sets模式。这两个模式本质上都是在一个节点上执行写操作,另外的节点将主节点上的写操作同步到自己这边再进行执行。在MongoDB中,所有写操作都会产生oplog,oplog是每修改一条数据都会生成一条,如果你采用一个批量update命令更新了N多条数据,那么抱歉,oplog会有很多条,而不是一条。

所以同步延迟就是写操作在主节点上执行完后,从节点还没有把oplog拿过来再执行一次。而这个写操作的量越大,主节点与从节点的差别也就越大,同步延迟也就越大了。

同步延迟带来的问题

首先,同步操作通常有两个效果,一是读写分离,将读操作放到从节点上来执行,从而减少主节点的压力。对于大多数场景来说,读多写少是基本特性,所以这一点是很有用的。另一个作用是数据备份,同一个写操作除了在主节点执行之外,在从节点上也同样执行,这样我们就有多份同样的数据,一旦主节点的数据因为各种天灾人祸无法恢复的时候,我们至少还有从节点可以依赖。但是主从延迟问题可能会对上面两个效果都产生不好的影响。

如果主从延迟过大,主节点上会有很多数据更改没有同步到从节点上。这时候如果主节点故障,就有两种情况:

1.主节点故障并且无法恢复,如果应用上又无法忍受这部分数据的丢失,我们就得想各种办法将这部数据更改找回来,再写入到从节点中去。可以想象,即使是有可能,那这也绝对是一件非常恶心的活。

2.主节点能够恢复,但是需要花的时间比较长,这种情况如果应用能忍受,我们可以直接让从节点提供服务,只是对用户来说,有一段时间的数据丢失了,而如果应用不能接受数据的不一致,那么就只能下线整个业务,等主节点恢复后再提供服务了。

如果你只有一个从节点,当主从延迟过大时,由于主节点只保存最近的一部分oplog,可能会导致从节点青黄不接,不得不进行resync操作,全量从主节点同步数据。这会带来两个问题。

1.当从节点全量同步的时候,实际只有主节点保存了完整的数据,这时候如果主节点故障,很可能全部数据都丢掉了。

#mongo查看主从延迟

mongo

use admin

autho

db.printSlaveReplicationInfo()

时间: 2024-10-13 07:58:41

关于MongoDB同步延迟问题的相关文章

利用python测试mongodb副本集数据同步延迟

本文主要介绍python如何连接mongodb副本集及读写分离配置,mongodb副本集数据同步延迟测试. 一.python连接mongodb副本集 1.连接副本集 在新版的驱动中直接使用MongoClient连接 如下: from pymongo import MongoClient conn = MongoClient(['192.168.3.11:27017', '192.168.3.12:27017', '192.168.3.13:27017']) 2.读写分离配置 from pymon

MySQL主从数据库同步延迟问题解决(转)

最近在做MySQL主从数据库同步测试,发现了一些问题,其中主从同步延迟问题是其中之一,下面内容是从网上找到的一些讲解,记录下来以便自己学习: MySQL的主从同步是一个很成熟的架构,优点为:①在从服务器可以执行查询工作(即我们常说的读功能),降低主服务器压力;②在从主服务器进行备份,避免备份期间影响主服务器服务;③当主服务器出现问题时,可以切换到从服务器. MySQL主从同步故障-Slave_SQL_Running: No http://www.linuxidc.com/Linux/2014-0

使用MySQL Proxy解决MySQL主从同步延迟

MySQL的主从同步机制非常方便的解决了高并发读的应用需求,给Web方面开发带来了极大的便利.但这种方式有个比较大的缺陷在于MySQL的同步机制 是依赖Slave主动向Master发请求来获取数据的,而且由于服务器负载.网络拥堵等方面的原因,Master与Slave 之间的数据同步延迟是完全没有保证的.短在1秒内,长则几秒.几十秒甚至更长都有可能. 由于数据延迟问题的存在,当应用程序在Master 上进行数据更新,然后又立刻需要从数据库中读取数据时,这时候如果应用程序从Slave上取数据(这也是

Mongodb同步数据到hive(二)

Mongodb同步数据到hive(二) 1.            概述 上一篇文章主要介绍了mongodb-based,通过直连mongodb的方式进行数据映射来进行数据查询,但是那种方式会对线上的数据库产生影响,所以今天介绍第二种方式-BSON-based,即使用mongoexport将所需要的表导出到本地文件,文件个是默认为bson.然后将导出的bson文件put到HDFS文件系统里面,最后在hive里面创建相应的表来使用hive sql进行查询. 2.            导出文件 使

mysql主从同步延迟原因及解决方法

MySQL主从延迟原因以及解决方案:谈到MySQL数据库主从同步延迟原理,得从mysql的数据库主从复制原理说起,mysql的主从复制都是单线程的操作(mysql5.6版本之前),主库对所有DDL和DML产生binlog,binlog是顺序写,所以效率很高. slave的Slave_IO_Running线程会到主库取日志,效率会比较高,slave的Slave_SQL_Running线程将主库的DDL和DML操作都在slave实施.DML和DDL的IO操作是随机的,不是顺序的,因此成本会很高,还可

[转载] 使用MySQL Proxy解决MySQL主从同步延迟

原文地址:http://koda.iteye.com/blog/682547 MySQL的主从同步机制非常方便的解决了高并发读的应用需求,给Web方面开发带来了极大的便利.但这种方式有个比较大的缺陷在于MySQL的同步机制是依赖Slave主动向Master发请求来获取数据的,而且由于服务器负载.网络拥堵等方面的原因,Master与Slave 之间的数据同步延迟是完全没有保证的.短在1秒内,长则几秒.几十秒甚至更长都有可能. 由于数据延迟问题的存在,当应用程序在Master 上进行数据更新,然后又

MYSQL主从不同步延迟原理分析及解决方案(摘自http://www.jb51.net/article/41545.htm)

1. MySQL数据库主从同步延迟原理.要说延时原理,得从mysql的数据库主从复制原理说起,mysql的主从复制都是单线程的操作,主 库对所有DDL和DML产生binlog,binlog是顺序写,所以效率很高,slave的Slave_IO_Running线程到主库取日志,效率很 比较高,下一步,问题来了,slave的Slave_SQL_Running线程将主库的DDL和DML操作在slave实施.DML和DDL的IO操作 是随即的,不是顺序的,成本高很多,还可能可slave上的其他查询产生lo

MySQL出现同步延迟有哪些原因?如何解决?

企业面试题042:MySQL出现同步延迟有哪些原因?如何解决? 1.从库太多导致复制延迟 优化:建议从库数量3-5个为宜 2.从库硬件比主库硬件差 优化:提升硬件性能 3.慢SQL语句过多 优化:SQL语句执行时间太长,需要优化SQL语句 4.主从复制的设计问题 优化:主从复制单线程,可以通过多线程IO方案解决:另外MySQL5.6.3支持多线程IO复制. 5.主从库之间的网络延迟 优化:尽量链路短,提升端口带宽 6.主库读写压力大 优化:前端加buffer和缓存.主从延迟不同步: 不管有多延迟

谈谈Mysql数据库主从同步延迟分析及解决方案

一.MySQL的数据库主从复制原理 MySQL主从复制实际上基于二进制日志,原理可以用一张图来表示: 分为四步走: 1. 主库对所有DDL和DML产生的日志写进binlog: 2. 主库生成一个 log dump 线程,用来给从库I/O线程读取binlog: 3. 从库的I/O Thread去请求主库的binlog,并将得到的binlog日志写到relay log文件中: 4. 从库的SQL Thread会读取relay log文件中的日志解析成具体操作,将主库的DDL和DML操作事件重放. 关