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

Posted 小强大人

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了高性能MySql系列-读写分离/主从复制/主从复制延时解决方案相关的知识,希望对你有一定的参考价值。

读写分离

基于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系列-读写分离/主从复制/主从复制延时解决方案的主要内容,如果未能解决你的问题,请参考以下文章

Mysql系列—— Mysql主从复制配置

学会MySQL主从复制读写分离,看这篇就够了

Redis系列深入浅出Redis主从复制之读写分离一篇搞懂Redis复制

高性能高可用MySQL主从复制读写分离与高可用配置

mysql主从复制以及读写分离

MySQL 5.6 主从复制配置