Amazon DMS Serverless 组件
为了管理执行复制所需的资源,Amazon DMS Serverless 具有精细的状态,可以显示服务执行的不同内部操作。启动复制时,Amazon DMS Serverless 会根据以下复制状态计算容量负载,预置计算出的容量,然后开始数据复制。
下图演示了 Amazon DMS Serverless 复制中的状态转换。
在您开始复制后,第一个状态是正在初始化。在此状态下将初始化所有必需的参数。
紧随其后的状态包括正在准备元数据资源、正在测试连接和正在获取元数据。在这些状态下,Amazon DMS Serverless 会连接到您的源数据库以获取预测所需容量需要的信息。
当复制状态为正在测试连接时,Amazon DMS Serverless 会验证是否成功建立了与源数据库和目标数据库的连接。
正在测试连接之后的复制状态为正在获取元数据。此时,Amazon DMS 检索计算容量所需的信息。
在 Amazon DMS 检索到必要信息后,下一个状态为正在计算容量。此时,系统计算执行复制所需的底层资源的大小。
在正在计算容量之后,状态转换为正在预置容量。当复制处于这种状态时,Amazon DMS Serverless 会初始化底层计算资源。
成功预置所有资源后的复制状态为复制开始。在这种状态下,Amazon DMS Serverless 开始复制数据。复制过程包括以下几个阶段:
完全加载:在此阶段,DMS 会复制源数据存储,就像复制开始时那样。
CDC(初始):在此阶段,DMS 会复制在“完全加载”阶段对源数据存储所做的更改。仅当
StopTaskCachedChangesNotApplied任务设置为false时,DMS 才会运行此阶段。CDC(持续):在初始 CDC 阶段之后,DMS 会复制源数据库上发生的更改。仅当
StopTaskCachedChangesApplied任务设置为false时,DMS 才会在 CDC 初始阶段之后继续运行复制。
最终状态为正在运行。在正在运行状态下,数据复制正在进行中。
您停止的复制进入已停止状态。对于成功完成的仅完全加载复制任务,复制可能会进入停止状态。在停止或失败状态下恢复或重新启动复制时,需要考虑以下情况:
由于Amazon DMS 取消配置了资源,因此无法重新启动已经 48 小时未启动的复制。
本主题包含下列部分:
对于 Amazon DMS Serverless,Amazon DMS 控制台的左侧导航面板有一个新选项,即无服务器复制。对于无服务器复制,您可以指定复制,而不是指定复制实例类型或任务来定义复制。此外,您可以指定希望 DMS 为复制预置的最大和最小 DMS 容量单位(DCU)。一个 DCU 是 2GB 的 RAM。Amazon DMS 为复制当前使用的每个 DCU 向您的账户收费。有关 Amazon DMS 定价信息,请参阅 Amazon Database Migration Service 定价
然后,Amazon DMS 根据您的表映射和预测的工作负载大小,自动预置复制资源。此容量单位是在您指定的最小和最大容量单位值范围内的值。
支持的端点
使用 Amazon DMS Serverless,您无需选择和管理引擎版本,因为服务会处理该设置。Amazon DMSServerless 支持以下源:
-
MongoDB
-
Amazon DocumentDB (with MongoDB compatibility)
-
Microsoft SQL Server
-
PostgreSQL 兼容数据库
-
MySQL 兼容数据库
-
MariaDB
-
Oracle
-
Amazon S3
-
IBM Db2
Amazon DMS Serverless 支持以下目标:
-
Microsoft SQL Server
-
PostgreSQL
-
MySQL 兼容数据库
-
Oracle
-
Amazon S3
-
Amazon Redshift
-
Amazon DynamoDB
-
Amazon Kinesis Data Streams
-
Amazon Managed Streaming for Apache Kafka
-
Amazon OpenSearch Service
-
Amazon DocumentDB (with MongoDB compatibility)
-
Amazon Neptune
作为 Amazon DMS Serverless 的一部分,您可以访问允许您创建、配置、启动和管理 Amazon DMS Serverless 复制的控制台命令。要使用控制台的无服务器复制部分运行这些命令,您需要执行以下操作之一:
设置新的 Amazon Identity and Access Management(IAM)policy 和 IAM 角色以将其附加到该策略。
使用 Amazon CloudFormation 模板提供所需的访问权限。
Amazon DMS Serverless 需要您的账户中存在服务相关角色(SLR)。Amazon DMS 管理此角色的创建和使用。有关确保您拥有所需 SLR 的更多信息,请参阅Amazon DMS Serverless 的服务相关角色。
创建无服务器复制
要在两个现有 Amazon DMS 端点之间创建无服务器复制,请执行以下操作。有关创建 Amazon DMS 端点的信息,请参阅创建源和目标终端节点。
创建无服务器复制
登录到 Amazon Web Services 管理控制台,然后通过以下网址打开 Amazon DMS 控制台:https://console.aws.amazon.com/dms/v2/。
-
在导航窗格上,选择无服务器复制,然后选择创建复制。
-
在创建复制页面上,指定您的无服务器复制配置:
选项 操作 名称
输入用于标识复制的名称,例如 DMS-replication。描述性 Amazon 资源名称(ARN)– 可选 您可以使用此可选参数对复制进行描述。 源数据库端点 选择账户中的现有端点。请注意,Amazon DMS Serverless 仅支持 Amazon DMS Standard 支持的端点类型的子集。 目标数据库端点 选择账户中的现有端点。请注意,Amazon DMS Serverless 仅支持 Amazon DMS Standard 支持的端点类型的子集。 复制类型 根据您的要求选择复制类型: 完全加载:Amazon DMS 仅迁移现有数据。
完全加载和更改数据捕获(CDC):Amazon DMS 迁移现有数据和复制期间发生的更改。
更改数据捕获(CDC):Amazon DMS 仅迁移开始复制后发生的更改。
在设置部分中,设置复制所需的设置。
在表映射部分中,设置表映射以定义选择和筛选所要复制的数据的规则。在指定映射之前,请确保查看有关源数据库和目标数据库之间的数据类型映射的文档部分。有关源数据库和目标数据库的数据类型映射的信息,请参阅 使用 Amazon DMS 端点主题中源和目标端点类型的“数据类型”部分。
在计算设置部分中,设置以下设置。有关 Compute Config 设置的信息,请参阅 Compute Config。
选项 操作 VPC
选择现有 VPC。 子网组
选择现有子网组。 VPC 安全组
选择默认值(如果尚未选择)。 Amazon KMS 密钥
请选择合适的 KMS 密钥。有关 KMS 密钥的信息,请参阅《Amazon Key Management Service API 参考》中的创建密钥。 部署
保留原样。 可用区
保留原样。 最小 DMS 容量单位(DCU)–(可选)
留空可使用默认值 1 DCU。 最大 DMS 容量单位(DCU)
选择 16 个 DCU。 保留维护设置不变。
选择创建复制。
Amazon DMS 创建无服务器复制来执行迁移。
修改 Amazon DMS Serverless 复制
要修改您的复制配置,请使用 modify-replication-config 操作。您只能修改处于 CREATED、STOPPED 或 FAILED 状态的 Amazon DMS 复制配置。有关 modify-replication-config 操作的信息,请参阅《Amazon Database Migration Service API 参考》中的 ModifyReplicationConfig。
使用 Amazon Web Services 管理控制台 修改无服务器复制配置
登录到 Amazon Web Services 管理控制台,然后通过以下网址打开 Amazon DMS 控制台:https://console.aws.amazon.com/dms/v2/。
在导航窗格中,选择无服务器复制。
-
选择您要修改的复制。下表描述了根据复制的当前状态,您可以进行的修改。
设置 描述 允许的状态 名称
您可以更改复制的名称。输入复制的名称,其中包含 8 到 16 个可打印 ASCII 字符(不含 /、" 和 @)。该名称在所选择 Amazon 区域中对于您的账户应唯一。您可以选择向名称中添加一些详细信息,如包含 Amazon 区域和要执行的任务,例如
west2-mysql2mysql-config1。ReplicationState为CREATED、STOPPED或FAILED。源数据库端点
选择一个新的现有源端点作为复制的源。
ReplicationState为CREATED,当ProvisionState是null时为FAILED。目标数据库端点
选择一个新的现有目标端点作为复制的目标。
ReplicationState为CREATED,当ProvisionState是null时为FAILED。复制类型
您可以修改无服务器复制的类型。
ReplicationState为CREATED,当ProvisionState是null时为FAILED。复制设置
您可以修改复制设置,包括目标表准备模式、复制中是否包含 LOB 列、最大 LOB 大小、验证和日志记录。有关更多信息,请参阅 Task settings(任务设置)。
ReplicationState为CREATED、STOPPED或FAILED。表映射
您可以修改无服务器复制的表映射设置,包括选择规则和转换规则。有关更多信息,请参阅 表映射。
ReplicationState为CREATED、STOPPED或FAILED。Compute Config
您可以修改无服务器复制的 Compute Config 设置,包括网络设置、扩展设置和维护设置。有关 Compute Config 设置的信息,请参阅 Compute Config。
当
ReplicationState为CREATED、STOPPED或FAILED时,您可以修改以下扩展、维护和网络设置:MinCapacityUnitsMaxCapacityUnitsMultiAZPreferredMaintenanceWindowVpcSecurityGroupIds
在
ReplicationState为CREATED或者为FAILED(当ProvisionState是null时)时,您可以修改以下网络和安全设置:AvailabilityZoneDnsNameServersKmsKeyIdReplicationSubnetGroupId
注意
当 DMS 任务状态为启动或运行时,您无法修改与 DMS 任务关联的端点。
Compute Config
您可以使用 Compute Config 参数或控制台部分配置复制预置。Compute Config 对象中的字段包括以下内容:
| 选项 | 描述 |
|---|---|
|
MinCapacityUnits |
这是 Amazon DMS 要预置的 DMS 容量单位(DCU)的最小数量。这也是自动缩放可以缩减到的最小 DCU。 |
|
MaxCapacityUnits |
这是 Amazon DMS 可以预置的最大 DMS 容量单位(DCU),具体取决于对您复制的容量预测。这也是自动缩放可以纵向扩展到的最大 DCU。 |
|
KmsKeyId |
选择要用于加密复制存储和连接信息的加密密钥。如果选择(默认值)aws/dms,则 Amazon DMS 会使用与您的账户和 Amazon Web Services 区域关联的默认 KMS 密钥。将显示说明和您的账号以及密钥的 ARN。有关使用加密密钥的更多信息,请参阅设置加密密钥和指定 Amazon KMS 权限。在本教程中,选择(默认)aws/dms。 |
|
ReplicationSubnetGroupId |
在选定 VPC 中要在其中创建复制的复制子网组。如果源数据库位于 VPC 中,请选择包含源数据库的子网组作为复制的位置。有关复制子网组的更多信息,请参阅 创建复制子组。 |
|
VpcSecurityGroupIds |
在 VPC 中创建复制实例。如果源数据库位于 VPC 中,请选择一个 VPC 安全组,该安全组提供对数据库所在的数据库实例的访问权限。 |
|
PreferredMaintenanceWindow |
此参数定义每周可以进行系统维护的时间范围,采用通用协调时间(UTC)。默认值为每个 Amazon Web Services 区域 8 小时的时间段中随机选择的 30 分钟时段(随机选取周中的某天进行)。 |
|
MultiAZ |
设置此可选参数可在另一个可用区中创建复制的备用副本以支持失效转移。如果您打算使用更改数据捕获(CDC)或持续复制,建议您启用该选项。 |
了解 Amazon DMS Serverless 中的自动扩展
在您预置复制并且复制处于 RUNNING 状态后,Amazon DMS 服务将管理底层资源的容量以适应不断变化的工作负载。此管理功能根据以下复制设置扩展复制资源:
MinCapacityUnitsMaxCapacityUnits
在超过利用率阈值上限一段时间后,复制会纵向扩展;当容量利用率在较长一段时间内低于容量利用率阈值下限时,复制会纵向缩减。
注意
在完全加载过程中,Serverless 复制无法自动缩减。
调整 Amazon DMS Serverless 中的自动扩展
要调整您的复制自动扩缩参数,我们建议您将 MaxCapacityUnits 设置为最大值,然后让 Amazon DMS 管理资源的预置。建议您选择最大的 DCU 最大容量设置来适应事务量的峰值,以便从自动扩缩中获得最大的好处。如果您的复制持续使用最大 DCU,则定价计算器会显示每月的最大成本。最大 DCU 并不代表实际成本,因为您只需为使用的容量付费。
如果您的复制未使用资源的全部容量,则 Amazon DMS 会逐渐取消预置资源以节省成本。但是,由于预置和取消预置资源需要时间,因此我们建议您将 MinCapacityUnits 设置为能够应对预计复制工作负载中会出现的任何突然峰值的值。这样可以防止您的复制资源预置不足,而 Amazon DMS 会为更高的工作负载级别预置资源。
如果复制资源的预置不足,最大容量设置太低,无法满足数据需求,或者最小容量太低,无法处理复制工作负载突然激增,则您的 CapacityUtilization 指标可能会始终保持在最大值。这可能会导致您的复制失败。如果由于资源预置不足而导致复制失败,则 Amazon DMS 会在复制日志中创建内存不足事件。当由于复制工作负载突然激增或调整配置而导致内存不足的情况时,系统具有内置的自动扩缩功能来处理这种情况并恢复处理。但是,这种自动恢复机制不是即时的,可能需要一些时间才能生效。为了更快地恢复,您可以通过修改任务配置来采取手动操作,特别是通过增加 MinCapacityUnits 值然后恢复任务。与等待自动扩缩过程相比,这种手动干预可以更快地解决内存不足错误。
监控 Amazon DMS Serverless 复制
Amazon 提供了多种工具来监控 Amazon DMS Serverless 复制并对可能出现的事件做出响应:
Amazon DMS Serverless 复制指标
无服务器复制监控包括针对以下统计数据的 Amazon CloudWatch 指标:这些统计数据按每个无服务器复制进行分组。
|
指标 |
单位 |
描述 |
|---|---|---|
| CapacityUtilization | 百分比 |
无服务器复制使用的内存百分比 |
| CDCIncomingChanges | 百分比 |
在某个时间点等待应用于目标的总更改事件数。请注意,这与源终端节点的事务更改速率指标不同。对于该指标,较大的值通常表示 Amazon DMS 无法及时应用捕获的更改,从而导致较高的目标延迟。 |
| CDCLatencySource | 秒 |
从源端点中捕获的最后一个事件与 Amazon DMS 实例的当前系统时间戳之间的间隔(秒)。CDCLatencySource 表示源实例和复制实例之间的延迟。高 CDCLatencySource 意味着从源捕获更改的过程会延迟。要确定正在进行的复制中的延迟,您可以将此指标与 CDCLatencyTarget 一起查看。如果 CDCLatencySource 和 CDCLatencyTarget 都很高,请先调查 CDCLatencySource。 当源和复制之间没有复制延迟时,CDCLatencySource 可以为 0。当复制尝试读取源事务日志中的下一个事件,并且与上次读取源相比没有新事件时,CDCLatencySource 也可能变为零。出现这种情况时,复制会将 CDCLatencySource 重置为 0。 |
| CDCLatencyTarget | 秒 |
在目标上等待提交的第一个事件时间戳与 Amazon DMS 实例的当前系统时间戳之间的间隔(秒)。目标延迟是复制实例服务器时间,与转发到目标组件的最早未经确认的事件 ID 时间之间的差异。换句话说,目标延迟是复制实例的时间戳,与已应用但未经 TRG 端点确认的最早事件之间的时间戳之差(99%)。当 CDCLatencyTarget 很高时,它表示将更改事件应用于目标的过程已延迟。要确定正在进行的复制中的延迟,您可以将此指标与 CDCLatencySource 一起查看。如果 CDCLatencyTarget 很高但是 CDCLatencySource 不高,请调查是否:
|
| CDCThroughputBandwidthTarget | KB/秒 |
目标的传出数据传输速率,以每秒 KB 数为单位。CDCThroughputBandwidth 记录在采样点上传输的传出数据。如果未找到网络流量,则该值为零。由于 CDC 不发布长时间运行的事务,可能不会记录网络流量。 |
| CDCThroughputRowsSource | 行/秒 |
源的传入更改速率,以每秒行数为单位。 |
| CDCThroughputRowsTarget | 行/秒 |
目标的传出更改速率,以每秒行数为单位。 |
| FullLoadThroughputBandwidthTarget | KB/秒 |
目标在满负载情况下的传出数据传输速率,以每秒 KB 数为单位。 |
| FullLoadThroughputRowsTarget | 行/秒 |
目标上的完全加载的传出更改,以行/秒为单位。 |
Amazon DMS Serverless 复制日志
在 Amazon DMS 迁移过程中,您可以使用 Amazon CloudWatch 记录复制信息。您可以在选择复制设置时启用日志记录。
无服务器复制会将状态日志上传到您的 CloudWatch 账户,以提高对复制进度的可见性,并有助于进行故障排除。
Amazon DMS 将无服务器链接的日志上传到带有 dms-serverless-replication- 前缀的专用日志组。在此日志组中,有一个名为的 <your replication config resource ID>dms-serverless-replication-orchestrator- 日志流。此日志流报告您的复制的复制状态,并显示一条相关消息,提供有关其在此阶段所做工作的更多详细信息。有关日志条目的示例,请参阅下文的 无服务器复制日志示例。<your replication config resource ID>
注意
在运行复制之前,Amazon DMS 不会创建日志组或流。如果您只创建复制,Amazon DMS 不会创建日志组或流。
要查看所运行复制的日志,请按照下列步骤操作:
-
打开 Amazon DMS 控制台,在导航窗格中选择无服务器复制。将出现无服务器复制对话框。
-
转到配置部分,然后在“常规”列中选择查看无服务器日志。此时 CloudWatch 日志组打开。
如果复制失败,Amazon DMS 会创建一个复制状态为 failed 的日志条目,并显示一条描述失败原因的消息。作为对复制失败进行故障排除的第一步,您应该查看 CloudWatch 日志。
注意
与 Amazon DMS Standard 一样,您可以选择对数据迁移本身的进度启用更精细的日志记录,也就是底层复制任务发出的日志。您可以在复制设置中,通过将 Logging 字段中的 EnableLogging 设置为true 来启用这些日志,如以下 JSON 示例所示:
{ "Logging": { "EnableLogging": true } }
如果您启用这些日志,它们将仅在无服务器复制的 running 阶段开始出现。它们将与之前的日志流出现在同一个日志组中,但会出现在新的日志流 dms-serverless-serv-res-id- 下。有关如何解释无服务器复制日志的信息,请参阅以下章节。{unique identifier}
无服务器复制日志示例
本节包括用于无服务器复制的日志条目示例。
示例:复制开始
运行无服务器复制时,Amazon DMS 将创建与下类似的日志条目:
{'replication_state':'initializing', 'message': 'Initializing the replication workflow.'}
示例:复制失败
如果复制中的端点之一配置不正确,则 Amazon DMS 会创建一个与以下类似的日志条目:
{'replication_state':'failed', 'message': 'Test connection failed for endpoint X.', 'failure_message': 'X'}
如果在出现故障后,您在日志中看到此消息,请确保指定的端点运行正常且配置正确。
提高了 Oracle 到 Amazon Redshift 和 Amazon S3 的完全加载迁移的吞吐量
对于从 Oracle 到 Amazon Redshift 和 Amazon S3 的完全加载迁移,Amazon DMS 显著提高了吞吐量性能。DMS 会自动为表映射中没有自定义 parallel-load 选项的表启用此功能。对于具有自定义并行加载选项的表,DMS Serverless 会根据给定的表映射配置来分配表负载。要使用增强的吞吐量,请执行以下操作:
-
提供不引用分区或边界的选择规则。例如,如果表映射中的表设置包含
parallel-load,则 DMS Serverless 将不会使用增强的吞吐量特征。有关更多信息,请参阅 选择规则和操作。 -
将
MaxFileSize和WriteBufferSize设置为 64 MB。有关更多信息,请参阅 使用 Amazon Redshift 作为 Amazon DMS 的目标时的端点设置。 -
对于包含稀疏数据的数据存储,建议将
CompressCsvFiles设置为true;对于包含密集数据的数据存储,则设置为false。 -
将以下任务设置设为
0:-
ParallelLoadThreads -
ParallelLoadQueuesPerThread -
ParallelApplyThreads -
ParallelApplyQueuesPerThread -
ParallelLoadBufferSize
-
-
将
MaxFullLoadSubTasks设置为49以支持并行数据迁移。 -
将
LOB mode设置为inline。有关更多信息,请参阅 在 Amazon DMS 任务中为源数据库设置 LOB 支持。
Amazon DMS 不为以下复制提供增强的吞吐量性能:
-
使用并行加载对表进行复制。有关更多信息,请参阅 对所选表、视图和集合使用并行加载。
-
使用数据转换规则进行复制。
-
使用筛选规则进行复制。
-
使用 转换规则进行复制。
了解 Amazon DMS Serverless 中的存储自动扩缩
当您启动复制过程时,Amazon DMS Serverless 会为复制分配 100GB 的初始存储空间。存储空间主要由日志文件和缓存的事务消耗。对于缓存事务,仅在需要将缓存的事务写入磁盘时消耗存储空间。因此,Amazon DMS Serverless 不会占用大量存储空间。一些例外情况包括:
-
产生大量事务负载的超大型表。加载大型表可能需要花费一些时间,因此,在大型表加载期间,很有可能将缓存的事务写入磁盘。
-
配置为在加载缓存的事务之前暂停的任务。在此情况下,将缓存所有事务,直到为所有表完成完全加载。在使用此配置时,缓存的事务可能会占用大量存储空间。
-
使用将加载到 Amazon Redshift 中的表配置的任务。在目标为 Amazon Aurora 的情况下,此配置不会成为问题。
因此,Amazon DMS Serverless 每 15 分钟监控一次存储利用率。一旦分配的存储利用率达到 90%,Amazon DMS Serverless 就会通过额外的存储来扩大复制范围。如果复制的 100% 存储空间已被利用,并且复制任务在扩缩过程之前或期间失败,则成功完成扩缩后,DMS Serverless 会恢复任务。
注意
-
当您继续执行先前停止的任务时,对于任何未完成的表,将从头开始重新启动完全加载操作。
-
存储扩缩事件期间对 DMS 任务性能没有影响。
-
两次存储自动扩缩事件之间没有冷却期。