管理 DAX 集群
本节介绍 Amazon DynamoDB Accelerator (DAX) 集群的一些常见管理任务。
用于管理 DAX 集群的 IAM 权限
在使用 AWS Management Console或 AWS Command Line Interface (AWS CLI) 管理 DAX 集群时,强烈建议缩小用户可执行的操作范围。这样可以帮助在遵循最低权限准则的同时降低风险。
以下讨论侧重于 DAX 管理 API 的访问控制。有关更多信息,请参阅《Amazon DynamoDB API 参考》中的 Amazon DynamoDB Accelerator。
注意
对于 DAX 管理 API,无法将 API 操作的范围限定为特定资源。Resource
元素必须设置为 "*"
。这与 GetItem
、Query
和 Scan
等 DAX 数据层面 API 操作不同。数据层面操作通过 DAX 客户端公开,此类操作的范围可以限定为特定资源。
为了说明这种情况,请考虑以下 IAM 策略文档。
{ "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
的资源必须为 "*"
。各个语句中显示的操作仅用于说明目的。可以根据需要自定义应用程序。
{ "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 集群的扩缩
扩展 DAX 集群有两种方法。第一种是水平扩展,将只读副本添加到集群。第二种是垂直扩展,选择不同的节点类型。有关如何为应用程序选择合适集群大小和节点类型的建议,请参阅 DAX 集群大小调整指南。
横向扩展
利用水平扩展,您可以将更多只读副本添加到集群,从而增加读取操作的吞吐量。一个 DAX 集群最多可支持 10 个只读副本,可以在集群运行时添加或删除副本。
添加新节点时,必须同步来自对等节点的缓存数据。因此,添加时间因缓存大小和应用程序工作负载而异。作为最佳实践,建议您预先扩展集群以满足预期的高峰流量需求。有关调整大小指南的信息和监控建议,请参阅DAX 集群大小调整指南。
以下 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
。
垂直扩缩
如果有大量工作数据,应用程序可能会受益于使用更大的节点类型。更大的节点可让集群在内存中存储更多数据,从而减少缓存未命中数和提高应用程序的整体性能。(一个 DAX 集群中的所有节点都必须是同一类型。)
如果 DAX 集群具有较高的写入操作速率或缓存未命中率,则应用程序也可能从使用更大的节点类型中受益。写入操作和缓存未命中将占用集群主节点的资源。因此,使用更大的节点类型可能会提高主节点的性能,以便能够为这些类型的操作提供更大的吞吐量。
无法修改正在运行的 DAX 集群中的节点类型。相反,必须使用所需的节点类型创建新集群。有关受支持的节点类型的列表,请参阅 Nodes。
可以 AWS Management Console、AWS CloudFormation、AWS CLI 或 AWS SDK 创建新的 DAX 集群。(对于 AWS CLI,使用 --node-type
参数指定节点类型。)
自定义 DAX 集群设置
创建 DAX 集群时,请使用以下默认设置:
-
启用自动缓存移出,将存活时间 (TTL) 设置为 5 分钟
-
无可用区首选项
-
无维护时段首选项
-
已禁用通知
对于新集群,可以在创建时自定义设置。要在 AWS Management Console 执行此操作,请取消选择使用默认设置以修改以下设置:
-
网络与安全性—允许在当前 AWS 区域的不同可用区中运行各个 DAX 集群节点。如果选择无首选项,则这些节点将自动分配到各个可用区。
-
参数组—应用于集群中每个节点的一组指定参数。可以使用参数组指定缓存 TTL 行为。可以随时更改参数组(默认参数组
default.dax.1.0
除外)中的任何给定参数的值。 -
维护时段—每周的一个时间段,在此期间对集群节点应用软件升级和补丁。可以选择维护时段的开始日期、开始时间和持续时间。如果选择无首选项,则将从每个区域的 8 小时时间段中随机选择维护时段。有关更多信息,请参阅 维护时段。
注意
也可以在正在运行的集群上随时更改参数组和维护时段。
如果发生维护事件,DAX 可以使用 Amazon Simple Notification Service (Amazon SNS) 通知您。要配置通知,请从 SNS 通知主题选择器选择一个选项。可以创建一个新 Amazon SNS 主题,也可以使用现有主题。
有关设置和订阅 Amazon SNS 主题的更多信息,请参阅《Amazon Simple Notification Service 开发人员指南》中的 Amazon SNS 入门。
配置 TTL 设置
DAX 为从 DynamoDB 读取的数据维护两种缓存:
-
项目缓存—针对使用
GetItem
或BatchGetItem
检索到的项目。 -
查询缓存—针对使用
Query
或Scan
检索到的结果集。
所有这些缓存的默认 TTL 均为 5 分钟。如果要使用不同 TTL 设置,可以使用自定义参数组启动 DAX 集群。要在控制台中执行此操作,请在导航窗格中选择 DAX | 参数组。
还可以使用 AWS CLI 执行这些任务。下面的示例显示如何使用自定义参数组启动新 DAX 集群。在此示例中,项目缓存 TTL 设置为 10 分钟,查询缓存 TTL 设置为 3 分钟。
-
创建新参数组。
aws dax create-parameter-group \ --parameter-group-name custom-ttl
-
将项目缓存 TTL 设置为 10 分钟(600000 毫秒)。
aws dax update-parameter-group \ --parameter-group-name custom-ttl \ --parameter-name-values "ParameterName=record-ttl-millis,ParameterValue=600000"
-
将查询缓存 TTL 设置为 3 分钟(180000 毫秒)。
aws dax update-parameter-group \ --parameter-group-name custom-ttl \ --parameter-name-values "ParameterName=query-ttl-millis,ParameterValue=180000"
-
确认已正确设置参数。
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 实例使用的参数组。
对 DAX 的标记支持
许多 AWS 服务(包括 DynamoDB)都支持标记—使用用户定义的名称标记资源的功能。可以将标签分配给 DAX 集群,这样可以快速识别所有具有相同标签的 AWS 资源,或按照分配的标签分类 AWS 账单。
有关更多信息,请参阅 在 DynamoDB 中向资源添加标记和标签。
使用 AWS Management Console
管理 DAX 集群标签
打开 DynamoDB 控制台:https://console.aws.amazon.com/dynamodb/
。 -
在导航窗格中的 DAX 下,选择 Clusters (集群)。
-
选择要使用的集群。
-
选择标签选项卡。可以在此处添加、列出、编辑或删除标签。
根据需要设置完毕后,选择应用更改。
使用 AWS CLI
使用 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 集成
DAX 集成 AWS CloudTrail,用于审计 DAX 集群活动。可以使用 CloudTrail 日志查看已在集群级进行的所有更改。还可以查看对集群组件进行的更改,例如节点、子网组和参数组。有关更多信息,请参阅 使用 AWS CloudTrail 记录 DynamoDB 操作日志。
删除 DAX 集群
如果不再使用某个 DAX 集群,则应删除它以避免为未使用的资源付费。
可以使用控制台或 AWS CLI 删除 DAX 集群。示例如下:
aws dax delete-cluster --cluster-name mydaxcluster