在当今高度互联的世界中,这句话再准确不过了。数据迁移对于全球组织至关重要,从旨在快速扩展的初创公司到寻求 IT 基础架构现代化的企业。
然而,作为一名技术爱好者,我经常发现自己在不同环境中驾驭大量数据的复杂性。没有很好地计划或执行的数据迁移(无论是一次性事件还是持续复制)都是手动完成的,没有使用任何脚本自动完成,或者没有经过良好的测试,这可能会导致迁移过程中出现问题并增加延迟或停机时间。
AWS DMS 建立了一个平台,以最短的停机时间有效地执行迁移。我还意识到,我们可以使用 Terraform IAC 完全自动化此过程,以触发任何受支持的源数据库到目标数据库的迁移。使用 Terraform,我们可以创建目标节点和 AWS DMS 资源所需的基础设施,该基础设施可以自动完成数据迁移。
- 什么是 AWS Data Migration Service (AWS DMS)?
- 如何使用 AWS DMS 和 Terraform IAC 自动执行数据迁移
- AWS DMS 的主要优势和功能?
让我们开始吧!
1. 什么是 AWS DMS(数据库迁移服务)?
AWS DMS(数据库迁移服务)是一种基于云的工具,通过将数据从任何受支持的源复制到任何受支持的目标,促进数据库迁移到 AWS 云。它还支持连续数据捕获 (CDC) 功能,该功能可持续将数据从源复制到目标。
AWS DMS 架构概述
AWS DMS 的使用案例
AWS Database Migration Service (AWS DMS) 支持许多使用案例,从同类迁移到复杂的跨平台转换。
同构数据迁移
同构数据库迁移在相同或相似的数据库之间迁移数据。由于源数据库和目标数据库之间的架构结构和数据类型一致,此一步过程非常简单。
同构数据库迁移
异构数据库迁移
异构数据库迁移涉及在不同数据库之间传输数据,例如 Oracle 到 Amazon Aurora、Oracle 到 PostgreSQL 或 SQL Server 到 MySQL。此过程需要转换源架构和代码以匹配目标数据库。
使用 AWS 架构转换工具,此迁移将分为两步:架构转换和数据迁移。源架构和代码转换涉及转换表、视图、存储过程、函数、数据类型、同义词等。AWS Schema Conversion Tool 无法自动转换的任何对象都会被明确标记为手动转换以完成迁移。
DMS 架构转换
异构数据库迁移
AWS DMS 的先决条件
以下是 AWS DMS 数据迁移的先决条件
- 通过防火墙和安全组访问源端点和目标端点
- 源终结点连接
- 目标终结点连接
- 复制实例
- 目标架构或数据库
- 用于触发 Lambda 函数的 CloudWatch 事件
- 用于启动复制任务的 Lambda 函数
- 资源限制增加
AWS DMS 组件
在迁移到 AWS DMS 之前,让我们先了解一下 AWS DMS 组件。
复制实例
复制实例由处理复制任务的 Amazon EC2 实例管理。它们连接到源数据存储,读取目标的数据并设置其格式,然后将其加载到目标数据存储中。
复制实例
源端点和目标端点
AWS DMS 使用终端节点连接到源数据库和目标数据库,从而允许将数据从源终端节点迁移到目标终端节点。
支持的源终结点包括:
支持的源终端节点包括 Google Cloud for MySQL、Amazon RDS for PostgreSQL、Microsoft SQL Server、Oracle Database、Amazon DocumentDB、PostgreSQL、Microsoft Azure SQL Database、IBM DB2、兼容 MySQL 的 Amazon Aurora、MongoDB、Amazon RDS for Oracle、Amazon S3、Amazon RDS for MariaDB、Amazon RDS for Microsoft SQL Server、MySQL、Amazon RDS for MySQL、兼容 PostgreSQL 的 Amazon Aurora、 MariaDB 和 SAP Adaptive Server Enterprise (ASE)。
支持的终端
支持的目标终端节点包括 PostgreSQL、SAP Adaptive Server Enterprise (ASE)、Google Cloud for MySQL、IBM DB2、MySQL、Amazon RDS for Microsoft SQL Server、Oracle 数据库、Amazon RDS for MariaDB、兼容 MySQL 的 Amazon Aurora、MariaDB、Amazon S3、Amazon RDS for PostgreSQL、Microsoft SQL Server、Amazon DocumentDB、Microsoft Azure SQL Database、Amazon RDS for Oracle、MongoDB、兼容 PostgreSQL 的 Amazon Aurora、 Amazon RDS for MySQL 和 Amazon RDS for Microsoft SQL Server。
复制任务
复制任务有助于从源端点到目标端点的顺畅数据传输。这涉及指定迁移所需的表和架构,以及任何特殊的处理要求,例如日志记录、控制表数据和错误处理。创建复制任务是开始迁移之前的关键步骤,包括定义迁移类型、源和目标终端节点以及复制实例。
复制任务包括三种主要的迁移类型:
- 总负载:仅迁移现有数据。
- CDC(变更数据捕获)满载: 迁移现有数据并持续复制更改。
- 仅限 CDC(更改数据捕获):仅连续复制数据中的更改。
- 仅验证:仅专注于数据验证。
这些类型导致三个主要阶段:
- 迁移现有数据(满载):AWS DMS将数据从源表传输到目标表。
- 缓存更改应用程序:在进行总负载时,对加载表的更改将缓存在复制服务器上。完成表的总负载后,AWS DMS 将应用缓存的更改。
- 持续复制(更改数据捕获):最初,事务积压会延迟源数据库和目标数据库。随着时间的流逝,这些积压工作将被处理,从而实现稳定的迁移流。
此详细说明可确保 AWS DMS 有条不紊地指导数据迁移过程,从而保持数据完整性和一致性。
CloudWatch 事件
AWS CloudWatch EventBridge 提供有关 AWS DMS 事件的通知,例如复制任务启动/删除和复制实例创建/删除。EventBridge 接收这些事件,并根据预定义的规则定向通知。
Lambda 函数
我们使用 AWS Lambda 函数来启动复制任务。在 AWS DMS 中创建事件信令任务时,Lambda 函数由配置的 EventBridge 规则自动触发。
资源限制
在管理 AWS Database Migration Service (DMS) 时,我们遵循默认资源配额,这是软限制。在 AWS 支持票证的帮助下,可以根据需要增加这些限制,以确保最佳性能。
关键的 AWS DMS 资源限制包括:
- 每个用户帐户的终结点数:1000(默认)
- 每个复制实例的终结点数:100(默认)
- 每个用户帐户的任务数:600(默认)
- 每个复制实例的任务数:200(默认)
- 每个用户帐户的复制实例数:60(默认)
例如,要将 100 个数据库从本地 MySQL 源迁移到 RDS MySQL,我们使用以下计算:
- 每个数据库的任务数:1
- 每个数据库的终结点数:2
- 每个复制实例的终端节点数:100
每个复制实例的任务总数 = 每个复制实例的终结点数 / 每个数据库的终结点 = 100 / 2 = 50。
这意味着我们每个复制实例最多可以迁移 50 个数据库。使用两个复制实例,我们可以一次性高效地迁移所有 100 个数据库。这种方法举例说明了战略性地使用资源配额进行有效的数据库迁移。
如何使用 Terraform IaC 自动执行数据迁移:概述
Terraform 和 DMS 可自动执行并保护数据迁移,从而简化流程,同时高效管理 AWS 基础设施。
以下是此无缝且安全的迁移过程的分步概述:
步骤 1:获取迁移数据库列表
检索要迁移的数据库的列表。
步骤 2:数据库创建(同构迁移)
创建目标架构或数据库结构,以便在同类数据迁移时为数据转换做好准备。
步骤 3:创建复制子网组
创建复制子网组以确保数据移动的无缝网络通信。
步骤 4:源/目标连接终结点
为每个用于迁移的数据库集配备源和目标连接。
步骤 5:创建复制实例
创建复制实例以处理数据迁移过程。
步骤 6:Lambda 与 Cloud Watch Events 集成
集成 CloudWatch 事件和 Lambda 函数以启动复制任务。
步骤 7:复制任务的创建和分配
创建复制任务并将其分配给复制实例,设置迁移。
步骤 8:迁移任务启动
为每个数据库启动迁移任务。
迁移过程和工作流图
数据迁移自动化的体系结构概述
具有 Terraform 基础设施即代码 (IAC) 的 AWS DMS 可自动执行数据迁移。数据迁移自动化过程从 Jenkins 管道的动态框架开始。该框架使用各种输入参数来自定义和定制迁移过程,提供灵活性和适应性。
下面是体系结构的详细概述:
使用 Terraform IAC 的 AWS DMS 架构
第 1 步:Jenkins 流水线参数
适用于 AWS DMS 的 Jenkins 管道首先定义基本输入参数,例如区域和环境详细信息、Terragrunt 模块详细信息和迁移首选项。
关键输入参数包括:
- AWS_REGION:从存储库填充区域列表。
- APP_ENVIRONMENT:从存储库填充应用程序环境列表。
- TG_MODULE:从存储库填充 Terragrunt 模块文件夹列表。
- TG_ACTION:允许用户从计划、验证和应用中选择 Terragrunt 操作。
- TG_EXTRA_FLAGS:用户可以传递 Terragrunt 更多标志。
- FETCH_DBLIST:确定迁移数据库列表生成类型(AUTOMATIC 和 MANUAL)。
- CUSTOM_DBLIST:如果选择FETCH_DBLIST为“手动”,则用于迁移的 SQL Server 自定义数据库列表。
- MIGRATION_TYPE:允许用户选择DMS迁移类型(满载、满载和CDC、CDC)。
- START_TASKS:允许用户打开或关闭迁移任务执行。
- TEAMS:用于生成通知的 MS Teams 频道。
第 2 步:执行阶段
根据输入参数,管道将经历不同的执行阶段:
- IAC 的源代码签出:管道首先签出 IAC 的源代码,为以下步骤奠定坚实的基础。
- 迁移数据库列表:根据所选的迁移类型,管道会自动从源实例提取迁移数据库列表或使用手动列表。
- 架构或数据库创建: 通过创建数据迁移所需的架构或数据库结构来创建目标实例。
- Terraform/Terragrunt 执行:管道执行 Terraform 或 Terragrunt 模块以简化 AWS DMS 迁移过程。
- 通知:在整个迁移过程中,更新将通过电子邮件或 MS Teams 发送。
第 3 步:自动和手动列表获取
使用 shell 脚本自动从源实例获取迁移数据库列表,并保持FETCH_DBLIST自动。或者,用户可以手动提供用于迁移的选择性列表。
步骤 4:迁移类型
Terraform/Terragrunt 模块根据 MIGRATION_TYPE 中指定的迁移类型启动 CDC、full-load-and-cdc 和 full-load 迁移。
第 5 步:自动化控制
使用 START_TASKS 手动或自动启动迁移任务。
第 6 步:凭据管理
为安全起见,请在执行 DMS Terraform/Terragrunt 模块时从 AWS Secrets Manager 检索数据库凭证。
步骤 7:创建端点
为目标实例和源实例建立端点,实现无缝连接和数据传输。
步骤 8:复制实例
根据数据库计数或配额限制创建复制实例。
步骤 9:CloudWatch 集成
配置 AWS CloudWatch 事件以在创建 AWS DMS 复制任务后触发 Lambda 函数。
步骤 10:复制任务配置
为单个数据库创建复制任务,并将其分配给可用的复制实例,以优化数据传输。
第 11 步:任务自动化
复制任务在就绪状态下自动开始使用 Lambda 函数。
步骤 12:监视迁移
使用 AWS DMS 控制台实时监控数据迁移进度,深入了解迁移过程。
第 13 步:正在进行的更改
迁移后,将正在进行的更改无缝复制到目标实例中,确保数据一致性。
第 14 步:自动验证
根据提供的验证配置,针对源实例和目标实例自动验证迁移的数据,以增强数据完整性。
步骤 15:完成和配置
确保在验证后完成用户迁移和数据库配置。
第 16 步:目标测试和验证
更新应用程序配置以使用目标实例进行测试,以确保功能正常。
步骤 17:直接转换复制
经过全面测试后,从源实例执行直接转换复制,拍摄源实例的最终快照以结束该过程。
AWS DMS with Terraform 的主要特性和优势
采用 Terraform IAC 的 AWS DMS 具有多种优势:成本效益、易用性、最大限度的停机时间和强大的复制。
成本优化
AWS DMS 迁移提供了一种经济高效的模型,因为它根据计算资源和额外的日志存储进行成本计算。
易用性
迁移过程得到简化,无需特定的驱动程序或应用程序安装,并且通常无需对源数据库进行任何更改。一键式资源创建简化了整个迁移过程。
连续复制和最短的停机时间
AWS DMS 可确保持续的源数据库复制,即使在运行期间也是如此,从而实现最短的停机时间和无缝的数据库切换。
持续复制
通过持续的复制任务保持源数据库和目标数据库之间的同步,可确保数据一致性。
多样化的来源/目标支持
AWS DMS 支持跨 SQL、NoSQL 和基于文本的目标从同类迁移(例如 MySQL 到 MySQL)到异构迁移(例如 Oracle 到 Amazon Aurora)。
数据库整合
AWS DMS with Terraform 可以轻松地将多个源数据库整合到单个目标数据库中,这适用于同构和异构迁移。
模式转换和迁移的效率
AWS DMS 最大限度地减少了迁移用户、存储过程、触发器和架构转换等任务中的手动工作,同时根据应用程序功能验证目标数据库。
使用 Terraform IAC 自动预配
利用 Terraform 自动创建和销毁 AWS DMS 复制任务,非常适合管理涉及多个数据库的迁移。
自动化管道集成
与 CI/CD 管道无缝集成,实现高效的迁移管理、监控和进度跟踪。
如何使用 AWS DMS 和 Terraform IAC 的组合来自动执行数据迁移。该博客作为指南,探索这些技术之间的协同作用,并为企业提供优化数字化转型的工具。