

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

# 使用 Redis OSS 作为目标 AWS Database Migration Service
<a name="CHAP_Target.Redis"></a>

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

使用 AWS DMS，您可以将数据从任何支持的源数据库迁移到目标 Redis OSS 数据存储，最大限度地减少停机时间。有关 Redis OSS 的更多信息，请参阅 [Redis OSS 文档](https://redis.io/documentation)。

除了本地 Redis OSS 之外，还 AWS Database Migration Service 支持以下内容：
+ [亚马逊 ElastiCache （Redis OSS）](https://aws.amazon.com/elasticache/redis/)作为目标数据存储。 ElastiCache (Redis OSS) 可与你的 Redis OSS 客户端配合使用，并使用开放的 Redis OSS 数据格式来存储你的数据。
+ [Amazon MemoryDB](https://aws.amazon.com/memorydb/) 作为目标数据存储。MemoryDB 与 Redis OSS 兼容，使您能够使用当今使用的所有 Redis OSS 数据结构和命令来构建应用程序。 APIs

有关使用 Redis OSS 作为目标的更多信息 AWS DMS，请参阅以下各节：

**Topics**
+ [使用 Redis OSS 集群作为目标的先决条件 AWS DMS](#CHAP_Target.Redis.Prerequisites)
+ [使用 Redis 作为目标时的限制 AWS Database Migration Service](#CHAP_Target.Redis.Limitations)
+ [将数据从关系或非关系数据库迁移到 Redis OSS 目标](#CHAP_Target.Redis.Migrating)
+ [指定 Redis OSS 作为目标时的端点设置](#CHAP_Target.Redis.EndpointSettings)

## 使用 Redis OSS 集群作为目标的先决条件 AWS DMS
<a name="CHAP_Target.Redis.Prerequisites"></a>

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

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

**注意**  
如果您使用 ElastiCache (Redis OSS) 作为目标，DMS 仅支持*启用集群模式*的配置。有关使用 ElastiCache (Redis OSS) 6.x 或更高版本创建启用集群模式的目标数据存储的更多信息，请参阅*亚马逊 ElastiCache (Redis OSS) 用户*指南中的[入门](https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/GettingStarted.html)。

在开始数据库迁移之前，请使用以下条件启动 Redis OSS 集群。
+ 集群拥有一个或多个分片。
+ 如果您使用的是 ElastiCache (Redis OSS) 目标，请确保您的集群不使用基于 IAM 角色的访问控制。而是使用 Redis OSS Auth 对用户进行身份验证。
+ 启用多可用区。
+ 确保集群具有足够的可用内存以容纳要从数据库迁移的数据。
+ 在开始初始迁移任务之前，请确保您的目标 Redis OSS 集群中已清除所有数据。

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

## 使用 Redis 作为目标时的限制 AWS Database Migration Service
<a name="CHAP_Target.Redis.Limitations"></a>

将 Redis OSS 作为目标时存在以下限制：
+ 由于 Redis OSS 是键值 no-sql 数据存储，因此当您的源是关系数据库时，使用的 Redis OSS 键命名约定是 `schema-name.table-name.primary-key`。
+ 在 Redis OSS 中，键值不能包含特殊字符 `%`。否则，DMS 会跳过记录。
+ DMS 不会迁移包含 `%` 字符的行。
+ DMS 不会迁移字段名称中包含 `%` 字符的字段。
+ 不支持完整 LOB 模式。
+  使用 (Redis OSS) 作为目标时，不支持私有证书颁发机构 ElastiCache (CA)。
+ AWS DMS 使用 Redis 作为目标端点时，不支持包含嵌入式`'\0'`字符的源数据。包含嵌入`'\0'`字符的数据将在第一个`'\0'`字符处被截断。

## 将数据从关系或非关系数据库迁移到 Redis OSS 目标
<a name="CHAP_Target.Redis.Migrating"></a>

您可以将数据从任何源 SQL 或 NoSQL 数据存储直接迁移到 Redis OSS 目标。设置和开始到 Redis OSS 目标的迁移类似于使用 DMS 控制台或 API 进行的任何完全加载和更改数据捕获迁移。要将数据库迁移到 Redis OSS 目标，请执行以下操作。
+ 创建复制实例以执行迁移的所有过程。有关更多信息，请参阅 [创建复制实例](CHAP_ReplicationInstance.Creating.md)。
+ 指定源端点。有关更多信息，请参阅 [创建源和目标终端节点](CHAP_Endpoints.Creating.md)。
+ 找到集群的 DNS 名称和端口号。
+ 下载可用来验证 SSL 连接的证书捆绑包。
+ 指定目标端点，如下所述。
+ 创建一个任务或一组任务来定义要使用的表和复制过程。有关更多信息，请参阅 [创建任务](CHAP_Tasks.Creating.md)。
+ 将数据从源数据库迁移到目标集群。

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

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

1. 你可以使用 AWS Command Line Interface (AWS CLI)。有关将 CLI 与配合使用的更多信息 AWS DMS，[AWS CLI 请参](https://docs.aws.amazon.com/cli/latest/reference/dms/index.html)阅 AWS DMS。

**找到集群的 DNS 名称和端口号**
+ 使用以下 AWS 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 作为目标，请使用以下 AWS CLI 命令为您的 Redis OSS 集群提供端点地址。

  ```
  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`填写您 AWS 所在地区访问指定的 S3 存储桶及其提供的 rds-combined-ca-bundle .pem 文件所需的 Amazon S3 域。

**使用 AWS DMS 控制台创建目标终端节点**

此端点适用于已经在运行的 Redis OSS 目标。
+ 在控制台的导航窗格中，选择**端点**，然后选择**创建端点**。下表描述了设置。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/dms/latest/userguide/CHAP_Target.Redis.html)

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

有关创建迁移任务和开始数据库迁移的信息，请参阅[创建任务](CHAP_Tasks.Creating.md)。

## 指定 Redis OSS 作为目标时的端点设置
<a name="CHAP_Target.Redis.EndpointSettings"></a>

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

对于控制台中的 Redis OSS 目标，请在**创建终端节点或**修改**终端节点 AWS DMS 控制台页面上指定终端节点****特定的设置**。

使用 `CreateEndpoint` 和 `ModifyEndpoint` API 操作时，请为 `RedisSettings` 选项指定请求参数。以下示例说明如何使用 AWS 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 OSS 集群，并且位于同一 VPC 中。
+ `Port` –（必填）类型为 `number`，用于访问端点的端口值。
+ `SslSecurityProtocol` –（可选）有效值包括 `plaintext` 和 `ssl-encryption`。默认值为 `ssl-encryption`。

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

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

  使用本地 Redis OSS 目标时，您可以使用 `SslCaCertificateArn` 将公有或私有证书颁发机构（CA）导入 DMS，并提供该 ARN 用于服务器身份验证。使用 ElastiCache (Redis OSS) 作为目标时，不支持私有 CA。
+ `AuthType` –（必填）指示连接到 Redis OSS 时要执行的身份验证类型。有效值包括 `none`、`auth-token` 和 `auth-role`。

  该`auth-token`选项需要提供 “*AuthPassword*”，而该`auth-role`选项则要求提供 *AuthUserName* “*AuthPassword*” 和 “”。