将 Amazon Elasticsearch Service 集群作为 AWS Database Migration Service 的目标 - AWS Database Migration Service

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

将 Amazon Elasticsearch Service 集群作为 AWS Database Migration Service 的目标

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

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

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

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

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

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

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

多线程完全加载任务设置

为了帮助提高传输速度,AWS DMS 支持多线程完全加载到 Amazon ES 目标集群。AWS DMS 支持此多线程以及包含以下内容的任务设置:

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

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

    注意

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

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

有关 DMS 如何使用多线程处理加载 Amazon ES 集群的更多信息,请参阅 AWS 博客帖子为 AWS Database Migration Service 迁移扩展 Amazon Elasticsearch Service .

多线程 CDC 加载任务设置

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

注意

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

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

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

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

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

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

从关系数据库表迁移到 Amazon ES 索引

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

AWS DMS 支持以下 Amazon ES 标量数据类型:

  • Boolean

  • 日期

  • Float

  • Int

  • 字符串

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

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

将 Amazon Elasticsearch Service 作为 AWS Database Migration Service 目标的先决条件

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

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

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

{ "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 Elasticsearch Service 域的名称。示例是 arn:aws:es:us-west-2:123456789012:domain/my-es-domain

将 Amazon ES 作为 AWS DMS 目标时的额外连接属性

在设置 Amazon ES 目标终端节点时,您可以指定额外的连接属性。额外的连接属性是使用键值对指定的并以分号分隔。

下表介绍了将 Amazon ES 实例作为 AWS DMS 源时可用的额外连接属性。

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

fullLoadErrorPercentage

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

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

errorRetryDuration

大于 0 的正整数。

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

将 Amazon Elasticsearch Service 作为 AWS Database Migration Service 目标的限制

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

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

  • Amazon ES 使用唯一 ID 存储每个文档。以下是示例 ID。

    "_id": "D359F8B537F1888BC71FE20B3D79EAE6674BE7ACA9B645B0279C7015F6FF19FD"

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

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

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

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

的目标数据类型Amazon Elasticsearch Service

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

AWS DMS 数据类型 Amazon ES 数据类型

Boolean

布尔值

日期

字符串

时间

date

时间戳

date

INT4

integer

Real4

float

UINT4

integer

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