一种MySQL主从同步加速方案-改进

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介:

上一篇提出了一种改进主从延迟的方案。虽然能够实现主从无延迟同步,但在维护上比较复杂,还存在网络消耗问题,这里是一个改进的版本。

一、之前方案简述及问题分析

方案如图。其中用多个MySQL充当transfer的角色。每个transfer负责同步master的一部分表。在我的试验中有8transfer,也就是有8MySQL实例。

问题: 1维护复杂。在从库及其上需要增加8个实例,增加维护成本,而且不利于加表操作。

2增加网络开销。虽然在transferIO线程作了过滤,减少每个transfer的写盘量和SQL线程的空转,但master还是向每个tranfer发了所有的数据。网络传输的日志量是原来的n倍。

二、改进方案

基于上述的两个问题考虑,考虑将transfer多进程改成多线程

如图:

1、用一个MySQL充当transfer transfer设置为master的主库。IO线程负责接收Master传过来的日志。但不是写到一套relay-log文件,而是SLAVE_THREAD每个表的日志固定分配到一套relay-log

2、相应地起SLAVE_THEADSQL线程,负责读取对应目录下的relaylog,发送给slave

三、方案对比

从上面描述中看出,master发给transfer的日志总量只有一份。只需要增加SLAVE_THREAD slave信息的配置,维护简单。

两个方案的相同点是使用文件队列(多套relaylog),保证在transfer出现异常时不丢数据。

效果对比,原生版本

上个方案

改进方案

说明:改进方案也能保证无延迟同步,性能都是原生版本的7倍左右。由于线程更少,从库的QPS表现很稳定,cpu idle也比上个方案高。

四、两个为什么

1、为什么不直接把transferslave用?

实际上是可以的,作了简单实验发现与“改进方案”的从库QPS相同,好处是减少了一层transfer的逻辑。一般来说这种工具也不会放到和slave一个机器,直接用作slave就少了一个机器。

不过直接改slave的代码还是推广比较麻烦。而且不得不承认的是,这个方案存在一个硬伤:跨表更新的语句顺序无法严格保证。――这也是这两个方案的应用前提:没有跨表语句或者对这种出现的情况要求不严格。

2、为什么不直接写一个工具而用MySQL

其实作transferMySQL并不像想象的那么庞大。不需要的引擎可以都不编译进去,其实只需要框架层的逻辑和一个myisam引擎即可。而它提供了很多管理命令,比如一个现成的客户端,能够方便的stop slavechange master,能够用show slave status看同步状态。这些作为这个工具的基本功能,自己一个个实现重复轮子太多了。

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
30天前
|
SQL 存储 关系型数据库
MySQL的主从复制&主从同步
MySQL的主从复制&主从同步
28 0
|
1月前
|
Ubuntu 关系型数据库 MySQL
使用Ubuntu和Windows电脑实现Mysql主从同步(详细操作步骤)
使用Ubuntu和Windows电脑实现Mysql主从同步(详细操作步骤)
27 2
|
3月前
|
Oracle 关系型数据库 MySQL
MySQL相关(六)- 事务隔离级别的实现方案(MVCC)
MySQL相关(六)- 事务隔离级别的实现方案(MVCC)
38 0
|
2月前
|
SQL 存储 关系型数据库
MySQL索引(二)索引优化方案有哪些
MySQL索引(二)索引优化方案有哪些
47 0
|
4月前
|
中间件 关系型数据库 Java
MySQL数据库分库分表方案
MySQL数据库分库分表方案
136 0
MySQL数据库分库分表方案
|
10天前
|
SQL 关系型数据库 MySQL
mysql主从同步出错解决办法
mysql主从同步出错解决办法
7 0
|
21天前
|
canal 消息中间件 关系型数据库
【分布式技术专题】「分布式技术架构」MySQL数据同步到Elasticsearch之N种方案解析,实现高效数据同步
【分布式技术专题】「分布式技术架构」MySQL数据同步到Elasticsearch之N种方案解析,实现高效数据同步
66 0
|
21天前
|
SQL 关系型数据库 MySQL
【MySQL技术之旅】(7)总结和盘点优化方案系列之常用SQL的优化
【MySQL技术之旅】(7)总结和盘点优化方案系列之常用SQL的优化
36 1
|
1月前
|
缓存 关系型数据库 MySQL
史上最全MySQL 大表优化方案(长文)
史上最全MySQL 大表优化方案(长文)
335 0
|
6月前
|
SQL 监控 关系型数据库
Mysql主从同步报错解决:Error executing row event: Table zabbix.history-..
Mysql主从同步报错解决:Error executing row event: Table zabbix.history-..