

# 管理 DAX 集群
<a name="DAX.cluster-management"></a>

本节介绍 Amazon DynamoDB Accelerator (DAX) 集群的一些常见管理任务。

**Topics**
+ [用于管理 DAX 集群的 IAM 权限](#DAX.cluster-management.iam-permissions)
+ [DAX 集群的扩缩](#DAX.cluster-management.scaling)
+ [自定义 DAX 集群设置](#DAX.cluster-management.custom-settings)
+ [配置 TTL 设置](#DAX.cluster-management.custom-settings.ttl)
+ [对 DAX 的标记支持](#DAX.management.tagging)
+ [AWS CloudTrail 集成](#DAX.management.cloudtrail)
+ [删除 DAX 集群](#DAX.cluster-management.deleting)

## 用于管理 DAX 集群的 IAM 权限
<a name="DAX.cluster-management.iam-permissions"></a>

在使用 AWS 管理控制台或 AWS Command Line Interface (AWS CLI) 管理 DAX 集群时，强烈建议缩小用户可执行的操作范围。这样可以帮助在遵循最低权限准则的同时降低风险。

以下讨论侧重于 DAX 管理 API 的访问控制。有关更多信息，请参阅《Amazon DynamoDB API 参考**中的 [Amazon DynamoDB Accelerator](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Operations_Amazon_DynamoDB_Accelerator_(DAX).html)。

**注意**  
有关管理 AWS Identity and Access Management (IAM) 权限的更多详细信息，请参见以下内容：  
IAM 和创建 DAX 集群：[创建 DAX 集群](DAX.create-cluster.md)。
IAM 和 DAX 数据层面操作：[DAX 访问控制](DAX.access-control.md)。

对于 DAX 管理 API，无法将 API 操作的范围限定为特定资源。`Resource` 元素必须设置为 `"*"`。这与 `GetItem`、`Query` 和 `Scan` 等 DAX 数据层面 API 操作不同。数据层面操作通过 DAX 客户端公开，此类操作的范围*可以*限定为特定资源。

为了说明这种情况，请考虑以下 IAM 策略文档。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Action": [
                "dax:*"
            ],
            "Effect": "Allow",
            "Resource": [
                "arn:aws:dax:us-west-2:123456789012:cache/DAXCluster01"
            ]
        }
    ]
}
```

------

假设此策略的目的是允许对集群 `DAXCluster01` 进行 DAX 管理 API 调用— 并且只有该集群。

现在假定用户发出以下 AWS CLI 命令。

```
aws dax describe-clusters
```

此命令失败，显示未授权异常，因为基础 `DescribeClusters` API 调用的范围不能限定为特定集群。即使策略在语法上有效，此命令也将失败，因为 `Resource` 元素必须设置为 `"*"`。但是，如果用户运行程序将 DAX 数据层面调用（如 `GetItem` 或 `Query`）发送到 `DAXCluster01`，则这些调用*会*成功。这是因为 DAX 数据层面 API 的范围可限定为特定资源（在本示例中为 `DAXCluster01`）。

如果要编写一个全面的 IAM 策略包含 DAX 管理 API 和 DAX 数据层面 API，建议在策略文档中包含两个不同的语句。一个语句用于 DAX 数据层面 API，另一个语句用于 DAX 管理 API。

下面示例策略说明此方法。注意将 `DAXDataAPIs` 语句的范围限定为 `DAXCluster01` 资源的方式，而 `DAXManagementAPIs` 的资源必须为 `"*"`。各个语句中显示的操作仅用于说明目的。可以根据需要自定义应用程序。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "DAXDataAPIs",
            "Action": [
                "dax:GetItem",
                "dax:BatchGetItem",
                "dax:Query",
                "dax:Scan",
                "dax:PutItem",
                "dax:UpdateItem",
                "dax:DeleteItem",
                "dax:BatchWriteItem"
            ],
            "Effect": "Allow",
            "Resource": [
                "arn:aws:dax:us-west-2:123456789012:cache/DAXCluster01"
            ]},
            {
            "Sid": "DAXManagementAPIs",
            "Action": [
                "dax:CreateParameterGroup",
                "dax:CreateSubnetGroup",
                "dax:DecreaseReplicationFactor",
                "dax:DeleteCluster",
                "dax:DeleteParameterGroup",
                "dax:DeleteSubnetGroup",
                "dax:DescribeClusters",
                "dax:DescribeDefaultParameters",
                "dax:DescribeEvents",
                "dax:DescribeParameterGroups",
                "dax:DescribeParameters",
                "dax:DescribeSubnetGroups",
                "dax:IncreaseReplicationFactor",
                "dax:ListTags",
                "dax:RebootNode",
                "dax:TagResource",
                "dax:UntagResource",
                "dax:UpdateCluster",
                "dax:UpdateParameterGroup",
                "dax:UpdateSubnetGroup"
                ],
            "Effect": "Allow",
            "Resource": [
                "*"
            ]
        }
    ]
}
```

------

## DAX 集群的扩缩
<a name="DAX.cluster-management.scaling"></a>

扩展 DAX 集群有两种方法。第一种是*水平扩展*，将只读副本添加到集群。第二种是*垂直扩展*，选择不同的节点类型。有关如何为应用程序选择合适集群大小和节点类型的建议，请参阅 [DAX 集群大小调整指南](DAX.sizing-guide.md)。

### 横向扩展
<a name="DAX.cluster-management.scaling.read-scaling"></a>

利用水平扩展，您可以将更多只读副本添加到集群，从而增加读取操作的吞吐量。一个 DAX 集群最多可支持 10 个只读副本，可以在集群运行时添加或删除副本。

添加新节点时，必须同步来自对等节点的缓存数据。因此，添加时间因缓存大小和应用程序工作负载而异。作为最佳实践，建议您预先扩展集群以满足预期的高峰流量需求。有关调整大小指南的信息和监控建议，请参阅[DAX 集群大小调整指南](DAX.sizing-guide.md)。

以下 AWS CLI 示例显示如何增加或减少节点数。`--new-replication-factor` 参数指定集群中的节点总数。其中一个节点是主节点，其他节点是只读副本。

```
aws dax increase-replication-factor \
    --cluster-name MyNewCluster  \
    --new-replication-factor 5
```

```
aws dax decrease-replication-factor \
    --cluster-name MyNewCluster  \
    --new-replication-factor 3
```

**注意**  
修改复制系数时，集群状态将更改为 `modifying`。修改完成后，状态将变为 `available`。

### 垂直扩缩
<a name="DAX.cluster-management.scaling.node-types"></a>

如果有大量工作数据，应用程序可能会受益于使用更大的节点类型。更大的节点可让集群在内存中存储更多数据，从而减少缓存未命中数和提高应用程序的整体性能。（一个 DAX 集群中的所有节点都必须是同一类型。）

如果 DAX 集群具有较高的写入操作速率或缓存未命中率，则应用程序也可能从使用更大的节点类型中受益。写入操作和缓存未命中将占用集群主节点的资源。因此，使用更大的节点类型可能会提高主节点的性能，以便能够为这些类型的操作提供更大的吞吐量。

无法修改正在运行的 DAX 集群中的节点类型。相反，必须使用所需的节点类型创建新集群。有关受支持的节点类型的列表，请参阅 [Nodes](DAX.concepts.cluster.md#DAX.concepts.nodes)。

可以 AWS 管理控制台、[CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dax-cluster.html)、AWS CLI 或 [AWS SDK](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Operations_Amazon_DynamoDB_Accelerator_(DAX).html) 创建新的 DAX 集群。（对于 AWS CLI，使用 `--node-type` 参数指定节点类型。）

## 自定义 DAX 集群设置
<a name="DAX.cluster-management.custom-settings"></a>

创建 DAX 集群时，请使用以下默认设置：
+ 启用自动缓存移出，将存活时间 (TTL) 设置为 5 分钟
+ 无可用区首选项
+ 无维护时段首选项
+ 已禁用通知

对于新集群，可以在创建时自定义设置。要在 AWS 管理控制台 执行此操作，请取消选择**使用默认设置**以修改以下设置：
+ **网络与安全性**—允许在当前 AWS 区域的不同可用区中运行各个 DAX 集群节点。如果选择**无首选项**，则这些节点将自动分配到各个可用区。
+ **参数组**—应用于集群中每个节点的一组指定参数。可以使用参数组指定缓存 TTL 行为。可以随时更改参数组（默认参数组 `default.dax.1.0` 除外）中的任何给定参数的值。
+ **维护时段**—每周的一个时间段，在此期间对集群节点应用软件升级和补丁。可以选择维护时段的开始日期、开始时间和持续时间。如果选择**无首选项**，则将从每个区域的 8 小时时间段中随机选择维护时段。有关更多信息，请参阅 [维护时段](DAX.concepts.cluster.md#DAX.concepts.maintenance-window)。

**注意**  
也可以在正在运行的集群上随时更改**参数组**和**维护时段**。

如果发生维护事件，DAX 可以使用 Amazon Simple Notification Service (Amazon SNS) 通知您。要配置通知，请从 **SNS 通知主题**选择器选择一个选项。可以创建一个新 Amazon SNS 主题，也可以使用现有主题。

有关设置和订阅 Amazon SNS 主题的更多信息，请参阅《Amazon Simple Notification Service 开发人员指南》**中的 [Amazon SNS 入门](https://docs.aws.amazon.com/sns/latest/dg/GettingStarted.html)。

## 配置 TTL 设置
<a name="DAX.cluster-management.custom-settings.ttl"></a>

DAX 为从 DynamoDB 读取的数据维护两种缓存：
+ **项目缓存**—针对使用 `GetItem` 或 `BatchGetItem` 检索到的项目。
+ **查询缓存**—针对使用 `Query` 或 `Scan` 检索到的结果集。

有关更多信息，请参阅 [项目缓存](DAX.concepts.md#DAX.concepts.item-cache) 和 [查询缓存](DAX.concepts.md#DAX.concepts.query-cache)。

所有这些缓存的默认 TTL 均为 5 分钟。如果要使用不同 TTL 设置，可以使用自定义参数组启动 DAX 集群。要在控制台中执行此操作，请在导航窗格中选择 **DAX \$1 参数组**。

还可以使用 AWS CLI 执行这些任务。下面的示例显示如何使用自定义参数组启动新 DAX 集群。在此示例中，项目缓存 TTL 设置为 10 分钟，查询缓存 TTL 设置为 3 分钟。

1. 创建新参数组。

   ```
   aws dax create-parameter-group \
       --parameter-group-name custom-ttl
   ```

1. 将项目缓存 TTL 设置为 10 分钟（600000 毫秒）。

   ```
   aws dax update-parameter-group \
       --parameter-group-name custom-ttl \
       --parameter-name-values "ParameterName=record-ttl-millis,ParameterValue=600000"
   ```

1. 将查询缓存 TTL 设置为 3 分钟（180000 毫秒）。

   ```
   aws dax update-parameter-group \
       --parameter-group-name custom-ttl \
       --parameter-name-values "ParameterName=query-ttl-millis,ParameterValue=180000"
   ```

1. 确认已正确设置参数。

   ```
   aws dax describe-parameters --parameter-group-name custom-ttl \
       --query "Parameters[*].[ParameterName,Description,ParameterValue]"
   ```

现在可以使用此参数组启动新 DAX 集群。

```
aws dax create-cluster \
    --cluster-name MyNewCluster \
    --node-type dax.r3.large \
    --replication-factor 3 \
    --iam-role-arn arn:aws:iam::123456789012:role/DAXServiceRole \
    --parameter-group custom-ttl
```

**注意**  
您无法修改附加到正在运行的 DAX 集群的参数组。参数更改仅应用到修改后写入的项目。现有的缓存项目保留最初写入时的 TTL 和设置。

## 对 DAX 的标记支持
<a name="DAX.management.tagging"></a>

许多 AWS 服务（包括 DynamoDB）都支持*标记*—使用用户定义的名称标记资源的功能。可以将标签分配给 DAX 集群，这样可以快速识别所有具有相同标签的 AWS 资源，或按照分配的标签分类 AWS 账单。

有关更多信息，请参阅 [在 DynamoDB 中向资源添加标记和标签](Tagging.md)。

### 使用 AWS 管理控制台
<a name="DAX.management.tagging.console"></a>

**管理 DAX 集群标签**

1. 打开 DynamoDB 控制台：[https://console.aws.amazon.com/dynamodb/](https://console.aws.amazon.com/dynamodb/)。

1. 在导航窗格中的 **DAX** 下，选择 **Clusters (集群)**。

1. 选择要使用的集群。

1. 选择**标签**选项卡。可以在此处添加、列出、编辑或删除标签。

   根据需要设置完毕后，选择**应用更改**。

### 使用 AWS CLI
<a name="DAX.management.tagging.cli"></a>

使用 AWS CLI 管理 DAX 集群标签时，必须先确定集群的 Amazon Resource Name (ARN)。下面的示例说明如何确定名为 `MyDAXCluster` 的集群的 ARN。

```
aws dax describe-clusters \
    --cluster-name MyDAXCluster \
    --query "Clusters[*].ClusterArn"
```

在输出中，ARN 与以下内容类似：`arn:aws:dax:us-west-2:123456789012:cache/MyDAXCluster`

下面的示例说明如何为集群添加标签。

```
aws dax tag-resource  \
    --resource-name arn:aws:dax:us-west-2:123456789012:cache/MyDAXCluster \
    --tags="Key=ClusterUsage,Value=prod"
```

列出集群的所有标签。

```
aws dax list-tags \
    --resource-name arn:aws:dax:us-west-2:123456789012:cache/MyDAXCluster
```

要删除标签，请指定标签键。

```
aws dax untag-resource  \
    --resource-name arn:aws:dax:us-west-2:123456789012:cache/MyDAXCluster \
    --tag-keys ClusterUsage
```

## AWS CloudTrail 集成
<a name="DAX.management.cloudtrail"></a>

DAX 集成 AWS CloudTrail，用于审计 DAX 集群活动。可以使用 CloudTrail 日志查看已在集群级进行的所有更改。还可以查看对集群组件进行的更改，例如节点、子网组和参数组。有关更多信息，请参阅 [使用 AWS CloudTrail 记录 DynamoDB 操作日志](logging-using-cloudtrail.md)。

## 删除 DAX 集群
<a name="DAX.cluster-management.deleting"></a>

如果不再使用某个 DAX 集群，则应删除它以避免为未使用的资源付费。

可以使用控制台或 AWS CLI 删除 DAX 集群。示例如下：

```
aws dax delete-cluster --cluster-name mydaxcluster
```