宾慧蟾 发表于 2024-10-5 22:50:43

阿里云数据库迁移方案:RDS MySQL迁移至PolarDB MySQL版

通过本方案,RDS MySQL的数据可在线实时同步到PolarDB MySQL版,并且升级切换后的PolarDB集群包含源RDS实例的账号信息、数据库、IP白名单和必要的参数。这样可实现不修改应用代码的情况下,将RDS MySQL数据库迁移升级至PolarDB MySQL版。
<h2>一、方案优势</h2>
<h3>零改造成本</h3>
100?容MySQL,您可以像使用MySQL一样使用PolarDB MySQL版 可保留数据库原连接地址,无需应用程序修改任何连接配置即可切换至PolarDB。
<h3>安全可靠</h3>
支持在线热迁移(增量实时同步),迁移过程仅闪断一次(即当业务从RDS切换至PolarDB时),业务停机时间&lt;10分钟。支持一键回滚,迁移失败可以在10分钟内恢复。
<h3>迁移免费</h3>
迁移链路完全免费,对于包年包月的RDS实例,数据从RDS迁移到PolarDB后,若业务已在PolarDB上稳定运行且不再需要RDS时,您可以申请转单优惠退款,避免浪费闲置的RDS资源。
<h2>二、应用背景</h2>
<h3>秒级无感弹性伸缩,快速应对业务峰值</h3>
PolarDB解决了传统数据库的升配时间会随着存储量、宿主机资源的情况而上升的问题。
<h3>海量存储,支持上百 TB 级别数据</h3>
PolarDB采用存储和分离架构,单实例最高100 TB 存储,节点支持纵向扩展和横向扩展。
<h3>提供高读写性能,支持业务全球化部署</h3>
PolarDB提供低延迟、高稳定、高性能的云服务,满足游戏业务需求。
<h3>数据强一致性保证,满足金融级可靠性要求</h3>
PolarDB采用存储和计算分离的架构,支持秒级故障恢复、数据一致性和数据备份容灾。
<h2>三、架构与部署</h2>
本架构通过一键迁移升级功能,将RDS MySQL的数据实时同步到PolarDB MySQL版。在正式切换前,可先通过DAS提供的流量回放和压测功能对目标端PolarDB进行全面的兼容性和性能评估。正式切换时,会自动将源端RDS的连接地址交换给目标PolarDB端,从而实现无需修改应用程序任何代码和配置的情况下将RDS MySQL在线升级至PolarDB MySQL版。
<h3>方案概览</h3>
PolarDB MySQL 版是阿里云自研的云原生数据库,产品基于云原生架构、计算存储分离、软硬件一体化设计,具有一写多读或多写多读、共享存储、60亿行数据稳定运行、秒级DDL、主从切换无闪断、闪回查询等持续为业务提供高价值的特性。
通过本方案,您可以体验如何在不修改任何应用代码的情况下,将 MySQL 数据库中的数据迁移至 PolarDB MySQL 版,借助 PolarDB 的超高弹性、性能、高可用高可靠等特性来应对业务高速增长带来的数据库压力。
<h5>本迁移方案具有以下优势:</h5>
1.零改造成本

[*]100?容MySQL,您可以像使用MySQL一样使用PolarDB MySQL版
[*]可保留数据库原连接地址,无需应用程序修改任何连接配置即可切换至PolarDB

2.安全可靠

[*]支持在线热迁移(增量实时同步),迁移过程仅闪断一次(即当业务从RDS切换至PolarDB时),业务停机时间&lt;10分钟
[*]支持一键回滚,迁移失败可以在10分钟内恢复

3.迁移免费

[*]迁移链路完全免费
[*]对于包年包月的RDS实例,数据从RDS迁移到PolarDB后,若业务已在PolarDB上稳定运行且不再需要RDS时,您可以申请转单优惠退款,避免浪费闲置的RDS资源。

<h5>方案架构</h5>
方案提供的默认设置(如地域、VPC、实例名称等)完成部署后在阿里云上运行环境如下图所示。实际部署时您可以根据资源规划修改部分设置,但最终形成的运行环境与下图相似。



https://upload-images.jianshu.io/upload_images/19316870-57a1e5a6e11af373.png



本方案的技术架构包括以下基础设施和云服务:

