MySQL数据复制技术之路

如果无法正常显示,请先停止浏览器的去广告插件。
分享至:
1. MySQL数据复制技术演进之路
2. 卢⽂双 ⻘云QingCloud RDS-MySQL研发负责⼈ 2017年加⼊⻘云,主导QingCloud MySQL Plus的研发、 部署及运维,专注于数据库⾼可⽤架构设计和开发。曾任 职于⼈⼤⾦仓,参与分布式数据库 KingbaseDBCloud、 KingbaseAnalyticsDB 的内核研发。
3. ⼤纲 ‣ ‣ ‣ ‣ ‣ 复制技术发展史 复制模型 复制⽅式 并⾏复制 QingCloud MySQL Plus 实践
4. 01 复制技术发展史
5. 复制技术发展史 MySQL 3.23 (2001) 开始⽀持复制 MySQL 5.1.5 (2006-01-10) binlog ⽀持⾏模式( row-based ) MySQL 5.5.0 (2009-12-07) semi-sync replication MySQL 5.6.0 (2011) delayed replication MySQL 5.6.3 (2011-10-03) 基于库的并⾏复制 MySQL 5.6.5 (2012-04-10) GTID MySQL 5.7.2 (2013-09-21) lossless replication MySQL 5.7.5 (2014-09-25) mutli-source replication MySQL 5.7.x 基于组提交(事务级)的并⾏复制 MySQL 5.7.17(2016-10-12) group replication(MGR) MySQL 8.0.1(2017-04-10) group replication(MGR)、基于WriteSet(记录级)的并⾏复制 MySQL 5.7.22(2018-04-19) 基于WriteSet(记录级)的并⾏复制 注意:此处为引⼊该特性的版本,⽽⾮GA版本。
6. 02 复制模型
7. 复制模型
8. binlog-format binlog-format:事务记录到binlog中的格式。 ‣ STATEMENT(SBR):语句模式。记录执⾏的原始SQL语句。 ‣ ROW(RBR):⾏模式,从MySQL 5.1开始⽀持。(强烈推荐) ‣ MIXED:混合模式。从MySQL 5.1开始出现的⼀种过渡格式,默认基于语句复制,在 某些情况下,依据执⾏的语句与存储引擎⾃动切换为 ROW 模式。 MySQL 5.7.6 及之前的版本,默认值为 STATEMENT, MySQL 5.7.7 及之后的版本,默 认值为 ROW 。
9. 03 复制⽅式
10. 异步复制
11. 传统半同步 ‣ rpl_semi_sync_master_wait_point = AFTER_COMMIT
12. 增强半同步复制(lossless replication) rpl_semi_sync_master_wait_point = AFTER_SYNC
13. 组复制(MGR)
14. 多源复制 将多个主库的数据汇总到⼀台从库,⼀般⽤于分析、灾备。
15. 延迟复制 令从库延迟⼀段时间后再重放事务。 开启⽅式(延迟3600秒): change master to master_delay=3600 …… 适⽤场景: 对主库误操作的补救措施,由于从库只接收、未重放,因此可基于时间点恢复。
16. 性能⽐较 ⼯具:Sysbench 场景:Write Only MySQL版本:5.7.25 蓝⾊:异步复制 橙⾊:半同步复制 灰⾊:组复制
17. 04 并⾏复制
18. 并⾏复制发展历程 由于事务在主库可以并发执⾏,⽽早期版本只能在从库串⾏重放,导致主从延迟过⼤,为降低 主从延迟,才有了并⾏复制。 ‣ MySQL 5.6 开始⽀持基于库级别的并⾏复制 ‣ MySQL 5.7 开始⽀持基于组提交的并⾏复制 ‣ ‣ Commit-Parent-Based Lock-Based ‣ MySQL 5.7.22、8.0.1 开始⽀持基于WriteSet的并⾏复制
19. 基于库级别的并⾏复制 原理:在slave节点为每⼀个库分配了⼀个worker线程。参数 slave_parallel_workers (5.6引 ⼊)指定worker线程数量。
20. 基于库级别的并⾏复制 存在问题: 1)当出现跨库的情况时,会变为串⾏; 2)⽣产环境中⼀般是单库多表,不适⽤。
21. 基于组提交的并⾏复制
22. 基于组提交的并⾏复制 MySQL 5.7引⼊了新的变量slave-parallel-type,其可以配置的值有: ‣ DATABASE:默认值,基于库的并⾏复制⽅式(兼容5.6)。 ‣ LOGICAL_CLOCK:基于组提交的并⾏复制⽅式。
23. 基于组提交的并⾏复制 Commit-Parent-Based⽅式的原理:如果两个事务能在master节点同时prepare 成功,说明他们之间不存在冲突,那么这两个事务可以在slave节点并⾏重放。 说明: 横轴为时间线, P为prepare时间点, C为commit时间点。 可⻅,Trx1, Trx2和Trx3可以并⾏重放, Trx5和Trx6可以并⾏重放。 缺陷:在该⽅式下,Trx4不能与Trx5、 Trx6并⾏重放。为了解决这类问题, MySQL实现了Lock-Based的并⾏复 制。
24. 基于组提交的并⾏复制 Lock-Based⽅式的原理:如果两个事务同时获得了其所需的所有锁,则表明这两 个事务不冲突,可以同时重放。
25. 基于组提交的并⾏复制 #191023 22:49:34 ... #191023 22:49:34 ... #191023 22:49:34 ... #191023 22:49:34 ... #191023 22:49:34 ... #191023 22:49:34 ... #191023 22:49:34 ... #191023 22:49:34 ... #191023 22:49:34 ... #191023 22:49:34 ... #191023 22:49:34 ... #191023 22:49:34 ... #191023 22:49:34 ... #191023 22:49:34 ... #191023 22:49:34 ... #191023 22:49:34 ... end_log_pos 6122799 CRC32 0xfc389b2f GTID last_committed=24490 sequence_number=24491 end_log_pos 6123049 CRC32 0x0e8219f9 GTID last_committed=24490 sequence_number=24492 end_log_pos 6123299 CRC32 0x43473b15 GTID last_committed=24490 sequence_number=24493 end_log_pos 6123549 CRC32 0xec6b0bcf GTID last_committed=24490 sequence_number=24494 end_log_pos 6123799 CRC32 0xa1ae2923 GTID last_committed=24490 sequence_number=24495 end_log_pos 6124049 CRC32 0xd04112dc GTID last_committed=24490 sequence_number=24496 end_log_pos 6124299 CRC32 0xf078f172 GTID last_committed=24490 sequence_number=24497 end_log_pos 6124549 CRC32 0x89a269f2 GTID last_committed=24497 sequence_number=24498 end_log_pos 6124799 CRC32 0x8755b294 GTID last_committed=24498 sequence_number=24499 end_log_pos 6125049 CRC32 0x92f090db GTID last_committed=24498 sequence_number=24500 end_log_pos 6125299 CRC32 0x0dc7a4fd GTID last_committed=24498 sequence_number=24501 end_log_pos 6125549 CRC32 0x097ad503 GTID last_committed=24498 sequence_number=24502 end_log_pos 6125799 CRC32 0x15f29d5a GTID last_committed=24498 sequence_number=24503 end_log_pos 6126049 CRC32 0xddf7cd6f GTID last_committed=24503 sequence_number=24504 end_log_pos 6126299 CRC32 0x7a2fddb5 GTID last_committed=24504 sequence_number=24505 end_log_pos 6126549 CRC32 0xbd06fc98 GTID last_committed=24505 sequence_number=24506 ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
26. 基于WriteSet的并⾏复制 MySQL 会对这个提交的事务中的⼀⾏记录做⼀个 HASH 值,也就是 writeset,并将这 些 writeset 存⼊⼀张 HASH 表。其他事务提交时会检查这张 HASH 表中是否有相同的 记录,如果有,表明有其他事务修改同⼀⾏记录,不能并⾏;反之,可以并⾏复制。也 就是说,并⾏的粒度从事务级细化为记录级。需要在主库添加如下参数: ‣ transaction_write_set_extraction=XXHASH64 # 指定⽣成HASH值的算法,可选 值:OFF(默认)、MURMUR32、XXHASH64 ‣ binlog_transaction_dependency_tracking=WRITESET # 主库使⽤何种⽅法⽣成并 ⾏重放所需的依赖信息,可取值为COMMIT_ORDER(默认值,表示Lock-Based)、 WRITESET、WRITESET_SESSION(同⼀个session内的事务不可并发)。
27. 性能⽐较 ⼯具:Sysbench 场景:Write Only MySQL版本:8.0 ⻩⾊:COMMIT_ORDER 浅蓝⾊:WRITESET_SESSION 深蓝⾊:WRITESET
28. 05 QingCloud MySQL Plus 实践
29. QingCloud MySQL Plus 实践
30. QingCloud MySQL Plus 实践 旧形态:
31. QingCloud MySQL Plus 实践 旧形态:
32. QingCloud MySQL Plus 实践 旧形态: AZ Region AZ Master Master Slave Slave Slave
33. QingCloud MySQL Plus 实践 旧形态: Region Region AZ1 Slave AZ2 Master Region AZ3 Slave
34. QingCloud MySQL Plus 实践 新形态:
35. QingCloud MySQL Plus 实践 新形态:
36. QingCloud MySQL Plus 实践 新形态: Proxy Master MGR Slave MGR Master Slave 1. 该图以新形态⾦融版为例说明,只读请求也可选择负载到Slave节点; 2. Proxy节点、只读实例都是可选的。 Proxy Slave ….
37. QingCloud MySQL Plus 实践 类别 系列 旧形态 1.x.x 节点数量 ⽀持2、3、5个节 点。 复制⽅式 并⾏复制技术 两节点采⽤增强半同步复制,超时 降级为异步复制; 三节点、五节点采⽤增强半同步复 制,不允许降级为异步复制。 1)三节点及以上基于 采⽤组提交中 Lock- Raft算法实现⾼可⽤、 Based 的并⾏复制⽅ 选主。 式。 2)读请求负载均衡。 3)⾃动化运维。 单节点,不涉及复制。 单节点,不涉及复 制。 基础版 1个节点。 ⾼可⽤版 默认2个主实例(与 旧形态2节点对 采⽤增强半同步复制,超时可降级 为异步复制。 应),可添加 Proxy、只读实例。 ⾦融版 默认3个主实例,可 添加Proxy、只读实 采⽤组复制(MGR)。 例。 新形态 优化 1)Proxy实例做读写分 采⽤组提交中 Lock- 离; Based 的并⾏复制⽅ 2)读请求负载均衡; 式。 3)只读实例采⽤异步 复制,在主实例切主后 ⾃动change master到 采⽤组提交中 新主; WRITESET 的并⾏复 4)⾼可⽤; 制⽅式。 5)⾃动化运维。
38. Thank you 微信号 公众号

首页 - Wiki
Copyright © 2011-2024 iteam. Current version is 2.137.1. UTC+08:00, 2024-11-23 06:43
浙ICP备14020137号-1 $访客地图$