mysql redo 物理复制 彭立勋_阿里云数据库技术组数据库专家彭立勋 - 阿里云RDS for MySQL的若干优化...

1. 阿里云RDS for MySQL的若干优化 阿里巴巴云计算 彭立勋

2. Topic • Double Sync Replication • InnoDB Redo Replication • Statement/Transaction Timeout • InnoDB Asynchronous Optimization

3. Double Sync Replication ——对MySQL逻辑复制可靠性的改进 阿里巴巴云计算 彭立勋

4. 异步复制存在的缺陷 • 主库事务提交并不需要备库ACK • 备库无法得知拖取的是否是最新的日志 • 宕机后无法利用备库本身的信息得知是否跟主库一致 • 所以,备库无法及时得知主库的状态

5. 原生Semi-Sync Replication机制

6. SemiSync存在的缺陷 • 主库事务提交需要备库ACK • 网络超时后备库降级为异步复制 • 超时设太小,则经常发生超时 • 超时设太大,则经常导致主库hang • 网络恢复后需要追赶日志,追赶期间备库状态依然不可知 • 因为无法得知宕机时备库是否跟主库是SemiSync状态 • 所以依然无法得知备库是否跟上主库 • 因此,SemiSync并没有解决异步复制的根本缺陷

7. 异步复制/SemiSync存在的问题

8. 我们要达成的目标 • 前提 • 主机保证可用性5个9 • 网络保证可用性5个9 • 宕机瞬时没有发生网络超时 • 目标 • 备库随时可以得知自己的状态(跟主库同步 或 没有跟主库同步) • 在确认跟主库不同步时,通知应用参与数据补偿,并且告知所缺数据范围 • 在确认跟主库同步时,可以保证备库执行到跟主库一致状态再提供服务 • 核心:避免备库状态不可知!

9. 攻破SemiSync的缺点 • SemiSync一旦超时断开,即使网络恢复,依然需要补偿拖取断开期 间的日志 • 如果SemiSync超时断开,网络恢复后不再补偿数据,只发最新日志,如何? • 只要宕机时网络正常,备库始终会知道主库最新位点 • 依此可以判断备库是否跟主库日志有差异 • 备库如果只接收最新数据,那么中断期间的数据如何处理? • 异步复制可以在不影响主库提交的情况下拖取日志 • 利用异步复制的日志可以进行完整的日志回放

10. 结合两种复制 • 异步复制(Async_Channel) • 拖取连续日志,保证备库接收的日志不中断 • 接收到日志后直接执行 • 半同步复制(Sync_Channel) • 拖取最新日志,保证备库始终知道最新的日志位置 • 接收到日志后并不执行,只保留位置 • 一致性判断 • 比较异步复制和半同步复制的日志段,可以判断备库日志可否连续接上

11. 结合两种复制

12. 两个通道如何做到(1) • 多源复制可以在一个Slave上创建多个独立通道分别进行复制 • 问题1:同一个ServerID发起两个通道到Master,Master会认为是 原Slave断开没有主动发起close连接,从而会踢掉先连上的通道 • 解决:可以将SemiSync通道伪装一个ServerID,避免被踢

13. 两个通道如何做到(2) • 问题2:一个Slave同时有一个非SemiSync通道和一个SemiSync通 道,而SemiSync设置是保存在全局的 • 解决:把SemiSync改为Per-Channel的设置,将SemiSyncSlave类 转移到Master_info结构体中

14. 如何判断两个通道日志是否连续 • 利用两个通道收到的GTID序号作对比 • 利用两个通道收到日志的Log_file_name和Log_file_pos • 如果半同步通道的日志起始点小于等于异步通道结束点,那么备库 其实有完整的日志,反之备库无法跟上主库

15. 如何判断两个通道日志是否连续

16. CASE 1: 无需补偿 • 备库两通道数据结束点完全一致

17. CASE 2: 无法补偿 • 备库两通道数据合集存在断点

18. CASE 3: 可以补偿 • 备库两通道数据合集没有断点

19. 如何补偿数据 • 利用半同步通道收到的日志,在异步通道应用完日志后,启用半同 步通道应用日志 • 利用GTID来过滤重复Event • 提供 REPAIR SLAVE 命令来尝试补偿数据并返回备库状态,根据 Result列的结果判断备库是否跟主库一致

20. InnoDB Redo Replication ——完全实现物理层的复制 阿里巴巴云计算 彭立勋

21. 复制架构 Master Purge Receiver Log Dump Thread Send Purge Info Request Send Purge Controller Polar IO Thread Polar.cnf Log_apply thread Ib_logfile Ib_checkpoin t Polar File Ib_logfile Polar File Ib_checkpoin t Worker Thread Worker Thread …… Worker Thread Slave

22. Show Polar Status

23. On Master

24. On Slave

25. Statement/Transaction Timeout ——避免语句/事务长时间占用资源 阿里巴巴云计算 彭立勋

26. 无限制执行Query的危害 • 执行时间过长的SELECT可能导致占用大量CPU/IO资源,拖慢整个 服务器 • UPDATE/DELETE语句不提交,可能导致长时间持有锁资源,而且不 易从PROCESSLIST中察觉

27. 语句级超时(MAX_STATEMENT_TIME)

28. 事务级超时(rds_trx_idle_timeout) • 可区分只读事务(rds_trx_readonly_idle_timeout),读写事务分 别设置(rds_trx_changes_idle_timeout),也可以统一设置。

29. InnoDB Asynchronous Optimization ——全异步整理InnoDB空间(From FB) 阿里巴巴云计算 彭立勋

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值