[*]地域和可用区:RDS MySQL实例和PolarDB MySQL版实例必须在同地域,可用区无限制
[*]1个专有网络VPC:升级后的PolarDB MySQL版实例将与升级前RDS MySQL实例使用同一个VPC网络
[*]核心系统:
1个ECS实例,用于部署MySQL客户端,模拟业务读写RDS MySQL数据库
1个RDS MySQL实例,通过一键升级,切换至PolarDB MySQL实例

<h3>部署准备</h3>
开始部署前,请按以下指引完成账号申请、账号充值、RAM用户创建和授权。
<h5>准备账号</h5>
1.如果您还没有阿里云账号,请访问阿里云账号注册页面,根据页面提示完成注册。阿里云账号是您使用云资源的付费实体,因此是部署方案的必要前提。
2.为阿里云账号充值。

[*]为节省成本,本方案默认选择使用按量付费资源,使用按量付费资源需要确保账户余额不小于100元。
[*]完成本方案的部署及体验,预计产生费用不超过20元(假设您选择下表中的相关规格资源,且运行时间不超过2小时,如果调整了资源规格,请以控制台显示的实际报价以及最终账单为准)。

<table>
<thead>
<tr>
<th>云服务</th>
<th>规格配置</th>
<th>地域</th>
<th>预估费用参考</th>
</tr>
</thead>
<tbody>
<tr>
<td>云数据库 PolarDB</td>
<td>polar.mysql.x4.large</td>
<td>华东2(上海)</td>
<td>4.17 元/小时</td>
</tr>
<tr>
<td>云数据库 RDS MySQL</td>
<td>mysql.n2.medium.2c</td>
<td>华东2(上海)</td>
<td>1.381 元/小时</td>
</tr>
<tr>
<td>云服务器 ECS</td>
<td>ecs.g7.xlarge</td>
<td>华东2(上海)</td>
<td>配置费用:1.089 元/小时公网流量费用:0.800 元/GB</td>
</tr>
</tbody>
</table>
3.阿里云账号拥有操作资源的最高权限,从云资源安全角度考虑,建议您创建一个RAM用户,使RAM用户仅能操作有限的资源,然后由RAM用户完成本方案。

[*]访问资源组页面,单击创建资源组,创建一个资源组,例如命名为rds2polardb。
[*]访问RAM控制台-用户页面,单击创建用户,勾选控制台访问和OpenAPI 调用访问,填写其他信息,创建一个RAM用户。
[*]访问RAM控制台-权限策略页面,单击创建权限策略,单击脚本编辑,并复制粘贴以下内容,完成创建自定义权限策略。



{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": [
"polardb:Describe",
"ecs:Describe",
"vpc:Describe",
"ros:"
],
"Resource": "*"
}
]
}

4.访问RAM控制台-用户页面,授予权限。

[*]单击目标RAM用户操作列的添加权限,选择授权范围为指定资源组(例如rds2polardb),然后选择系统策略AliyunECSFullAccess、AliyunRDSFullAccess、AliyunVPCFullAccess和AliyunPolardbFullAccess,单击确定。
[*]再次单击目标RAM用户操作列的添加权限,选择授权范围为整个云账号,然后选择前面创建的自定义权限策略,单击确定。
[*]

创建AliyunServiceRoleForPolarDB角色,用于PolarDB服务访问其他云服务资源。
访问RAM访问控制台-角色页面,单击创建角色,角色类型选择阿里云服务,角色类型配置为服务关联角色,选择云服务为云数据库 PolarDB,单击完成。

<h3>一键部署</h3>
资源编排(ROS)可以让您通过YAML或JSON文件清晰简洁地描述所需的云资源及其依赖关系,然后自动化地创建和配置这些资源。您可以通过下方提供的ROS一键部署链接,来自动化地完成这些资源的创建和配置。
本文介绍的ROS模板主要完成了以下内容:

[*]部署1个专有网络VPC。
[*]部署1台交换机。
[*]部署1台云服务器 ECS。
[*]部署1个云数据库 RDS MySQL实例。
[*]已在RDS MySQL实例中写入测试数据。
[*]部署1个从云数据库 RDS MySQL实例迁移生成的云数据库 PolarDB MySQL实例。

1.单击一键部署前往ROS控制台,系统自动打开使用新资源创建资源栈的面板。
2.确认好地域后(本文以华东2(上海)为例),在配置模板参数步骤中配置资源栈名称、ECS等配置。



