

# DAX 集群组件
<a name="DAX.concepts.cluster"></a>

Amazon DynamoDB Accelerator (DAX) 集群由多个 Amazon 基础设施组件组成。本节介绍这些组件及其协作方式。

**Topics**
+ [Nodes](#DAX.concepts.nodes)
+ [集群](#DAX.concepts.clusters)
+ [区域和可用区](#DAX.concepts.regions-and-azs)
+ [参数组](#DAX.concepts.parameter-groups)
+ [安全组](#DAX.concepts.security-groups)
+ [集群 ARN](#DAX.concepts.cluster-arn)
+ [集群端点](#DAX.concepts.cluster-endpoint)
+ [节点端点](#DAX.concepts.node-endpoints)
+ [子网组](#DAX.concepts.cluster.security)
+ [事件](#DAX.concepts.events)
+ [维护时段](#DAX.concepts.maintenance-window)

## Nodes
<a name="DAX.concepts.nodes"></a>

*节点*是 DAX 集群的最小构建块。每个节点运行一个 DAX 软件实例，并维护一个缓存数据副本。

可以采用以下两种方法扩展 DAX 集群：
+ 将更多节点添加到集群。这会增加集群中的总体读取吞吐量。
+ 使用更大的节点类型。更大的节点类型可提供更多容量并增加吞吐量。（必须使用新节点类型创建新集群。） 

一个集群的所有节点都具有相同的节点类型并运行相同 DAX 缓存软件。有关可用节点类型的列表，请参见 [Amazon DynamoDB 定价](https://www.amazonaws.cn/dynamodb/pricing)。

## 集群
<a name="DAX.concepts.clusters"></a>

*集群*是 DAX 将其作为一个单元来管理的一个或多个节点的逻辑分组。集群的其中一个节点指定为*主*节点，其他节点（如果有）指定为*只读副本*。

主节点负责完成以下工作：
+ 满足缓存数据的应用程序请求。
+ 处理对 DynamoDB 的写入操作。
+ 根据集群的移出策略，从缓存中移出数据。

更改主节点上的缓存数据后，DAX 使用复制日志将这些更改传播到所有只读副本节点。在收到所有只读副本的确认后，DynamoDB 会从主节点中删除复制日志。

一个 DAX 集群最多可支持每集群 11 个节点（主节点以及最多 10 个只读副本）。

只读副本负责完成以下工作：
+ 满足缓存数据的应用程序请求。
+ 根据集群的移出策略，从缓存中移出数据。

但与主节点不同，只读副本不会对 DynamoDB 进行写入。

只读副本有另外两种用途：
+ **可扩展性**。如果有大量需要同时访问 DAX 的客户端，可以添加多个副本用于读取扩展。DAX 在集群中所有节点均匀分布负载。（另一种增加吞吐量的方式是使用更大的缓存节点类型。）
+ **高可用性**。如果发生主节点故障，DAX 将自动故障转移到一个只读副本并指定该副本作为新的主节点。如果副本节点发生故障，DAX 集群的其他节点仍能够处理请求，直到发生故障的节点恢复为止。为实现最大容错能力，应在单独的可用区中部署只读副本。此配置将确保您的 DAX 集群可以继续正常运行，即使整个可用区变得不可用。

**重要**  
对于生产使用，我们强烈建议使用具有至少三个节点的 DAX，其中每个节点都放置在不同的可用区中。DAX 集群需要三个节点才能容错。  
DAX 集群可以部署在一个或两个节点上，用于开发或测试工作负载。单节点和双节点集群不具有容错能力，我们不建议对生产使用少于三个节点。如果单节点或双节点集群遇到软件或硬件错误，则集群会变得不可用或丢失缓存的数据。

**重要**  
一个 DAX 集群最多支持 500 个 DynamoDB 表。如果表数量超过 500 个，则集群的可用性和性能可能会降低。

## 区域和可用区
<a name="DAX.concepts.regions-and-azs"></a>

一个 Amazon 区域的一个 DAX 集群只能与位于同一区域的 DynamoDB 表进行交互。因此，需要确保在正确的区域中启动 DAX 集群。如果其他区域有 DynamoDB 表，则必须在这些区域也启动 DAX 集群。

从设计而言，每个区域都与其他区域完全隔离。每个区域内有多个可用区。在不同的可用区内启动节点，可以实现可能的最大容错。

**重要**  
请勿将集群的所有节点放置在单个可用区内。在此配置下，如果可用区发生故障，DAX 集群将变得不可用。  
对于生产使用，我们强烈建议使用具有至少三个节点的 DAX，其中每个节点都放置在不同的可用区中。DAX 集群需要三个节点才能容错。  
DAX 集群可以部署在一个或两个节点上，用于开发或测试工作负载。单节点和双节点集群不具有容错能力，我们不建议对生产使用少于三个节点。如果单节点或双节点集群遇到软件或硬件错误，则集群会变得不可用或丢失缓存数据。

## 参数组
<a name="DAX.concepts.parameter-groups"></a>

*参数组*用于管理 DAX 集群的运行时设置。DAX 具有可用于优化性能（如为缓存数据定义 TTL 策略）的多个参数。参数组是一组可以应用于集群的指定参数。这样可以确保该集群中的所有节点都以完全相同的方式进行配置。

## 安全组
<a name="DAX.concepts.security-groups"></a>

DAX 集群在 Amazon Virtual Private Cloud (Amazon VPC) 环境中运行。此环境是一个专用于 Amazon 账户的虚拟网络，并且与其他 VPC 分隔开。*安全组*充当 VPC 的虚拟防火墙，控制入站和出站网络流量。

在 VPC 中启动集群时，将向安全组添加*入口*规则以允许传入网络流量。入口规则为集群指定协议 (TCP) 和端口号 (8111)。将此规则添加到安全组后，在 VPC 中运行的应用程序可以访问 DAX 集群。

## 集群 ARN
<a name="DAX.concepts.cluster-arn"></a>

将为每个 DAX 集群分配一个 *Amazon Resource Name* (ARN)。ARN 格式如下所示。

```
arn:aws:dax:region:accountID:cache/clusterName
```

在 IAM 策略中使用集群 ARN 定义 DAX API 操作的权限。有关更多信息，请参阅 [DAX 访问控制](DAX.access-control.md)。

## 集群端点
<a name="DAX.concepts.cluster-endpoint"></a>

每个 DAX 集群提供一个*集群端点*供应用程序使用。使用集群端点访问集群，应用程序无需知道集群中各个节点的主机名和端口号。您的应用程序将自动“获知”集群中的所有节点，即使您添加或删除只读副本也是如此。

以下是 us-east-1 区域中未配置为在传输过程中使用加密的集群端点示例。

`dax://my-cluster.l6fzcv.dax-clusters.us-east-1.amazonaws.com`

以下是同一区域中配置为在传输过程中使用加密的集群端点示例。

`daxs://my-encrypted-cluster.l6fzcv.dax-clusters.us-east-1.amazonaws.com`

## 节点端点
<a name="DAX.concepts.node-endpoints"></a>

DAX 集群中的每个节点均有自己的主机名和路径点号。以下是*节点端点*的示例。

`myDAXcluster-a.2cmrwl.clustercfg.dax.use1.cache.amazonaws.com:8111 `

应用程序可以使用端点直接访问节点。不过，建议您将 DAX 集群视为一个单元，通过集群端点访问。集群端点使应用程序无需维护节点列表，在集群中添加或删除节点时保持列表最新。

## 子网组
<a name="DAX.concepts.cluster.security"></a>

对 DAX 集群节点的访问限制为在 Amazon VPC 环境内的 Amazon EC2 实例上运行的应用程序。可以使用*子网组*授予从在特定子网上运行的 Amazon EC2 实例进行集群访问的权限。子网组是您可为在 Amazon VPC 环境中运行的集群指定的子网（通常为私有子网）集合。

创建 DAX 集群时，必须指定一个子网组。DAX 使用该子网组选择与节点关联的子网和子网中的 IP 地址。

## 事件
<a name="DAX.concepts.events"></a>

DAX 记录集群内的重大事件，如添加节点失败、添加节点成功或更改安全组。通过监控关键事件，可以了解集群的当前状态，并且能够根据事件采取相应的纠正措施。可以使用 DAX 管理 API 的 Amazon Web Services 管理控制台 或 `DescribeEvents` 操作访问这些事件。

也可以请求将通知发送到特定 Amazon Simple Notification Service (Amazon SNS) 主题。DAX 集群发生事件时将立即收到通知。

## 维护时段
<a name="DAX.concepts.maintenance-window"></a>

每个集群都有一个每周维护时段，在此期间会应用任何系统更改。按顺序应用更改时，会替换现有节点，并将具有已应用更改的新节点添加到集群中。在此期间，您的应用程序可能会出现瞬时错误或节流。因此，建议您将维护时段安排在使用率最低的时间内，并根据需要定期调整此时间表。您可以指定多达 24 小时持续时间的时间范围，您请求的任何维护活动均应在此期间进行。

如果创建或修改缓存集群时未指定首选维护时段，DAX 将在随机选择的某个工作日分配 60 分钟的维护时段。此 60 分钟的维护时段是从每个 Amazon Web Services 区域的 8 小时时间段中随机选择出来的。下表列出分配了默认维护窗口的各个地区的时间段。


****  

| 区域代码 |  区域名称 | 维护时段 | 
| --- | --- | --- | 
|  ap-northeast-1  |  亚太（东京）区域  |  13:00–21:00 UTC  | 
|  ap-southeast-1  |  亚太（新加坡）区域  |  14:00–22:00 UTC  | 
|  ap-southeast-2  |  亚太（悉尼）区域  |  12:00–20:00 UTC  | 
|  ap-south-1  |  亚太（孟买）区域  |  17:30–1:30 UTC  | 
|  cn-northwest-1  |  中国（宁夏）区域  |  23:00–07:00 UTC  | 
|  cn-north-1  |  中国（北京）区域  |  14:00–22:00 UTC | 
|  eu-central-1  |  欧洲地区（法兰克福）区域  |  23:00–07:00 UTC  | 
|  eu-north-1  |  欧洲地区（斯德哥尔摩）区域  |  01:00–09:00 UTC  | 
|  eu-south-2  |  欧洲地区（西班牙）区域  |  21:00–05:00 UTC  | 
|  eu-west-1  |  欧洲（爱尔兰）区域  |  22:00–06:00 UTC  | 
|  eu-west-2  |  欧洲地区（伦敦）区域  |  23:00–07:00 UTC  | 
|  eu-west-3  |  欧洲地区（巴黎）区域  |  23:00–07:00 UTC  | 
|  sa-east-1  |  南美洲（圣保罗）区域  |  01:00–09:00 UTC  | 
|  us-east-1  |  美国东部（弗吉尼亚北部）区域  |  03:00–11:00 UTC  | 
|  us-east-2 |  美国东部（俄亥俄州）区域  |  23:00–07:00 UTC  | 
|  us-west-1  |  美国西部（加利福尼亚北部）区域  |  06:00–14:00 UTC  | 
|  us-west-2  |  美国西部（俄勒冈）区域  |  06:00–14:00 UTC  | 