MySQL 主从原理、问题、解决方案和应用——丁奇

2020-02-23 243浏览

  • 1. MySQL主从同步 --原理、问题、解决方案和应用 @淘宝丁奇 2009-8-22
  • 2. 一.MySQL主从同步基本流程 二.延迟的原因 三.解决方案一 四.解决方案二 --Transfer 五.应用场景和业务限制 六.保障和退化 七.在多主同步的应用 八.不能解决的光速问题 九.不能解决的更新延迟
  • 3. MySQL主从同步基本流程 Master Slave
  • 4. MySQL主从同步延迟原因 什么是延迟--2和6的时间间隔 1 为什么延迟 2、5的文件更新通知?不是 2 3的网络延迟? 不是 4的写盘延迟? 不是 3 5 6 4 等等。。。1和2之间那个箭头怎么不画出来--我们不关心
  • 5. MySQL主从同步延迟原因 延迟原因 主库更新多线程 从库更新单线程 都是箭头,你咋这么苗条呢?
  • 6. MySQL主从同步解决方案 解决方案: 从库变成多线程更新 反问一句: 三秒钟变格格么。有那么好 MySQL为什么不支持? 说胖就胖了啊。。。
  • 7. MySQL主从同步解决方案 直接多线程存在的问题: 语句顺序无法保证--insert和 update调换有什么问题? 又瘦回去了,怂了。。。
  • 8. MySQL主从同步解决方案 咔~ 导演说咔了吗? 其实我准备变身, 左上角的兄弟, 后面好像都没你的戏份了, 能不能先洗洗睡去?
  • 9. MySQL主从同步解决方案 解决方案分析: 1、一定要多线程!为什么? 2、多线程又会打乱顺序 3、总是有些没那么严格的,是吧? 4、同一个表的更新必须按照顺序 5、不同表呢? 6、先作个不同表之间并行的,线上一个库都有很多表 过渡太久了吧,变身的那位呢?
  • 10. MySQL主从同步解决方案 Slave 认不出来了,来个对比照
  • 11. MySQL主从同步解决方案 应该是解决了 从此Master和Slave过着幸福的生活? 太naï ve了。。。 实际上,刚才那个是副导演 导演回来了,说: 咱这剧本不允许主角变身! 未完待续
  • 12. MySQL主从同步解决方案 方案考虑: 多线程是ok的 但是不能修改线上的代码 就是Master和Slave都不能动 变回来了,导演管饭,听导演的
  • 13. MySQL主从同步解决方案 某路人 。。。肿么这么眼熟
  • 14. MySQL主从同步解决方案
  • 15. MySQL主从同步解决方案 以上为前传,介绍MySQL多线程同步工具(Transfer)的设计思路 以下为文字解释版 1. MySQL的主从同步延迟,是指从库的更新性能低于主库的更新 性能。 2. 相同的机器配置,出现性能差异的原因,是从库上单线程更新。
  • 16. MySQL主从同步解决方案 3. 一种方案是将从库的单线程apply改成多线程,但需要修改slave 的代码。 4. 安全起见,以工具的形式提供多线程同步功能。 5. Transfer也是一个MySQL,DBA一般部署在slave同一个机器上
  • 17. 一.MySQL主从同步基本流程 二.延迟的原因 三.解决方案一 四.解决方案二 --Transfer 五.应用场景和业务限制 六.保障和退化 七.在多主同步的应用 八.不能解决的光速问题 九.不能解决的更新延迟
  • 18. Transfer的应用场景和业务限制 1. 多表业务  Transfer的策略是在io_thread接收主库日志后,分成16份不同的 relay-log存放  再用16个sql_thread分别读取日志分发  确保同一个表的更新语句顺序与主库binlog相同 2. 对Master的限制  主库设置binlog为row模式 (不支持Statement的原因)  主库单个语句的binlog不能超过1G (原因说明)  尽量减少一个语句更新两个表
  • 19. Transfer的应用场景和业务限制 3. 对Slave的限制  设置max_allowed_packet = 1G  需要一个root权限账号提供给Transfer 4. 对DDL语句的处理  0号线程的作用
  • 20. Transfer的保障和退化 1. 保障  Transfer本身挂了数据不丢(持久化的数据队列)  Slave出错重启后,继续同步直接start slave  Master重启后自动重新同步  维护方便。 • stop slave; change master; slave_skip_errors • 直接接入现成监控系统 2. 退化  Statement模式下某些语句不支持。 支持的语句性能也不提升  事务打散  从库上不再支持rollback (什么时候从库会收到rollback?)
  • 21. 效果对比 原始性能 Transfer方案性能
  • 22. 一.MySQL主从同步基本流程 二.延迟的原因 三.解决方案一 四.解决方案二 --Transfer 五.应用场景和业务限制 六.保障和退化 七.在多主同步的应用 八.不能解决的光速问题 九.不能解决的更新延迟
  • 23. Transfer在多主同步的应用 多主复制的需求来源  备份节约机器  数据聚集分析 理想方案 MySQL不支持
  • 24. Transfer在多主同步的应用 现在方案  浪费硬盘空间  增加额外更新  更大的延迟
  • 25. Transfer在多主同步的应用 Transfer方案
  • 26. 一.MySQL主从同步基本流程 二.延迟的原因 三.解决方案一 四.解决方案二 --Transfer 五.应用场景和业务限制 六.保障和退化 七.在多主同步的应用 八.不能解决的光速问题 九.不能解决的更新延迟
  • 27. 无法解决的光速问题 抽象回简单场景,在解决cpu利用问 题后,从库更新性能与主库相同 新问题:跨机房单个数据延迟 杭州到青岛线路就是那么长 20ms
  • 28. 无法解决的光速问题 回到最开始的一个问题 1 什么是延迟 2 3 5 4 6
  • 29. 无法解决的光速问题 如果我们把延迟定义为 3到6的时间差呢? 1 让用户多等20ms 换取数据一致性 一起来讨论 2 3 5 4 6
  • 30. 一.MySQL主从同步基本流程 二.延迟的原因 三.解决方案一 四.解决方案二 --Transfer 五.应用场景和业务限制 六.保障和退化 七.在多主同步的应用 八.不能解决的光速问题 九.不能解决的更新延迟
  • 31. 不能解决的更新延迟 这回我们关注6本身, 要求 完全没有延迟怎么作? 一个耗时10ms的更 新,至少延迟10ms 1 全同步?--no 2 不要陷入锤子钉子的误区 3 5 4 放弃这方案,用双写 6
  • 32. 谢谢