https://upload-images.jianshu.io/upload_images/19316870-cb19e74b82a94ed0.png



3.单击两次下一步,跳转至配置资源栈(可选)步骤,选择资源组为被授权的资源组(本文以rds2polardb为例)。
4.单击创建,系统将自动创建并部署本教程所需的资源。
5.当资源栈信息页面的状态显示为创建成功时表示一键配置完成。



https://upload-images.jianshu.io/upload_images/19316870-a36781fc02864ee6.png



5.单击资源页签,找到已创建的PolarDB实例,单击实例ID,进入PolarDB实例详情页,查看RDS实例的数据是否已存在。
<h3>迁移切换</h3>
当目标PolarDB集群的复制延迟小于60秒时,即可进行迁移切换操作。正式业务切换,建议选择业务低峰期进行。

1.本方案通过持续写入RDS MySQL,并查看RDS MySQL和PolarDB MySQL两边的最新时间和数据量来观察切换带来的中断耗时。
一键部署完成后,会生成2个脚本可用于模拟业务持续写入RDS MySQL,并实时观察RDS MySQL和PolarDB MySQL两边的最新时间和数据量来观察切换带来的中断耗时。2个脚本包含:loop_insert_query_mysql.sh、loop_query_polardb.sh,其中

[*]loop_insert_query_mysql.sh 主要用于模拟每隔5秒向RDS MySQL写入数据,并打印系统时间、数据写入时间、数据的总行数、PolarDB的版本等信息。
[*]loop_query_polardb.sh 主要用于模拟每隔5秒查询PolarDB数据库,并打印系统时间、数据写入时间、数据的总行数、PolarDB的版本等信息。
[*]可通过PolarDB版本信息判断当前连接的是RDS MySQL还是PolarDB,如下




https://upload-images.jianshu.io/upload_images/19316870-732040c7b11d6d3b.png



左边是RDS MySQL(无polardb_version返回值),右边是PolarDB MySQL(polardb_version非空)

2.登录ECS
返回ECS实例列表页面,找到已创建的实例,单击对应操作列下的远程连接。
在弹出的远程连接对话框中,单击通过Workbench远程连接对应的立即登录。
在弹出的登录实例对话框中,输入登录信息,单击确定。

[*]用户名:输入用户名(例如root)
[*]密码:创建ECS实例时,在登录凭证处设置的登录密码。

3.在ECS上,执行脚本模拟业务持续在RDS MySQL写入数据,并观察RDS MySQL和PolarDB MySQL两边的最新时间和数据量来观察切换带来的中断耗时。


~]# ls /root/*.sh
/root/loop_insert_query_mysql.sh/root/loop_query_polardb.sh
-- A窗口
~]# sh /root/loop_insert_query_mysql.sh
-- B窗口
~]# sh loop_query_polardb.sh

4.在基本信息页面的RDS迁移功能中,单击迁移切换。



https://upload-images.jianshu.io/upload_images/19316870-7c2597a7fe443994.png



5.在开始切换对话框中,选择带地址切换(应用程序不用改连接配置)



https://upload-images.jianshu.io/upload_images/19316870-8f1ce48335f70061.png




6.切换成功
本方案重点介绍在线不更改连接地址完成RDS MySQL一键升级至PolarDB MySQL。影响中断时间的因素较多,实际生产业务升级中,切换过程一般小于5分钟。



https://upload-images.jianshu.io/upload_images/19316870-d16f0486e96e2cc0.png



<h3>完成及清理</h3>
<h3>方案验证</h3>
参考迁移切换迁移成功的结果显示。
<h3>清理资源</h3>
在本方案中,您创建了1个专有网络VPC、1台交换机、1台ECS云服务器、1个云数据库 RDS MySQL 实例、1个云原生数据库 PolarDB MySQL 实例。测试完方案后,您可以在ROS控制台直接删除资源栈并删除相关资源。

官网相关地址直达:
1.更多阿里云方案查询:https://www.aliyun.com
2.阿里云服务器ECS相关活动:https://www.aliyun.com/daily-act/ecs/activity_selection
3.云小站(代金券发布平台):https://www.aliyun.com/minisite/goods



https://upload-images.jianshu.io/upload_images/19316870-5f1747d3cd17a545.png

<div class="image-caption">云小站代金券图.png
页: [1]
查看完整版本: 阿里云数据库迁移方案:RDS MySQL迁移至PolarDB MySQL版