+-
高性能MySql系列-读写分离/主从复制/主从复制延时解决方案
首页 专栏 mysql 文章详情
0

高性能MySql系列-读写分离/主从复制/主从复制延时解决方案

小强大人 发布于 3 月 8 日

读写分离

基于MySql自身提供的主从复制架构,写操作请求发往主库,读操作请求发往从库。一个主库可以挂多个从库。主库完成写操作后,将数据通过binlog方式同步给从库。

主从复制工作原理

主库完成写操作后,将变更写入binlog日志,从库的IO线程从主库的binlog日志拉取拷贝数据变更日志,写入到relay中继日志,然后从库的SQL线程从relay日志中重放sql写操作,完成数据的同步。

主从复制延时较长解决方案

由于从库从主库拷贝日志以及串行执行SQL的特点,在高并发情况下,从库与主库的数据同步是有延时的。换句话说,在主库刚写入的数据,在从库不一定立马能读到。这就需要一定的策略来解决这个问题。
常见的解决方案有两种(均基于MySql提供的机制):
1.半同步复制:在主库写入数据时,强制串行同步到从库,等待至少一个从库的IO线程写入relay中继日志并回复ack报文后,才认为写操作完成。
2.并行复制:从库开启多个SQL线程,并行执行relay日志的不同库的binlog变更操作,然后并行重放SQL变更操作,相比串行能够达到降低延时的目的。

另外,在应用程序和MySql架构层面,也有如下方案:
1.设计多主结构,单个主库写压力过大导致的延时问题,分摊到多个主库,能够降低同步延时。
2.刚写入的数据,如果想立马读出来,就不从从库读,改为强制从主库读取,避免延时导致的读取不到数据问题。
3.重写代码,对于不要求立马读出来的业务场景,尽可能不立马读数据,等一会再读。

mysql
阅读 38 发布于 3 月 8 日
收藏
分享
本作品系原创, 采用《署名-非商业性使用-禁止演绎 4.0 国际》许可协议
avatar
小强大人
20 声望
1 粉丝
关注作者
0 条评论
得票 时间
提交评论
avatar
小强大人
20 声望
1 粉丝
关注作者
宣传栏
目录

读写分离

基于MySql自身提供的主从复制架构,写操作请求发往主库,读操作请求发往从库。一个主库可以挂多个从库。主库完成写操作后,将数据通过binlog方式同步给从库。

主从复制工作原理

主库完成写操作后,将变更写入binlog日志,从库的IO线程从主库的binlog日志拉取拷贝数据变更日志,写入到relay中继日志,然后从库的SQL线程从relay日志中重放sql写操作,完成数据的同步。

主从复制延时较长解决方案

由于从库从主库拷贝日志以及串行执行SQL的特点,在高并发情况下,从库与主库的数据同步是有延时的。换句话说,在主库刚写入的数据,在从库不一定立马能读到。这就需要一定的策略来解决这个问题。
常见的解决方案有两种(均基于MySql提供的机制):
1.半同步复制:在主库写入数据时,强制串行同步到从库,等待至少一个从库的IO线程写入relay中继日志并回复ack报文后,才认为写操作完成。
2.并行复制:从库开启多个SQL线程,并行执行relay日志的不同库的binlog变更操作,然后并行重放SQL变更操作,相比串行能够达到降低延时的目的。

另外,在应用程序和MySql架构层面,也有如下方案:
1.设计多主结构,单个主库写压力过大导致的延时问题,分摊到多个主库,能够降低同步延时。
2.刚写入的数据,如果想立马读出来,就不从从库读,改为强制从主库读取,避免延时导致的读取不到数据问题。
3.重写代码,对于不要求立马读出来的业务场景,尽可能不立马读数据,等一会再读。