博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MySQL半同步Semi-sync原理介绍【图说】
阅读量:4582 次
发布时间:2019-06-09

本文共 1190 字,大约阅读时间需要 3 分钟。

上图先。

如果还不了解Semi-sync可以阅读( | )

1. 优点

当事务返回客户端成功后,则日志一定在至少两台主机上存在。

MySQL在Semi-sync插件后,每一个事务需等待备库接收日志后才返回给客户端。如果做的是小事务,两台主机的延迟又较小,则Semi-sync可以实现在性能很小损失的情况下的零数据丢失。

2. 缺点

完成单条事务增加了额外的等待延迟,延迟的大小取决于网络的好坏。

Semi-sync不是分布式事务,主库会在自己完成事务后,等待备库接收事务日志

3. 主机Crash时的处理

 

备库Crash时,主库会在某次等待超时后,关闭Semi-sync的特性,降级为普通的异步复制,这种情况比较简单。

主库Crash后,那么可能存在一些事务已经在主库Commit,但是还没有传给任何备库,我们姑且称这类事务为"墙头事务"。"墙头事务"都是没有返回给客户端的,所以发起事务的客户端并不知道这个事务是否已经完成。

这时,如果客户端不做切换,只是等Crash的主库恢复后,继续在主库进行操作,客户端会发现前面的"墙头事务"都已经完成,可以继续进行后续的业务处理;另一种情况,如果客户端Failover到备库上,客户端会发现前面的“墙头事务”都没有成功,则需要重新做这些事务,然后继续进行后续的业务处理。

4. 其他

可以做多个备库,任何一个备库接收完成日志后,主库就可以返回给客户端了。

网络传输在并发线程较多时,一次可能传输很多日志,事务的平均延迟会降低。

"墙头事务"在墙头上的时候,是可以被读取的,但是这些事务在上面Failover的场景下,是被认为没有完成的。

 

semi-synchronous并不是100%的保证数据不会丢失,如果master在完成事务并将其发送给slave的时候崩溃,仍然可能造成数据丢失。只是相比于传统的异步复制,semi-synchronous replication能极大地提升数据安全。更为重要的是,它并不慢,MHA的作者都说他们在facebook的生产环境中使用了semi-synchronous(),所以我觉得真心没必要担心它的性能问题,除非你的业务量级已经完全超越了facebook或者google。

 

另外,如果是一主多备的话,可以认为备库永远不会挂掉(可以做多个备库,任何一个备库接收完成日志后,主库就可以返回给客户端了)。如果主库挂掉的话,自动或者人工切换到其中任何一个备库,这样客户端会重新操作上面失败的数据(主库可能有了,可也也可能没有上个事物的数据),因为对于客户端来说,无论crash的主库是否成功,客户端都会失败,客户端都会对备库重新操作上客户端认为失败的那个事物。基本可以保证了数据的不丢失问题。

 

转载于:https://www.cnblogs.com/qiumingcheng/p/5238571.html

你可能感兴趣的文章
基于jQuery左右滑动切换图片代码
查看>>
ajax 中boolean值技巧
查看>>
你需要知道的swift必备函数 map
查看>>
Instruments leak黑魔法定位内存泄漏
查看>>
centos 安装 pip
查看>>
Leetcode 53: Maximum Subarray
查看>>
[工具] UltraEdit使用技巧汇总
查看>>
DLU-1032 元气殿下,在线炸楼
查看>>
[Android] 基于 Linux 命令行构建 Android 应用(一):关于 Android 项目
查看>>
小程序开发初体验~
查看>>
Excel VBA入门(五)Excel对象操作
查看>>
在C++中调用DLL中的函数
查看>>
leetcode 32. Longest Valid Parentheses
查看>>
OpenSSL创建私有CA
查看>>
CSS3画腾讯QQ图标 无图片和js参考
查看>>
C#使用Emit生成构造函数和属性
查看>>
python pip源配置,pip配置文件存放位置
查看>>
[数据库]关于MAX()函数的一个坑
查看>>
实现前后滚动效果-axure设计实例
查看>>
c# DateTime 类
查看>>