mysql主从同步延迟方案解决的学习心得

 mysql主从备份之间存在同步,半同步与异步的方式,对于同步与异步相对而言比较好理解,但是同步存在延迟比较大,效率不高,异步又不能百分百保证数据的一致性。而半同步方式正好是两者的兼容。

    mysql半同步模式是在mysql5.5版本以后增加的,所谓半同步指当master事物提交后,等待slave接收日志后才返回给应用层表示成功,事物足够小,延迟较小的话,通过半同步的模式,牺牲较小的性能就能保证数据不丢失。

    但是半同步的方式也存在着缺陷,完成单条事物增加了额外的开销,同时延迟的大小也取决于网络的好坏。

    采用半同步的方式,当slave down机时,master在一次等待超时时,会关闭半同步的特性,切换到异步的方式。master down机后,可能存在一些事务已经在主库Commit,但是还没有传给任何slave,这类事务被称为"墙头事务",“墙头事务”都是没有返回给slave的,所以发起事务的应用层并不知道这个事务是否已经完成。这时,如果应用层不做切换,只是等down机的master恢复后,继续在master进行操作,客户端会发现前面的"墙头事务"都已经完成,可以继续进行后续的业务处理;另一种情况,如果应用层Failover到slave上,应用层会发现前面的“墙头事务”都没有成功,则需要重新做这些事务,然后继续进行后续的业务处理。

    对于slave可以有多个,任何一个slave接收完成日志后,master就可以返回给应用层了,网络传输在并发线程较多时,一次可能传输很多日志,事务的平均延迟会降低。"墙头事务"在墙头上的时候,是可以被读取的,但是这些事务在上面Failover的场景下,是被认为没有完成的。

 

     (以上内容是跟同事讨论时查资料的一点小结,相关理解来自于查找资料)

 

http://blog.csdn.net/vhomes/article/details/8449013

你可能感兴趣的:(Mysql主从)