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


与其他提供数据同步的数据库一样,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

db.auth

db.printSlaveReplicationInfo()