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
微信号
公众号