拖地先生,从事互联网技术工作,在这里每周两篇文章,聊聊日常的实践和心得。往期推荐:
背景
2019年10月起阿里云以升级硬件为由要求部分经典网络的机器迁移至VPC网络环境中,我们所使用的阿里云网络环境全部为经典网络,由于机器上部署的业务都具有相关性,迁几台势必要动全盘,因此要考虑全面。
经典网络为一个大局域网网络环境,相对于VPC网络环境来说是不安全的。而且经典网络环境所提供的服务有限,不能及时的满足一些服务的支撑(例如消息队列只在VPC网络服务,之前我们使用了服务从经典网络中转消息做兼容)。
因此按照趋势来看,需要将经典网络迁移的VPC网络环境中给业务提供更好的和稳定的支撑,同时也为以后的扩展作准备。
选型
我们在经典网络的数据库是在云主机上自建的MySQL,所有服务迁移都可以无感,但是只有主库是需要停机的,考虑如下:
在评估容量后,技术方案面对了一个复杂度较高的问题。如果要保证写业务不中断,切换目标会面对DTS数据同步和真实流量的双写问题。由于主键自增ID,并且部分业务依赖自增ID,数千张表改造起来工作量和复杂度都较高,迁移的风险会扩散到业务改造风险。
由于业务潮汐现象明显,在review数据时发现,凌晨虽然数据库仍有访问,但绝大部分是读,分钟级来看写几乎没有。于是选择了不那么技术的方案:利用读写分离保证读业务,迁移时中断写以保证数据一致,并通过错误回放来恢复中断期间的数据实现最终一致。
拖地羊,公众号:拖地先生高压下如何保证工作质量,数据库迁移有你需要知道的方法论
既然要动主库,就考虑是不是要顺道来一次升级,不管是清理遗留问题还是软硬件升配都是一个合适的机会。过往每年的业务增长,我们都会在主库上大动干戈,因此将数据搬进RDS或PolarDB作为了考虑方向。
出于对MySQL优化的投入和成本核算、对核心业务安全的顾虑(搁置了PolarDB,虽然性能和运维都非常让人口水),在确认了RDS-MySQL的数据同步(DTS)、运维扩容方案(只读地址,可以包括主实例+启动需1小时左右的只读实例)、性能分析手段(cloudDBA)后,决定将数据搬进RDS服务中。
过程
准备工作
1、数据库版本
为了保证数据迁移稳定迁移,选择和自建的数据库同一个版本mysql 5.6 ,同时也是现在市场上主流的数据库
2、数据同步方案确定
使用DTS进行数据库从自建ECS中的mysql增量同步到RDS中(使用DTS增量同步就需要设置binlog_format 的模式为ROW)ROW模式的缺点就是会产生大量的日志,尤其是在alter table 的时候日志会大量增加,在迁移过程中避免了alter table 的执行,实际上并未产生很多日志。
3、梳理数据库迁移影响影响范围
梳理连接数据库的业务
4、迁移自动化脚本准备
自动发布最新的数据库配置文件,自动重启线上的服务,
5、数据库性能测试
DTS数据同步完成之后切线上的读取数据的量进行测试高峰的实际量测
数据库同步示意图:

DTS数据同步历程
第一次同步:DTS-1051003: MySQL日志Reader binlog_format校验失败
解决方案
1. 设置Binlog格式为full格式: 执行SQL: set global binlog_format='ROW';
2. kill 已经存在的session: 执行SQL show processlist; 将已有的session kill掉: 执行SQL: kill id;
由于业务不能中断,mysql查询到的session有很多,主要是一些服务使用的长链接,以及从库的主从链接,然后就重启相关go服务,建立新的session进行数据同步
参照阿里解决方案:https://help.aliyun.com/document_detail/91433.htm

第二次同步:DTS-2004: 未知数据库帐号
提示源目标数据库所使用的账号不对,但是在建立DTS传输的时候已经测试过账号密码这种基础的问题是正常,迁移数据到5% 的时候就报错。在此期间从界面上面看到的进度还在处于同步过程。
经过和阿里沟通,是他们内部的增量任务底层会复用一些资源,导致密码没有及时更新出现错误,出现问题到推进总共用了 4个小时后问题解决。数据同步完成之后的数据和主库的延迟在1S 的状态,不会影响到业务逻辑。
参照阿里解决方案:https://help.aliyun.com/document_detail/91414.htm
切线上读数据库的量测试
按照在线机器的配置和开销进行简单预估:CPU核数*CPU使用率,按照刚好100%使用完RDS资源尝试逐步切量。测试结果令人惊喜,实际上只使用了预估资源的50%,说明了RDS在性能优化上的水准。
迁移步骤

过程参考《高压下如何保证工作质量,数据库迁移有你需要知道的方法论》。
拖地先生,从事互联网技术工作,在这里每周两篇文章,一起聊聊日常的技术点滴和软素质模型。

如果对你有帮助,让大家也看看呗~




