资源预览内容
第1页 / 共39页
第2页 / 共39页
第3页 / 共39页
第4页 / 共39页
第5页 / 共39页
第6页 / 共39页
第7页 / 共39页
第8页 / 共39页
第9页 / 共39页
第10页 / 共39页
亲,该文档总共39页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
MySQLMySQL主从同步主从同步-原理、原理、问题、解决方案和应用问题、解决方案和应用淘宝丁奇淘宝丁奇讲师介绍讲师简介:丁奇:08年至10年在百度贴吧,作服务端开发,开始接触MySQL。之后由于业务需要开始看MySQL代码,囫囵吞枣不求甚解。10年得机会进入淘宝核心系统数据库组,主要是MySQL优化和提升可维护性。参与IC、TC读库调优;写了一些插件,打了几个patch到官方;实现MySQL主从同步工具、设计MySQL异构数据同步方案、MySQL中间层。一直游离在了解需求、设计方案、推广方案的三点一线上 。课程目标与目标学员页目标学员:对存储引擎、系统优化有兴趣的同学。课程目的 : 介绍主从同步的概念、原理、存在的问题和优化思路。学员能够获得的收获: 主从同步的基本配置步骤和注意事项、探讨追查和解决问题的思路1MySQL主从同步基本概念和配置步骤主从同步基本概念和配置步骤2MySQL主从同步基本流程主从同步基本流程3延迟的原因延迟的原因4解决方案一解决方案一5解决方案二解决方案二 Transfer6应用场景和业务限制应用场景和业务限制7保障和退化保障和退化8在多主同步的应用在多主同步的应用9不能解决的光速问题不能解决的光速问题10不能解决的更新延迟不能解决的更新延迟1MySQL主从同步基本概念和配置步骤主从同步基本概念和配置步骤1.用于实例之间同步数据,可以级联用于实例之间同步数据,可以级联2.只需要更新主库只需要更新主库3.备库用于备份或查询分流备库用于备份或查询分流4.配置注意事项配置注意事项1.主库必须开启主库必须开启binlog2.Master和和slave的的server-id不能相同不能相同3.同一个同一个Maser的多个的多个slave,server-id也不能相同也不能相同4.Binlog_format最好相同。最好相同。5.在在log-slave-updates=1时,不允许时,不允许Master是是row,slave是是statement这种是不允许的。这种是不允许的。1MySQL主从同步基本概念和配置步骤主从同步基本概念和配置步骤(续续)5.配置基本步骤配置基本步骤1.主库上主库上grant权限权限2.从库上从库上change master to ;3.Start slave6.问题问题MySQL主从同步基本流程主从同步基本流程MasterSlaveMySQL主从同步延迟原因主从同步延迟原因123456什么是延迟什么是延迟2和和6的时间间隔的时间间隔为什么延迟为什么延迟 2、5的文件更新通知?不是的文件更新通知?不是 3的网络延迟?的网络延迟? 不是不是 4的写盘延迟?的写盘延迟? 不是不是等等。等等。1和和2之间那个箭头怎么不画出来我们不关心之间那个箭头怎么不画出来我们不关心MySQL主从同步延迟原因主从同步延迟原因都是箭头,你咋这么苗条呢?都是箭头,你咋这么苗条呢?延迟原因延迟原因 主库更新多线程主库更新多线程 从库更新单线程从库更新单线程MySQL主从同步解决方案主从同步解决方案说胖就胖了啊。说胖就胖了啊。解决方案:解决方案: 从库变成多线程更新从库变成多线程更新反问一句:反问一句: 三秒钟变格格么。有那么好三秒钟变格格么。有那么好MySQL为什么不支持?为什么不支持?MySQL主从同步解决方案主从同步解决方案又瘦回去了,怂了。又瘦回去了,怂了。直接多线程存在的问题:直接多线程存在的问题: 语句顺序无法保证语句顺序无法保证insert和和update调换有什么问题?调换有什么问题?MySQL主从同步解决方案主从同步解决方案导演说咔了吗?导演说咔了吗?其实我准备变身,其实我准备变身,左上角的兄弟,左上角的兄弟,后面好像都没你的戏份了,后面好像都没你的戏份了,能不能先洗洗睡去?能不能先洗洗睡去?咔咔解决方案分析:解决方案分析: 1、一定要多线程!为什么?、一定要多线程!为什么? 2、多线程又会打乱顺序、多线程又会打乱顺序 3、总是有些没那么严格的,是吧?、总是有些没那么严格的,是吧? 4、同一个表的更新必须按照顺序、同一个表的更新必须按照顺序 5、不同表呢?、不同表呢? 6、先作个不同表之间并行的,线上一个库都有很多表、先作个不同表之间并行的,线上一个库都有很多表MySQL主从同步解决方案主从同步解决方案过渡太久了吧,变身的那位呢?过渡太久了吧,变身的那位呢?MySQL主从同步解决方案主从同步解决方案Slave认不出来了,来个对比照认不出来了,来个对比照 应该是解决了应该是解决了 从此从此Master和和Slave过着幸福的生活?过着幸福的生活? 太太nave了。了。 实际上,刚才那个是副导演实际上,刚才那个是副导演 导演回来了,说:导演回来了,说:MySQL主从同步解决方案主从同步解决方案咱这剧本不允许主角变身!咱这剧本不允许主角变身!未完待续未完待续MySQL主从同步解决方案主从同步解决方案变回来了,导演管饭,听导演的变回来了,导演管饭,听导演的方案考虑:方案考虑: 多线程是多线程是ok的的 但是不能修改线上的代码但是不能修改线上的代码 就是就是Master和和Slave都不能动都不能动MySQL主从同步解决方案主从同步解决方案某路人某路人。肿么这么眼熟。肿么这么眼熟MySQL主从同步解决方案主从同步解决方案以上为前传,介绍以上为前传,介绍MySQL多线程同步工具多线程同步工具(Transfer)的设计思路的设计思路以下为文字解释版以下为文字解释版MySQL主从同步解决方案主从同步解决方案1.MySQL的主从同步延迟,是指从库的更新性能低于主库的更新的主从同步延迟,是指从库的更新性能低于主库的更新性能。性能。2.相同的机器配置,出现性能差异的原因,是从库上单线程更新。相同的机器配置,出现性能差异的原因,是从库上单线程更新。MySQL主从同步解决方案主从同步解决方案3.一种方案是将从库的单线程一种方案是将从库的单线程apply改成多线程,但需要修改改成多线程,但需要修改slave的代码。的代码。4.安全起见,以工具的形式提供多线程同步功能。安全起见,以工具的形式提供多线程同步功能。5.Transfer也是一个也是一个MySQL,DBA一般部署在一般部署在slave同一个机器上,同一个机器上,放到放到/u01/mysql26.Transfer设置为设置为Master的从库,接收日志后更新的从库,接收日志后更新Slave7.从从Slave来看,来看,Transfer是一个普通的是一个普通的Client。1MySQL主从同步基本概念和配置步骤主从同步基本概念和配置步骤2MySQL主从同步基本流程主从同步基本流程3延迟的原因延迟的原因4解决方案一解决方案一5解决方案二解决方案二 Transfer6应用场景和业务限制应用场景和业务限制7保障和退化保障和退化8在多主同步的应用在多主同步的应用9不能解决的光速问题不能解决的光速问题10不能解决的更新延迟不能解决的更新延迟Transfer的应用场景和业务限制的应用场景和业务限制1.多表业务多表业务Transfer的策略是在的策略是在io_thread接收主库日志后,分成接收主库日志后,分成16份不同的份不同的relay-log存放存放再用再用16个个sql_thread分别读取日志分发分别读取日志分发确保同一个表的更新语句顺序与主库确保同一个表的更新语句顺序与主库binlog相同相同2.对对Master的限制的限制主库设置主库设置binlog为为row模式模式 (不支持不支持Statement的原因)的原因)主库单个语句的主库单个语句的binlog不能超过不能超过1G (原因说明)原因说明)尽量减少一个语句更新两个表尽量减少一个语句更新两个表Transfer的应用场景和业务限制的应用场景和业务限制3.对对Slave的限制的限制设置设置max_allowed_packet = 1G需要一个需要一个root权限账号提供给权限账号提供给Transfer4.对对DDL语句的处理语句的处理0号线程的作用号线程的作用Transfer的保障和退化的保障和退化1.保障保障Transfer本身挂了数据不丢(持久化的数据队列)本身挂了数据不丢(持久化的数据队列)Slave出错重启后,继续同步直接出错重启后,继续同步直接start slaveMaster重启后自动重新同步重启后自动重新同步维护方便。维护方便。stop slave; change master; slave_skip_errors直接接入现成监控系统直接接入现成监控系统2.退化退化Statement模式下某些语句不支持。模式下某些语句不支持。 支持的语句性能也不提升支持的语句性能也不提升事务打散事务打散从库上不再支持从库上不再支持rollback (什么时候从库会收到什么时候从库会收到rollback?)Transfer方案性能方案性能原始性能原始性能效果对比效果对比1MySQL主从同步基本概念和配置步骤主从同步基本概念和配置步骤2MySQL主从同步基本流程主从同步基本流程3延迟的原因延迟的原因4解决方案一解决方案一5解决方案二解决方案二 Transfer6应用场景和业务限制应用场景和业务限制7保障和退化保障和退化8在多主同步的应用在多主同步的应用9不能解决的光速问题不能解决的光速问题10不能解决的更新延迟不能解决的更新延迟Transfer在多主同步的应用在多主同步的应用多主复制的需求来源多主复制的需求来源备份节约机器备份节约机器数据聚集分析数据聚集分析理想方案理想方案MySQL不支持不支持Transfer在多主同步的应用在多主同步的应用现在方案现在方案浪费硬盘空间浪费硬盘空间增加额外更新增加额外更新更大的延迟更大的延迟Transfer在多主同步的应用在多主同步的应用Transfer方案方案1MySQL主从同步基本概念和配置步骤主从同步基本概念和配置步骤2MySQL主从同步基本流程主从同步基本流程3延迟的原因延迟的原因4解决方案一解决方案一5解决方案二解决方案二 Transfer6应用场景和业务限制应用场景和业务限制7保障和退化保障和退化8在多主同步的应用在多主同步的应用9不能解决的光速问题不能解决的光速问题10不能解决的更新延迟不能解决的更新延迟无法解决的光速问题无法解决的光速问题抽象回简单场景,在解决抽象回简单场景,在解决cpu利用问利用问题后,从库更新性能与主库相同题后,从库更新性能与主库相同新问题:新问题:跨机房单个数据延迟跨机房单个数据延迟杭州到青岛线路就是那么长杭州到青岛线路就是那么长 20ms123456回到最开始的一个问题回到最开始的一个问题什么是延迟什么是延迟无法解决的光速问题无法解决的光速问题123456如果我们把延迟定义为如果我们把延迟定义为 3到到6的时间差呢?的时间差呢?无法解决的光速问题无法解决的光速问题让用户多等让用户多等20ms 换取数据一致性换取数据一致性一起来讨论一起来讨论1MySQL主从同步基本概念和配置步骤主从同步基本概念和配置步骤2MySQL主从同步基本流程主从同步基本流程3延迟的原因延迟的原因4解决方案一解决方案一5解决方案二解决方案二 Transfer6应用场景和业务限制应用场景和业务限制7保障和退化保障和退化8在多主同步的应用在多主同步的应用9不能解决的光速问题不能解决的光速问题10不能解决的更新延迟不能解决的更新延迟123456一个耗时一个耗时10ms的更的更新,至少延迟新,至少延迟10ms不能解决的更新延迟不能解决的更新延迟全同步?全同步?no这回我们关注这回我们关注6本身本身, 要求要求完全没有延迟怎么作?完全没有延迟怎么作?不要陷入锤子钉子的误区不要陷入锤子钉子的误区放弃这方案,用双写放弃这方案,用双写 MySQL官方版官方版5.6的多线程同步介绍的多线程同步介绍 & 启发启发1.按按DB分线程分线程u为什么我们当时没这么作?为什么我们当时没这么作?2.跨跨DB的则线程合并的则线程合并u为什么我们当时没这么作?为什么我们当时没这么作?3.Transfer与其实质区别是粒度不同与其实质区别是粒度不同4.被按被按DB分提醒了分提醒了 后续改进后续改进课程回顾 、总结页如何配置主从同步主从同步原理主从同步性能问题现状优化方向安全的妥协方案Transfer的其他应用谢谢
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号