使用 Amazon OpenSearch Service 集群作为 AWS Database Migration Service 的目标 - AWS 数据库迁移服务

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用 Amazon OpenSearch Service 集群作为 AWS Database Migration Service 的目标

您可以使用 AWS DMS 将数据迁移到 Amazon OpenSearch Service (OpenSearch Service)。OpenSearch Service 是一项托管服务,让用户能够轻松部署、运行并扩展 OpenSearch Service 集群。

在 OpenSearch Service 中,您使用索引和文档。索引是文档的集合,文档是包含标量值、数组和其他对象的 JSON 对象。OpenSearch 提供基于 JSON 的查询语言,因此您可以查询索引中的数据并检索相应的文档。

在 AWS DMS 为 OpenSearch Service 的目标端点创建索引时,它会为源端点的每个表创建一个索引。创建 OpenSearch Service 索引的开销取决于多个因素。这些因素包括所创建的索引数量、这些索引中的数据总量,以及 OpenSearch 为每个文档存储的少量元数据。

使用适合您的迁移范围的计算和存储资源配置 OpenSearch Service 集群。建议您根据要使用的复制任务考虑以下因素:

  • 对于完全数据加载,请考虑您要迁移的数据总量以及传输速度。

  • 对于复制持续更改,请考虑更新频率,以及您的端到端延迟要求。

此外,还应在 OpenSearch 集群上配置索引设置,并密切关注文档计数。

多线程完全加载任务设置

为帮助提高传输速度,AWS DMS 支持向 OpenSearch Service 目标集群进行多线程完全加载。AWS DMS 支持这种多线程,其任务设置包括以下内容:

  • MaxFullLoadSubTasks – 使用此选项指示要并行加载的表的最大数目。DMS 使用专用的子任务将各个表加载到其对应的 OpenSearch Service 目标索引。默认值为 8;最大值为 49。

  • ParallelLoadThreads – 使用此选项指定 AWS DMS 将各个表加载到其 OpenSearch Service 目标索引时使用的线程数。OpenSearch Service 目标的最大值为 32。您可以请求提高此最大值限制。

    注意

    如果您不更改 ParallelLoadThreads 的默认值 (0),AWS DMS 一次传输一个记录。此方法会在您的 OpenSearch Service 集群上施加过多的负载。确保您将此选项设置为 1 或更高。

  • ParallelLoadBufferSize – 使用此选项指定在缓冲区(并行加载线程将数据加载到 OpenSearch Service 目标时使用)中存储的最大记录数。默认值是 50。最大值为 1,000。将此设置与 ParallelLoadThreads 一起使用;仅在有多个线程时ParallelLoadBufferSize 才有效。

有关 DMS 如何使用多线程加载 OpenSearch Service 集群的更多信息,请参阅 AWS 博客文章扩展 Amazon OpenSearch Service 以进行 AWS Database Migration Service 迁移

多线程 CDC 加载任务设置

您可以使用任务设置来修改 PutRecords API 调用的行为,以提高 OpenSearch Service 目标集群的更改数据捕获 (CDC) 性能。为此,您可以使用 ParallelApply* 任务设置来指定并发线程的数量、每个线程的队列数以及要存储在缓冲区中的记录数。例如,假设您要执行 CDC 加载并且要并行应用 32 个线程。您还希望对于每个线程访问 64 个队列,每个缓冲区存储 50 条记录。

注意

在 AWS DMS 版本 3.4.0 及更高版本中,支持在 CDC 到 Amazon OpenSearch Service 目标端点期间使用 ParallelApply* 任务设置。

要提高 CDC 性能,请 AWS DMS 支持以下任务设置:

  • ParallelApplyThreads – 指定 AWS DMS 在 CDC 加载期间用于将数据记录推送到 OpenSearch Service 目标端点的并发线程数。默认值为零 (0),最大值为 32。

  • ParallelApplyBufferSize – 指定在 CDC 加载过程中,要在每个缓冲区队列中存储的、供并发线程推送到目标 OpenSearch Service 端点的最大记录数。默认值是 100,最大值是 1,000。当 ParallelApplyThreads 指定多个线程时,请使用此选项。

  • ParallelApplyQueuesPerThread – 指定每个线程访问以将数据记录从队列中取出且在 CDC 期间为 OpenSearch Service 端点生成批处理负载的队列数。

使用 ParallelApply* 任务设置时, partition-key-type 默认值是表的 primary-key,而不是 schema-name.table-name

从关系数据库表迁移到 OpenSearch Service 索引

AWS DMS 支持将数据迁移到 OpenSearch Service 的标量数据类型。在从 Oracle 或 MySQL 等关系数据库迁移到 OpenSearch Service 时,您可能希望重构存储此数据的方式。

