听说你有数据库想要上云?微软专家给你支招了!
各位IT小能手们,恐怕一直以来没少参与过规模各异结果迥然的“数据迁移”项目吧:
小时候,用3.5寸软盘从同学家拷贝好几十个游戏的快捷方式,然后喜滋滋准备在自己家玩……
长大了,亲戚朋友新组装电脑,总会慕名找你把各种软件数据搬迁到新电脑,然后收获一片赞。
工作了,给爸妈买新手机后,第一件事就是把所有应用,包括微信聊天记录啥都迁到新手机里。
对熟练的你来说,数据迁移有啥难的?只要懂原理,有适合的工具,那不都是小菜一碟。直到你工作中遇到了数据库迁移的项目……
数据库迁移,到底难在哪?
首先,你需要迁移的数据库可能使用了不同技术:SQL Server、RDS SQL、MySQL、Oracle、MongoDB……
其次,这些源数据库可能运行在不同地方:本地数据中心、本地私有云、公有云,或者其他什么地方……
而你可能得把这些数据库迁移到各种地方:本地、云端、公有云、私有云、混合云……
并且可能还需要满足一些要求:不停机(或者最小化停机)、不对业务运转产生任何影响、迁移后可以立即上线使用……
各种复杂因素结合在一起,那么你的数据库迁移项目,到底该如何着手进行才能符合最佳实践,不仅可以保证快速完成,还能获得最理想的效果?
迁移问题,交给
Azure Database Migration Service 最省事
针对这些问题,微软围绕Azure平台提供的各类数据库产品发布了自己的数据迁移服务:Azure Database Migration Service(Azure DMS),借此帮助想把各类数据库迁移到Azure的客户解决数据库迁移的后顾之忧。
Azure DMS是一种完全托管的服务,旨在确保最小化停机时间的前提下,帮助用户从多个数据库源无缝迁移到Azure。该服务集成了一系列工具和服务,能为客户提供高度可用的综合解决方案,例如使用数据迁移助手生成评估报告,这些报告可提供建议,并能指导执行迁移之前完成所需的更改。所有操作和流程均遵循微软的最佳实践,因此客户启动迁移项目后便可高枕无忧。
该服务目前可支持的源数据库
对于迁移的数据源,Azure DMS支持从IaaS及各云平台的PaaS服务迁移到Azure PaaS服务上。完整迁移过程的原理如下图所示:
从上至下来看,在Pre-migration阶段评估工作量并做Schema映射,继而开始做接近同步的异步Migration,最后可以通过Cutover来做应用程序的迁移。对于该服务,微软提供了丰富的学习资料,包括详细的官方文档(文末附录1)以及视频材料(文末附录2)等,有兴趣的童鞋可以自行查阅。
下文,我们将通过一个模拟示例展示从其他云平台的RDS MySQL (后文简称RDS MySQL)到Azure MySQL PaaS的迁移过程,希望能够对大家有所帮助。
将RDS MySQL迁移至Azure
为了尽可能模拟真实生产环境,下文将模拟从其他云平台的中国区RDS MySQL到中国区Azure MySQL PaaS的迁移,所涉及到的MySQL版本为5.7。具体信息如下:
在进行实验前,需要正确安装Terraform、MySQL Client等软件包,详细步骤请参考相应文档,本文不进行赘述。具体的客户端连接MySQL Server的操作过程在WSL2-Ubuntu-18.04以及Windows 10的Navicat 12客户端上进行。
1
Azure 资源创建初始化
首先通过Terraform自动化部署MySQL Generel Purpose 2core实例。需要注意:在中国区Azure创建资源的时候需要指定Environment为China,具体的.tf文件内容如下:
部署过程大概需要10分钟左右,整个初始化过程会创建资源组、Vnet、NSG、Azure MySQL PaaS实例等。相关信息如下:
需要注意:Azure MySQL PaaS没有启用SSL。
2
创建RDS MySQL实例
创建实例的过程不予赘述,通过门户一步一步点击即可。本文主要阐述功能性验证,所以部署的实例类型为MySQL 5.7基础版1Core2G的mysql.n2.small.1实例,并启用公网地址。
创建完毕后,需要设置白名单,以便让Azure DMS和其他云平台中运行的RDS MySQL通过公网调用。Azure China Service IP Range可以在文末附录2地址下载,随后把这些网段加到白名单中即可,以避免直接设置为0.0.0.0/0。
3
将示例数据导入RDS MySQL实例
本文采用MySQL官方提供的employees数据库,详情可参考官网地址(文末附录3)和GitHub地址(文末附录4)。该实例数据库包含了300,000名员工及收入信息,数据量大概100MB+,这已经足够进行测试。employees库中,表之间的调用关系如下图所示:
下面开始进行实验,首先通过Linux MySQL Client连接至RDS MySQL实例安装并导入数据库:
通过SQL查看具体的表容量:
安装完可进行验证:
4
创建Azure DMS实例
登录到中国区Azure门户(https://portal.azure.cn/),选择All services -> Azure Database Migration Services -> 点击 Add:
注意:Azure DMS有Standard和Premium两个SKU可选择,具体性能指标和价格可以参阅文末附录5 。本实验选择Premium的主要原因是Premium SKU支持数据库的联机迁移。
5
在目标Azure MySQL PaaS上创建Schema
通过mysqldump配合–no-data从阿里云RDS MySQL导出Schema SQL并导入到Azure MySQL PaaS中:
导入后需要删除Azure MySQL PaaS employees库里的Foreign Key,查询外键的SQL语句如下:
选择出结果中关于Drop的语句并执行:
至此,Schema已成功迁移至Azure MySQL PaaS。
创建过程按照迁移向导一步一步操作即可,注意需要在Azure MySQL PaaS上配置允许Azure DMS的访问,Source Database类型选择MySQL或Amazon RDS MySQL都可以。
配置完毕后,直接Run Migration即可开始迁移,迁移结束后的状态如下图所示。需要注意:由于进行的是联机迁移,因此迁移结束后DMS还处于Running状态。如果此时需要停止,可以进行Cutover。
离线迁移完成后,接下来我们将模拟在阿里云RDS MySQL的实时写入,并在Azure MySQL PaaS上查看异步同步的数据来模拟Online迁移。具体写入employees库的employees表,插入主键emp_no范围在10 ~ 153这144条记录。为避免冲突,可以考虑先在插入之前用SQL Query确认一下是否有插入的字段。插入脚本如下:
为了方便更直观的查看结果,该结果使用Navicat 12连接数据库,具体插入同步结果如下:
其他云平台RDS MySQL:
Azure MySQL PaaS:
114条记录同步确认:
通过Azure DMS可以看出来异步同步的记录数量,同时查询数据库也可以做双重验证:
除此之外,Azure DMS也能够根据写入速度、频率及数据量大小来评估出来应用程序在做Cutover时的停机时间,这也是个非常人性化的功能。
总结
至此,跨云平台的MySQL PaaS迁移已经完成了。通过Azure DMS可以通过联机方式将数据库迁移至Azure,并且能够给出校验结果。但本文还有一些可进一步优化的场景,例如Azure DMS的迁移可以通过VPN链路,VPN通过两朵云的VPN Gateway打通即可,亲测可行。篇幅有限就不累述了,感兴趣的小伙伴可以自行尝试。
最后,对Azure DMS感兴趣的童鞋,可以通过下列资源进一步学习和了解,或留言与我们交流探讨。
文末附录
1、Azure DMS 官方文档
https://aka.ms/dms
2、 Azure DMS 视频文档
https://www.microsoft.com/en-us/download/details.aspx?id=57062
3、MySQL 官方地址
https://dev.mysql.com/doc/employee/en/
4、 MySQL GitHub 地址
https://github.com/datacharmer/test_db
5、Azure DMS 性能指标:
https://www.azure.cn/zh-cn/pricing/details/database-migration
“快、准、稳”三管齐下 | “运营高效”助力企业无忧出海
新基建时代下,开发者的自我修养2最新活动赛道风起,谁与你一起弯道超车?