加速MySQL主从同步,核心架构设计思路!(第2讲)
加速MySQL主从同步,核心架构设计思路!(第2讲)
《架构师之路:架构设计中的100个知识点》 2.MySQL主从同步加速架构
MySQL主从同步为什么这么慢?
如上所示,主库binlog同步到从库,从库单线程落盘relaylog,单线程重放relaylog,在数据量大并发量大的时候,就会很慢。
如何来进行优化?
可以多线程并行重放relaylog来缩短同步时间。
多线程并行重放能否保证与主库数据的一致性?
例如:三个set语句,分在三个线程重放,不能保障与主库执行序列的一致性。
update X set money=100 where uid=58;
update X set money=150 where uid=58;
update X set money=200 where uid=58;
随机分配肯定不行,但可以按库来分配:
(1)同一个MySQL实例中的同一个DB库,由一个线程来重放;
(2)不同的DB库,由不同的线程来并行重放;
以此来够缩短同步时间。
为什么很多公司还是同步很慢呢?
这个锅DBA不背。
大概是架构师在数据库架构设计时,MySQL使用了单库多表模式,升级为多库多表模式即可。
画外音:单库多表模式,还是一个线程重放。
数据库架构,多库多表模式有什么好处?
(1)主从同步快;
(2)逻辑上还能按照业务子业务进行库隔离;
()扩容方便,性能出现瓶颈时,加实例就能拆库扩容;
架构师说拆不开怎么办?
要么是架构师不懂,要么是把业务实现在SQL语句里了,导致拆不开。
如果已经是单库多表模式,库无法拆分开,还有其它方法缩短主从同步时间吗?
可以进一步优化:将主库上同时并行执行的事务,分为一组,编一个号,这些事务在从库上的回放也可以并行执行。
画外音:事务在主库上的执行同时进入到prepare阶段,说明事务之间没有冲突,否则就不可能提交。
简言之:同一组提交的事务,没有锁冲突,可以并行重放。
MySQL将组提交的信息存放在GTID中,使用mysqlbinlog工具,可以看到组提交内部的内部信息:
14:15 XXX GTID last_committed=0 sequence_numer=1
14:15 XXX GTID last_committed=0 sequence_numer=2
14:15 XXX GTID last_committed=0 sequence_numer=
14:15 XXX GTID last_committed=0 sequence_numer=4
如果具备相同的last_committed,说明它们在一个组内,可以并发回放执行。
总结
mysql并行复制,缩短主从同步时延的核心架构思路无非两点:
(1)单线程回放,升级为多线程并发回放;
(2)确保并发回放幂等性:“按照库幂等”,“按照组幂等”是两种不同颗粒度的实现方式;
更具体的
mysql5.5 -> 不支持并行复制,赶紧升级mysql;
mysql5.6 -> 支持按照库并行复制,赶紧升级“多库”架构;
mysql5.7 -> 支持按照GTID并行复制;
知其然,知其所以然。
思路比结论更重要。
补充阅读材料:
《mysql8.0:Multi-threaded Replication》
/
文章不长,5分钟搞定。
本文参与 腾讯云自媒体同步曝光计划,分享自。原始发表:2024-12-16,如有侵权请联系 cloudcommunity@tencent 删除架构设计mysql架构事务同步#感谢您对电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格的认可,转载请说明来源于"电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格
下一篇:预防DNS劫持+IP直通车优化
推荐阅读
留言与评论(共有 19 条评论) |
本站网友 发作性呼吸困难 | 14分钟前 发表 |
画外音:单库多表模式 | |
本站网友 抗氧化是什么意思 | 22分钟前 发表 |
否则就不可能提交 | |
本站网友 子妹同宫 | 14分钟前 发表 |
大概是架构师在数据库架构设计时 | |
本站网友 人头撞出挡风玻璃 | 30分钟前 发表 |
说明它们在一个组内 | |
本站网友 恭喜发财红包拿来 | 29分钟前 发表 |
可以并发回放执行 | |
本站网友 男足 | 5分钟前 发表 |
多库多表模式有什么好处?(1)主从同步快;(2)逻辑上还能按照业务子业务进行库隔离;()扩容方便 | |
本站网友 黑暗边缘 | 1分钟前 发表 |
由不同的线程来并行重放;以此来够缩短同步时间 | |
本站网友 狗肾 | 24分钟前 发表 |
从库单线程落盘relaylog | |
本站网友 力小任重 | 18分钟前 发表 |
“按照组幂等”是两种不同颗粒度的实现方式;更具体的mysql5.5 -> 不支持并行复制 | |
本站网友 武力拔寒散 | 13分钟前 发表 |
大概是架构师在数据库架构设计时 | |
本站网友 广州soho酒吧 | 11分钟前 发表 |
不能保障与主库执行序列的一致性 | |
本站网友 连锁经营业 | 27分钟前 发表 |
MySQL将组提交的信息存放在GTID中 | |
本站网友 变色龙引导 | 2分钟前 发表 |
在数据量大并发量大的时候 | |
本站网友 标本的意思 | 27分钟前 发表 |
库无法拆分开 | |
本站网友 服兵役年龄 | 4分钟前 发表 |
如何来进行优化?可以多线程并行重放relaylog来缩短同步时间 | |
本站网友 万科金色城品 | 14分钟前 发表 |
还是一个线程重放 | |
本站网友 祛斑养颜汤 | 28分钟前 发表 |
可以并行重放 | |
本站网友 崔自默 | 26分钟前 发表 |
update X set money=100 where uid=58;update X set money=150 where uid=58;update X set money=200 where uid=58;随机分配肯定不行 |