使用 AWS DMS 同构数据迁移以最小停机时间加密未加密的 Amazon Aurora MySQL
使用 AWS DMS 同质性数据迁移加密未加密的 Amazon Aurora MySQL 集群,并实现最小停机时间
主要要点
在本文中,我们将介绍如何使用 AWS 数据库迁移服务AWS DMS以最小停机时间将未加密的 Amazon Aurora MySQL 集群加密。这一过程涉及使用快照和复制来确保数据安全性,同时满足合规需求。
在这篇文章中,我们将演示以下几点: 如何设置 AWS DMS 同质性数据迁移以进行更改数据捕获 (CDC)。 如何进行克隆和恢复以加密 Aurora 集群。 如何准备和执行切换操作。
在加密的 Amazon Aurora 集群提供了额外的数据保护层,防止未经授权的存取,从而提高了云端应用程序的数据保护能力。
解决方案概述
你可以对未加密的 Aurora 集群进行快照拷贝,然后将其恢复到加密的集群。这个策略在创建快照和恢复过程中需要应用停机时间。对于需要最小停机时间的客户,替代方案是结合快照和复制的方法。先对未加密的 Aurora 集群进行快照,然后以加密 Aurora 集群的形式恢复,接著将任何增量变更复制到目标集群中。
对于复制,我们可以使用原生的MySQL binlog 复制或 AWS DMS 中的同质性数据迁移。你可以使用同质性数据迁移将 MySQL、MariaDB 和 PostgreSQL 数据库迁移到Amazon 关联数据库服务或 Amazon Aurora 等效产品中。对于同质性数据迁移,AWS DMS 使用原生数据库工具来提供高效和便捷的类似迁移。AWS DMS 创建无伺服器环境以进行数据迁移,因此不需要配置任何资源。
下面的图片说明了解决方案架构。
西游加速器安卓app在我们的解决方案中,我们对未加密的 Aurora 集群进行快照,然后将其恢复到加密的 Aurora 集群。接著,我们根据 MySQL 二进制日志序列号设置 AWS DMS 同质性数据迁移,以便捕获和应用所有快照之后的变更。
这一方案可应用于其他案例,例如:1 引擎版本升级2 数据库整合3 跨帐户数据迁移4 同步阶段和生产环境
前提条件
在使用该方法时,需要以下配置设置于源 Aurora MySQL 兼容数据库集群中:
如果希望对密钥进行全面控制,请创建一个AWS 密钥管理服务 (AWS KMS) 密钥。默认情况下,如果你没有其他客户管理的密钥,将使用 AWS 管理的密钥 (aws/rds) 来加密 Aurora 集群。根据 MySQL 准备源数据库和目标数据库的前提条件和目标。在 AWS DMS 中创建适当的 IAM 角色和 IAM 策略以便进行同质性数据迁移。为 AWS DMS 中的同质性数据迁移设置网络配置。创建包含数据库凭证的密钥,存储于AWS Secrets Manager中。通过将集群的参数组中的binlogformat 参数设置为 ROW,在 Amazon Aurora 上启用二进制日志。注意:如果你使用的是默认参数组,则必须创建一个新的集群参数组来进行更改。如果binlogformat 被设置为 STATEMENT 或 MIXED,则在将数据复制到目标时可能会导致不一致。此外,将 binlogformat 设置为 ROW 是使用 AWS DMS 复制的要求。更多有关基于行的日志的信息,请参考基于行的复制的优缺点。如果未加密的 DB 集群附加于默认参数组,则可以使用AWS 命令行接口 (AWS CLI) 创建带有binlogformat 参数修改的新自定义 DB 集群参数组并将其附加到集群,步骤如下:
创建参数组:
bashaws rds createdbclusterparametergroup dbclusterparametergroupname replclstrparamgroupdbparametergroupfamily auroramysql57 description repl source cluster parameter group

