将 Redis 作为 Amazon Database Migration Service 的目标 - Amazon Database Migration Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

将 Redis 作为 Amazon Database Migration Service 的目标

Redis 是一个开源的内存数据结构存储,用作数据库、缓存和消息代理。在内存中管理数据可能导致读取或写入操作花费不到一毫秒的时间,每秒可执行数亿次操作。作为内存数据存储,Redis 支持需要亚毫秒响应时间的最高要求应用程序。

使用 Amazon DMS,您可以将数据从任何支持的源数据库迁移到目标 Redis 数据存储,并且可以最大限度地减少停机时间。有关 Redis 的更多信息,请参阅 Redis 文档

除本地 Redis 之外,Amazon Database Migration Service 还支持以下内容:

  • Amazon ElastiCache for Redis 作为目标数据存储。ElastiCache for Redis 可与您的 Redis 客户端配合使用,并使用开放的 Redis 数据格式来存储数据。

  • Amazon MemoryDB for Redis 作为目标数据存储。MemoryDB 与 Redis 兼容,使您能够使用当前在用的所有 Redis 数据结构、API 和命令来构建应用程序。

有关将 Redis 作为 Amazon DMS 目标的其他信息,请参阅以下章节:

将 Redis 集群作为 Amazon DMS 目标的先决条件

DMS 支持独立配置中的本地 Redis 目标,也支持在多个节点之间自动分片数据的 Redis 集群。分片是将数据分成小块(称为分片)的过程,这些小块分布在多个服务器或节点上。实际上,分片是一个数据分区,它包含总数据集的子集,并作为总工作负载的一部分。

由于 Redis 是键值 NoSQL 数据存储,因此当您的源是关系数据库时,使用的 Redis 键命名约定是 schema-name.table-name.primary-key。在 Redis 中,键和值不得包含特殊字符 %。否则,DMS 会跳过记录。

注意

如果您使用 ElastiCache for Redis 作为目标,则 DMS 仅支持启用集群模式配置。有关使用 ElastiCache for Redis 版本 6.x 或更高版本创建启用集群模式的目标数据存储的更多信息,请参阅《Amazon ElastiCache for Redis 用户指南》中的入门

在开始数据库迁移之前,请使用以下条件启动 Redis 集群。

  • 集群拥有一个或多个分片。

  • 如果您使用 ElastiCache for Redis 目标,请确保您的集群不使用基于 IAM 角色的访问控制。而是使用 Redis Auth 对用户进行身份验证。

  • 启用多可用区。

  • 确保集群具有足够的可用内存以容纳要从数据库迁移的数据。

  • 在开始初始迁移任务之前,请确保您的目标 Redis 集群中已清除所有数据。

在创建集群配置之前,应该确定数据迁移的安全要求。无论目标复制组的加密配置如何,DMS 都支持迁移到目标复制组。但是,只有在创建集群配置时才能启用或禁用加密。

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

将 Redis 作为目标时存在以下限制:

  • 由于 Redis 是键值 no-sql 数据存储,因此当您的源是关系数据库时,使用的 Redis 键命名约定是 schema-name.table-name.primary-key

  • 在 Redis 中,键值不能包含特殊字符 %。否则,DMS 会跳过记录。

  • DMS 不会迁移包含特殊字符的行。

  • DMS 不会迁移字段名称中包含特殊字符的字段。

  • 不支持完整 LOB 模式。

  • 使用 ElastiCache for Redis 作为目标时,不支持私有证书颁发机构 (CA)。

将数据从关系或非关系数据库迁移到 Redis 目标

您可以将数据从任何源 SQL 或 NoSQL 数据存储直接迁移到 Redis 目标。设置和开始到 Redis 目标的迁移类似于使用 DMS 控制台或 API 进行的任何完全加载和更改数据捕获迁移。要将数据库迁移到 Redis 目标,请执行以下操作。

  • 创建复制实例以执行迁移的所有过程。有关更多信息,请参阅创建复制实例

  • 指定源端点。有关更多信息,请参阅创建源和目标终端节点

  • 找到集群的 DNS 名称和端口号。

  • 下载可用来验证 SSL 连接的证书捆绑包。

  • 指定目标端点,如下所述。

  • 创建一个任务或一组任务来定义要使用的表和复制过程。有关更多信息,请参阅创建任务

  • 将数据从源数据库迁移到目标集群。

您可以通过以下两种方式之一开始数据库迁移:

  1. 您可以选择 Amazon DMS 控制台并在其中执行每个步骤。

  2. 您可以使用 Amazon Command Line Interface (Amazon CLI)。有关使用适用于 Amazon DMS 的 CLI 的更多信息,请参阅适用于 Amazon DMS 的 Amazon CLI

找到集群的 DNS 名称和端口号
  • 使用以下 Amazon CLI 命令为 replication-group-id 提供复制组的名称。

    aws elasticache describe-replication-groups --replication-group-id myreplgroup

    此处,输出在集群中主节点的 Address 属性中显示 DNS 名称,在 Port 属性中显示端口号。

    ... "ReadEndpoint": { "Port": 6379, "Address": "myreplgroup- 111.1abc1d.1111.uuu1.cache.example.com" } ...

    如果您使用 MemoryDB for Redis 作为目标,请使用以下 Amazon CLI 命令为您的 Redis 集群提供端点地址。

    aws memorydb describe-clusters --clusterid clusterid
