1、VIPKID的数据库跨云架构设计历史与背景1234云数据库演进之历史MySQL Utilities云数据库演进之现状目录contents配置中心-VKDS云数据库演进之现状多云架构云数据库演进之未来历史与背景0102云计算的弹性MySQL utilities可根据业务的发展快速扩缩容数据库的高可用,故障可隔离,可转移弹性扩展动态配置可使成本上最优化主从切换异地多活0403多云容灾配置可动态加载可通过应用层、DB层在多云之间通过配置中心VKDS实现配置的动态加载,实现容灾,流量的调度流量可调度RDS Cloud故障无法隔离多级从库不易维护无法横向扩展成本高EC2自建DB规范化集群的元信息管理My
2、SQL UtilitiesMHA vs MySQL UtilitiesMHA复杂MySQL Utilities布署简单开发语言开发者PerlPython官方第三方只切换一次对比binlog多生存周期数据补齐用户数量节点数要求可循环对比GTID少32环境要求官方版本5.6+开启GTIDmaster_info_repository = TABLE,relay_log_info_repository = TABLE配置report_host, report_port变量足够权限的数据库用户建议开启半同步/增强半同步mysqlfailover.pydaemon或者screen主库故障mysqlrpla
3、dmin.py主库硬件升级主库停机修改配置主库故障需手动执行自定义脚本Switchover切换逻辑所有从库Start slave所有从库change master所有从库stop slave开始检查环境报错退出检查备主环境自定义脚本slaves_list.append(old_master)slaves_list.del(new_master)等待所有从库追平数据主库加全局读锁获取主库的GTID_SET主库解全局读锁WAIT_FOR_EXECUTED_GTID_SETFailover切换逻辑自定义脚本所有从库Start slave开始检查环境报错退出所有从库change master所有从库s
4、top slave选备主检查备主环境备主补齐GTID_SETchange master to其它从库slaves_list.append(old_master)自定义脚本slaves_list.del(new_master)通过自定义脚本实现主从差异化配置以及与其它平台的通信切换前调用-exec-before切换后调用-exec-after命令示例/usr/bin/mysqlrpladmin -master=admin:admin192.168.100.128:3306 -slaves=admin:admin192.168.100.129:3306,admin:admin192.168.100
5、.130:3306 -log=/data/logs/mysqlfailover/switchover.log -exec-before=/data/scripts/switchover_before.sh -exec-after=/data/scripts/switchover_after.sh -vvv -demote-master switchoverMySQL utilites架构图切换平台配置中心元信息平台MySQL集群失败的案例aaa:1-100uuid:aaauuid:bbbChange filterErrant Transaction数据库延迟大aaa:1-100,ccc:1pu
6、rge_gtid:ccc:1aaa:1-100uuid:ccc如何发现Errant transaction方式1:mysqlfailover master=xxxxxx slaves=xxxxxx,xxxxxx -p方式2:使用gtid_subtract函数如何解决Errant transaction建议在主库手动插入空事务mysqlslavetrx在从库上插入空事务不建议手动删除从库的Errant Transaction1.把mysql.gtid_executed里多余的删除了,然后kill -92.再使用innodb_force_recovery=6启动配置中心-VKDSVKDS架构图1VKDS架构图2场景1:主库IO异常场景2:流量的调度场景3:从库延迟大场景4:扩缩容数据库实例场景5:应用连接池修改多云架构单云的风险光缆被挖断云厂商的故障云厂商被攻击保护光缆人人有责运维部宣CDN发布平台内部系统服务注册接入服务流量调度平台订单服务约课服务结课服务VKDSDB切换平台AWSALIDTSDB元信息平台目标与展望多云多活容器化动态扩缩容