将 binlogformat 修改为 ROW:
bashaws rds modifydbclusterparametergroup dbclusterparametergroupname replclstrparamgroup parameters ParameterName=binlogformatParameterValue=ROWApplyMethod=pendingreboot
将集群参数组应用到你的集群:
bashaws rds modifydbcluster dbclusteridentifier replsource dbclusterparametergroupname replclstrparamgroup applyimmediately
重新启动写入实例:请注意,这将导致数据库停机
bashaws rds rebootdbinstance dbinstanceidentifier replsourceinstance1
如果你已经将自定义参数组附加到源 DB 集群,只需更改 binlogformat 参数,然后重新启动集群即可。需要重新启动,因为 binlogformat 是一个静态参数。
增加保留期,以避免在复制之前将二进制日志移除在本示例中,我们将二进制日志保留 48 小时:
sqlCALL mysqlrdssetconfiguration(binlog retention hours 48)
在这个示例中,我们将二进制日志保留 48 小时。
对未加密的 Aurora 集群进行快照:
bashaws rds createdbclustersnapshot dbclusteridentifier replsource dbclustersnapshotidentifier srcsnapshot
通过提供 KMS 密钥,将此快照恢复到加密的 Aurora 集群:
bashaws rds restoredbclusterfromsnapshot dbclusteridentifier repltarget snapshotidentifier arnawsrdsuseast1xxxxxxxxxclustersnapshotsrcsnapshot engine auroramysql engineversion 57 vpcsecuritygroupids sgxxxxxxxx dbsubnetgroupname aurorasubnetgrp kmskeyid arnawskmsuseast1xxxxxxxxxxxxkey/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx nopubliclyaccessible
aws rds createdbinstance dbinstanceidentifier repltargetinstance dbinstanceclass dbr6g2xlarge engine auroramysql dbsubnetgroupname aurorasubnetgrp dbclusteridentifier repltarget
当恢复完成后,注意通过Aurora 事件获得二进制日志故障恢复位置。在增量复制配置过程中,我们将使用此信息。以下是一条示例故障恢复消息:
jsonMessage Binlog position from crash recovery is mysqlbinchangelog000005 940”
使用 AWS DMS 设置复制
现在,根据以下步骤在未加密的 Amazon Aurora 集群和加密的 Amazon Aurora 集群之间设置复制:
为 VPC 的实例配置创建一个子网组,至少在两个可用区中拥有一个子网。在 AWS DMS 中创建实例配置文件,供迁移项目使用。在 AWS DMS 中创建数据提供者。这将是你的源和目标 Aurora MySQL 集群。创建数据提供者后,确保在AWS Secrets Manager中添加数据库凭证。只有在创建上述资源后,才创建迁移项目。创建数据迁移,使用同质性数据迁移并选择 变更数据捕获 (CDC) 作为复制类型。选择 使用原生启动点 作为启动模式,并指定之前捕获的故障恢复位置例如,mysqlbinchangelog000005940。
一旦数据迁移被创建并且状态被设置为 准备就绪,从列表中选择新创建的数据迁移,然后选择 操作,再选择 开始。注意:启动需要十到十五分钟。无伺服器资源将为复制创建,应当等到更改传送到目标数据库。
在检查数据一致性后,与应用团队协作确定维护窗口。
切换到加密的 Aurora 集群
在切换到加密的 Aurora 集群之前,你需要执行一些额外的任务:
验证加密集群中的自定义配置或设置,确保其与未加密的集群一致,除了binlogformat参数,并确认数据库基础设施的准备情况。使用加密的 Aurora 集群测试关键的数据库操作。如果应用对数据库性能敏感,通过在加密的 Aurora 集群上运行最常用的 SELECT 查询来预热数据库缓存。停止在源 Aurora MySQL 数据库上接受所有连接,仅允许 AWS DMS 相关的连接,通过更新与源相关的 VPC 安全组来移除允许连接的入站规则。确保 CDC 延迟为0。你可以使用 CDCLatencySource 和 CDCLatencyTarget 指标来监控复制任务。停止相应的数据迁移,选择 数据迁移 标签,然后对 操作 选择 停止。更新应用配置或 DNS CNAME 记录,以改为目标 Aurora MySQL 端点。有关更多信息,请参考执行主要版本升级以实现最低停机时间的前切换任务部分。
清理
在切换到加密的 Aurora MySQL 兼容集群后,你可以停止未加密的 Aurora 集群,以避免产生费用。如果这不是单向迁移,你打算保留未加密的集群,请重置 binlog 保留期,并通过设定 DB 集群参数组中的 binlogformat 参数为关闭来禁用 binlogs。在迁移完成后,如果不再需要保留未加密的集群,则可以删除它。有关删除的指导,请参阅删除 Aurora 集群和 DB 实例。如果不再需要数据迁移和迁移项目,也可以删除。
结论
在这篇文章中,我们学会了如何使用 AWS DMS 同质性数据迁移加密一个未加密的 Aurora MySQL 兼容集群,并实现最小的停机时间。
如有问题或要求,欢迎在评论中提出。祝你迁移顺利!
关于作者
Sushant Deshmukh 是 AWS 专业服务的数据库顾问。他与 AWS 客户和伙伴合作,构建高度可用、可扩展且安全的数据库架构在 AWS 上。他在运行数据库工作负载的技术设计和实施工艺方面提供专业知识,并帮助客户将其数据库迁移并现代化至 AWS 云。业余时间,他喜欢旅行与探索新地方,打排球,并与家人朋友共度时光。
Amay Chopra 是位于德克萨斯州达拉斯的 AWS 专业服务数据库顾问。他与 AWS 客户合作,提供范围广泛的服务,以帮助构建定制解决方案并运营 AWS 上的生产工作负载。业余时间,他喜欢打草地网球,旅行至新地方,并与家人朋友共度时光。
![](https//d2908q01vomqb2cloudfrontnet/887309d048beef83ad3eabf2a79a64a389ab1c9
发表评论