下载可用来验证 SSL 连接的证书捆绑包。
  • 在命令行输入以下 wget 命令。Wget 是一个免费的 GNU 命令行实用工具,用于从互联网下载文件。

    wget https://s3.aws-api-domain/rds-downloads/rds-combined-ca-bundle.pem

    在这里,aws-api-domain 在您的 Amazon 所在区域中填写访问指定 S3 存储桶所需的 Amazon S3 域及其提供的 rds-combined-ca-bundle.pem 文件。

使用 Amazon DMS 控制台创建目标端点

此端点适用于已经在运行的 Redis 目标。

  • 在控制台的导航窗格中,选择端点,然后选择创建端点。下表描述了设置。

    对于该选项 请执行该操作

    终端节点类型

    选择目标端点类型。

    终端节点标识符

    输入端点名称。例如,在名称中包含端点的类型,如 my-redis-target

    目标引擎

    选择 Redis 作为您希望此端点连接的数据库引擎类型。

    集群名称

    输入您的 Redis 集群的 DNS 名称。

    端口

    输入您的 Redis 集群的端口号。

    SSL 安全协议

    选择纯文本SSL 加密

    纯文本 – 该选项不为端点和数据库之间的流量提供传输层安全性协议 (TLS) 加密。

    SSL 加密 – 如果选择此选项,请输入 SSL 证书颁发机构 (CA) 证书 ARN 以验证服务器的证书并建立加密连接。

    对于本地 Redis,DMS 同时支持公有和私有证书颁发机构 (CA)。对于 ElastiCache for Redis,DMS 仅支持公有 CA。

    身份验证类型

    选择连接到 Redis 目标时要执行的身份验证类型。选项包括身份验证角色身份验证令牌

    如果选择身份验证角色,请提供身份验证用户名身份验证密码

    如果选择身份验证令牌,则仅提供身份验证密码

    复制实例

    [可选] 仅在您想要测试连接时,才选择先前在创建复制实例页面上输入的复制实例的名称。

提供端点的所有信息后,Amazon DMS 会创建您的 Redis 目标端点以供数据库迁移期间使用。

有关创建迁移任务和开始数据库迁移的信息,请参阅创建任务

指定 Redis 作为目标时的端点设置

要创建或修改目标终端节点,您可以使用控制台,也可以使用 CreateEndpointModifyEndpoint API 操作。

对于 Redis 目标,在 Amazon DMS 控制台中的创建端点修改端点控制台页面上指定特定于端点的设置

使用 CreateEndpointModifyEndpoint API 操作时,请为 RedisSettings 选项指定请求参数。以下示例说明如何使用 Amazon CLI 执行此操作。

aws dms create-endpoint --endpoint-identifier my-redis-target --endpoint-type target --engine-name redis --redis-settings '{"ServerName":"sample-test-sample.zz012zz.cluster.eee1.cache.bbbxxx.com","Port":6379,"AuthType":"auth-token", "SslSecurityProtocol":"ssl-encryption", "AuthPassword":"notanactualpassword"}' { "Endpoint": { "EndpointIdentifier": "my-redis-target", "EndpointType": "TARGET", "EngineName": "redis", "EngineDisplayName": "Redis", "TransferFiles": false, "ReceiveTransferredFiles": false, "Status": "active", "KmsKeyId": "arn:aws:kms:us-east-1:999999999999:key/x-b188188x", "EndpointArn": "arn:aws:dms:us-east-1:555555555555:endpoint:ABCDEFGHIJKLMONOPQRSTUVWXYZ", "SslMode": "none", "RedisSettings": { "ServerName": "sample-test-sample.zz012zz.cluster.eee1.cache.bbbxxx.com", "Port": 6379, "SslSecurityProtocol": "ssl-encryption", "AuthType": "auth-token" } } }

--redis-settings 参数如下:

  • ServerName –(必填)类型为 string,指定数据将迁移到的 Redis 集群,并且位于同一 VPC 中。

  • Port –(必填)类型为 number,用于访问端点的端口值。

  • SslSecurityProtocol –(可选)有效值包括 plaintextssl-encryption。默认值为 ssl-encryption

    plaintext 选项不为端点和数据库之间的流量提供传输层安全性协议(TLS)加密。

    使用 ssl-encryption 建立加密连接。ssl-encryption 不需要 SSL 证书颁发机构 (CA) ARN 来验证服务器的证书,但可以选择使用 SslCaCertificateArn 设置进行识别。如果没有为证书颁发机构提供 ARN,则 DMS 将使用 Amazon 根 CA。

    使用本地 Redis 目标时,您可以使用 SslCaCertificateArn 将公共或私有证书颁发机构 (CA) 导入 DMS,并提供该 ARN 用于服务器身份验证。使用 ElastiCache for Redis 作为目标时,不支持私有 CA。

  • AuthType –(必填)连接到 Redis 目标时要执行的身份验证类型。有效值包括 noneauth-tokenauth-role

    auth-token 选项要求提供“AuthPassword”,而 auth-role 选项则要求提供“AuthUserName”和“AuthPassword”。