AWS DMS 支持以下 OpenSearch Service 标量数据类型:

  • 布尔值

  • 日期

  • Float

  • Int

  • 字符串

AWS DMS 将 Date 类型的数据转换为 String 类型。您可以指定自定义映射来解释这些日期。

AWS DMS 不支持迁移 LOB 数据类型。

使用 Amazon OpenSearch Service 作为 AWS Database Migration Service 的目标的先决条件

在开始使用 OpenSearch Service 数据库作为 AWS DMS 的目标之前,请确保您已创建 AWS Identity and Access Management (IAM) 角色。此角色应该允许 AWS DMS 访问目标端点的 OpenSearch Service 索引。以下 IAM policy 中显示了所需的最小访问权限集合。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "1", "Effect": "Allow", "Principal": { "Service": "dms.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }

您在迁移到 OpenSearch Service 时使用的角色必须具有以下权限。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "es:ESHttpDelete", "es:ESHttpGet", "es:ESHttpHead", "es:ESHttpPost", "es:ESHttpPut" ], "Resource": "arn:aws:es:region:account-id:domain/domain-name/*" } ] }

在上述示例中,将 region 替换为 AWS 区域标识符、account-id 替换为您的 AWS 账户 ID,domain-name 替换为您的 Amazon OpenSearch Service 域的名称。例如,arn:aws:es:us-west-2:123456789012:domain/my-es-domain

使用 OpenSearch Service 作为 AWS DMS 的目标时的端点设置

您可以使用端点设置来配置 OpenSearch Service 目标,这与使用额外连接属性类似。您可以在使用 AWS DMS 控制台创建目标端点时指定设置,或者在 AWS CLI 中使用符合 --elasticsearch-settings '{"EndpointSetting": "value", ...}' JSON 语法的 create-endpoint 命令。

下表显示了将 OpenSearch Service 作为目标时您可以使用的端点设置。

属性名称 有效值 默认值和描述

FullLoadErrorPercentage

一个大于 0 但不大于 100 的正整数。

10 – 对于完全加载任务,此属性确定任务失败之前允许的错误数阈值。例如,假设源终端节点有 1,500 行且此参数设置为 10。那么,如果在写入到目标终端节点时 AWS DMS 遇到超过 150 个错误(行数的 10%),任务将失败。

ErrorRetryDuration

大于 0 的正整数。

300 – 如果目标终端节点出现错误,AWS DMS 将重试的秒数。否则,任务将失败。

使用 Amazon OpenSearch Service 作为 AWS Database Migration Service 目标时的限制

将 Amazon OpenSearch Service 作为目标时存在以下限制:

  • OpenSearch Service 使用动态映射(自动猜测)来确定用于已迁移数据的数据类型。

  • OpenSearch Service 使用唯一的 ID 存储每个文档。以下是示例 ID。

    "_id": "D359F8B537F1888BC71FE20B3D79EAE6674BE7ACA9B645B0279C7015F6FF19FD"

    每个文档 ID 为 64 字节长,因此请将其视为一项存储要求。例如,如果您从 AWS DMS 源迁移 100,000 行,生成的 OpenSearch Service 索引还需要存储空间来存储额外的 6,400,000 字节。

  • 使用 OpenSearch Service,无法对主键属性进行更新。在将持续复制与更改数据捕获 (CDC) 一起使用时,该限制是非常重要的,因为这可能会导致在目标中包含不需要的数据。在 CDC 模式下,主键映射到 SHA256 值,长度为 32 个字节。这些主键被转换为人类可读的 64 字节字符串,并用作 OpenSearch Service 文档 ID。

  • 如果 AWS DMS 遇到无法迁移的项目,它会将错误消息写入 Amazon CloudWatch Logs。这一行为不同于其他 AWS DMS 目标终端节点将错误写入例外表的行为。

  • AWS DMS 不支持连接到启用了精细访问控制且使用主用户名和密码的 Amazon ES 集群。

  • AWS DMS 不支持 OpenSearch Service 无服务器。

  • OpenSearch Service 不支持将数据写入预先存在的索引。

Amazon OpenSearch Service 的目标数据类型

AWS DMS 从异构数据库迁移数据时,此服务将数据类型从源数据库映射到称为 AWS DMS 数据类型的中间数据类型。然后,此服务将中间数据类型映射到目标数据类型。下表显示了各种 AWS DMS 数据类型及其映射到 OpenSearch Service 中的数据类型。

AWS DMS 数据类型 OpenSearch Service 数据类型

布尔值

布尔值

日期

字符串

Time

date

时间戳

date

INT4

integer

Real4

float

UINT4

integer

有关 AWS DMS 数据类型的其他信息,请参阅AWS Database Migration Service 的数据类型