以编程方式管理 Amazon Keyspaces 扩展策略 - Amazon Keyspaces (for Apache Cassandra)
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

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

以编程方式管理 Amazon Keyspaces 扩展策略

要以编程方式更新和管理 Amazon Keyspaces 自动扩展设置,可以使用Amazon Command Line Interface(Amazon CLI) 或者AmazonAPI。无法使用 Cassandra 查询语言 (CQL) 管理 Amazon Keyspaces 扩展策略。本主题概述了您可以使用 Amazon CLI 通过编程方式管理的自动扩展任务。

有关 Application Auto Scaling 的更多信息Amazon CLI本主题中介绍的命令,请参阅Application Auto Scaling中的Amazon CLI命令参考. 有关使用的更多信息AmazonAPI,请参阅Application Auto Scaling API 参考.

开始前的准备工作

在开始之前,您需要完成以下任务。

配置权限

如果未完成这些任务,您必须为用户配置相应的权限,以创建和管理自动扩展设置。InAmazon Identity and Access Management(IAM),Amazon管理的策略AmazonKeyspacesFullAccess是管理亚马逊 Keyspaces 扩展策略所必需的。有关详细步骤,请参阅开始前的准备工作:授予用户对 Amazon Keyspaces 自动扩展的权限

安装 Amazon CLI

如果您尚未安装和配置 Amazon CLI,则必须先执行此操作。要执行此操作,请转至Amazon Command Line Interface用户指南并按照以下说明操作:

对现有表启用自动扩展功能:注册可扩展目标

对于现有的 Amazon Keyspaces 表,您可以将表的写入或读取容量注册为使 Application Auto Scaling 的可扩展目标。这样可允许 Application Auto Scaling 调整您指定的表的预置写入或读取容量。在以下示例中,我们注册mytable作为具有写入容量的可扩展目标,容量范围为 5—10 个容量单位。

注意

Amazon Keyspaces 的自动扩展需要存在服务相关角色 (AWSServiceRoleForApplicationAutoScaling_CassandraTable) 它代表您执行自动扩展操作。将自动为您创建此角色。有关更多信息,请参阅 对 Amazon Keyspaces 使用服务相关角色

输入以下命令,将表注册为可扩展目标。

aws application-autoscaling register-scalable-target \ --service-namespace cassandra \ --resource-id "keyspace/mykeyspace/table/mytable" \ --scalable-dimension "cassandra:table:WriteCapacityUnits" \ --min-capacity 5 \ --max-capacity 10

查看向 Application Auto Scaling 注册的可扩展

要查看注册详细信息,请使用以下命令。

aws application-autoscaling describe-scalable-targets --service-namespace cassandra --resource-ids "keyspace/mykeyspace/table/mytable"

该命令的输出如下所示。

{ "ScalableTargets": [ { "ServiceNamespace": "cassandra", "ResourceId": "keyspace/mykeyspace/table/mytable", "ScalableDimension": "cassandra:table:WriteCapacityUnits", "MinCapacity": 5, "MaxCapacity": 10, "RoleARN": "arn:aws:iam::012345678910:role/aws-service-role/cassandra.application-autoscaling.amazonaws.com/AWSServiceRoleForApplicationAutoScaling_CassandraTable", "CreationTime": 1587495787.412, "SuspendedState": { "DynamicScalingInSuspended": false, "DynamicScalingOutSuspended": false, "ScheduledScalingSuspended": false } } ] }

查看向 Application Auto Scaling 注册的可扩展

要查看注册详细信息,请使用以下命令。

aws application-autoscaling describe-scalable-targets \ --service-namespace cassandra \ --resource-id "keyspace\mytable"

创建扩展策略

要通过编程方式管理自动扩展设置,请为表创建扩展策略。该策略定义指示 Application Auto Scaling 调整表的预置吞吐量的条件,以及它在执行此操作时需要采取的措施。在此示例中,您将此策略与您以前定义的可扩展目标(mytable 表的写入容量单位)相关联。

该策略包含以下元素:

  • PredefinedMetricSpecification— 允许 Application Auto Scaling 调整的指标。对于亚马逊 Keyspaces,以下值是的有效值PredefinedMetricType

    • CassandraReadCapacityUtilization

    • CassandraWriteCapacityUtilization

  • ScaleOutCooldown— 横向扩展活动会增加您的表的预置吞吐量。要为横向扩展活动增加冷却时间,请为 ScaleOutCooldown 指定一个值(以秒为单位)。默认值是 0。有关更多信息,请参阅 。Application Auto Scaling 用户指南中的目标跟踪扩展策略.

  • ScaleInCooldown— 扩展活动会减小您的表的预置吞吐量。要为缩减活动增加冷却时间,请为 ScaleInCooldown 指定一个值(以秒为单位)。默认值是 0。有关更多信息,请参阅 。Application Auto Scaling 用户指南中的目标跟踪扩展策略.

  • TargetValue— Application Auto Scaling 可确保消耗的容量与预置容量的比例保持在该值或接近该值。您将 TargetValue 定义为百分比。

注意

为了进一步了解 TargetValue 的工作原理,假设您的表的预配置吞吐量设置为 200 个写入容量单位。您决定为此表创建扩展策略,并使用 TargetValue 的 70%。

现在假设您开始将写入流量驱动到表,以便实际写入吞吐量为 150 个容量单位。这些区域有:consumed-to-provisioned现在的比例为 (150/ 200),即 75%。此比率超出了您的目标值,因此 Application Auto Scaling 会将预置写入容量增加到 215,使该比率为 (150/215) 或 69.77% — 尽可能接近 TargetValue,但不超过。

适用于mytable,你设置TargetValue至百分之 50。Application Auto Scaling 将在 5—10 个容量单位的范围内调整表的预置吞吐量(请参阅)对现有表启用自动扩展功能:注册可扩展目标) 以便consumed-to-provisioned比率保持在或接近 50%。您可以将 ScaleOutCooldownScaleInCooldown 值设置为 60 秒。

  1. 创建一个文件,在其中包含要应用于表的策略,如以下示例所示。然后,在本示例中,使用名称 scaling-policy.json 保存文件。

    { "PredefinedMetricSpecification": { "PredefinedMetricType": "CassandraWriteCapacityUtilization" }, "ScaleOutCooldown": 60, "ScaleInCooldown": 60, "TargetValue": 50.0 }
  2. 使用以下 Amazon CLI 命令创建策略:

    aws application-autoscaling put-scaling-policy \ --service-namespace cassandra \ --resource-id "keyspace/mykeyspace/table/mytable" \ --scalable-dimension "cassandra:table:WriteCapacityUnits" \ --policy-name "MyScalingPolicy" \ --policy-type "TargetTrackingScaling" \ --target-tracking-scaling-policy-configuration file://scaling-policy.json

在此命令的输出中,您可以看到CloudWatchApplication Auto Scaling 创建的警报,分别针对消耗的上限和下限,分别针对扩展目标范围的上限和下限。

{ "PolicyARN": "arn:aws:autoscaling:us-west-2:012345678910:scalingPolicy:8d606c33-2078-4f37-8305-36e89c56a779:resource/cassandra/keyspace/mykeyspace/table/mytable:policyName/MyScalingPolicy", "Alarms": [ { "AlarmName": "TargetTracking-keyspace/mykeyspace/table/mytable-AlarmHigh-d421fec6-fa82-44b4-aab6-6a9bfb6f0ced", "AlarmARN": "arn:aws:cloudwatch:us-west-2:012345678910:alarm:TargetTracking-keyspace/mykeyspace/table/mytable-AlarmHigh-d421fec6-fa82-44b4-aab6-6a9bfb6f0ced" }, { "AlarmName": "TargetTracking-keyspace/mykeyspace/table/mytable-AlarmLow-04479372-e50b-4652-a06d-b3055744ae23", "AlarmARN": "arn:aws:cloudwatch:us-west-2:012345678910:alarm:TargetTracking-keyspace/mykeyspace/table/mytable-AlarmLow-04479372-e50b-4652-a06d-b3055744ae23" }, { "AlarmName": "TargetTracking-keyspace/mykeyspace/table/mytable-MCSProvisionedCapacityHigh-c6a26783-837e-4f70-919e-1fbe4362b6ab", "AlarmARN": "arn:aws:cloudwatch:us-west-2:012345678910:alarm:TargetTracking-keyspace/mykeyspace/table/mytable-MCSProvisionedCapacityHigh-c6a26783-837e-4f70-919e-1fbe4362b6ab" }, { "AlarmName": "TargetTracking-keyspace/mykeyspace/table/mytable-MCSProvisionedCapacityLow-e1ce121a-48ea-4148-ace2-25c5f854c215", "AlarmARN": "arn:aws:cloudwatch:us-west-2:012345678910:alarm:TargetTracking-keyspace/mykeyspace/table/mytable-MCSProvisionedCapacityLow-e1ce121a-48ea-4148-ace2-25c5f854c215" } ] }

查看扩展策略

您可以使用以下 Amazon CLI 命令,查看现有扩展策略的详细信息:

aws application-autoscaling describe-scaling-policies \ --service-namespace cassandra \ --resource-ids "keyspace/mykeyspace/table/mytable" \ --policy-name "MyScalingPolicy"

在此命令的输出中,您可以看到扩展策略的详细信息以及CloudWatchApplication Auto Scaling 创建的警报,分别针对消耗的上限和下限,分别针对扩展目标范围的上限和下限。

{ "ScalingPolicies": [ { "PolicyARN": "arn:aws:autoscaling:us-west-2:012345678910:scalingPolicy:8d606c33-2078-4f37-8305-36e89c56a779:resource/cassandra/keyspace/mykeyspace/table/mytable:policyName/MyScalingPolicy", "PolicyName": "MyScalingPolicy", "ServiceNamespace": "cassandra", "ResourceId": "keyspace/mykeyspace/table/mytable", "ScalableDimension": "cassandra:table:WriteCapacityUnits", "PolicyType": "TargetTrackingScaling", "TargetTrackingScalingPolicyConfiguration": { "TargetValue": 50.0, "PredefinedMetricSpecification": { "PredefinedMetricType": "CassandraWriteCapacityUtilization" }, "ScaleOutCooldown": 60, "ScaleInCooldown": 60 }, "Alarms": [ { "AlarmName": "TargetTracking-keyspace/mykeyspace/table/mytable-AlarmHigh-d421fec6-fa82-44b4-aab6-6a9bfb6f0ced", "AlarmARN": "arn:aws:cloudwatch:us-west-2:012345678910:alarm:TargetTracking-keyspace/mykeyspace/table/mytable-AlarmHigh-d421fec6-fa82-44b4-aab6-6a9bfb6f0ced" }, { "AlarmName": "TargetTracking-keyspace/mykeyspace/table/mytable-AlarmLow-04479372-e50b-4652-a06d-b3055744ae23", "AlarmARN": "arn:aws:cloudwatch:us-west-2:012345678910:alarm:TargetTracking-keyspace/mykeyspace/table/mytable-AlarmLow-04479372-e50b-4652-a06d-b3055744ae23" }, { "AlarmName": "TargetTracking-keyspace/mykeyspace/table/mytable-MCSProvisionedCapacityHigh-c6a26783-837e-4f70-919e-1fbe4362b6ab", "AlarmARN": "arn:aws:cloudwatch:us-west-2:012345678910:alarm:TargetTracking-keyspace/mykeyspace/table/mytable-MCSProvisionedCapacityHigh-c6a26783-837e-4f70-919e-1fbe4362b6ab" }, { "AlarmName": "TargetTracking-keyspace/mykeyspace/table/mytable-MCSProvisionedCapacityLow-e1ce121a-48ea-4148-ace2-25c5f854c215", "AlarmARN": "arn:aws:cloudwatch:us-west-2:012345678910:alarm:TargetTracking-keyspace/mykeyspace/table/mytable-MCSProvisionedCapacityLow-e1ce121a-48ea-4148-ace2-25c5f854c215" } ], "CreationTime": 1587497009.591 } ] }

查看 Application Auto Scaling 操作

您可以通过以下方式查看代表您启动的 Application Auto Scaling 操作:Amazon CLI命令。

aws application-autoscaling describe-scaling-activities \ --service-namespace cassandra

如果您对某个表运行此命令,而该表上的自动扩展功能正在更改写入容量,您会看到类似下面这样的输出:

... { "ScalableDimension": "cassandra:table:WriteCapacityUnits", "Description": "Setting write capacity units to 10.", "ResourceId": "keyspace/mykeyspace/table/mytable", "ActivityId": "0cc6fb03-2a7c-4b51-b67f-217224c6b656", "StartTime": 1489088210.175, "ServiceNamespace": "cassandra", "EndTime": 1489088246.85, "Cause": "monitor alarm AutoScaling-keyspace/mykeyspace/table/mytable-AlarmHigh-1bb3c8db-1b97-4353-baf1-4def76f4e1b9 in state ALARM triggered policy MyScalingPolicy", "StatusMessage": "Successfully set write capacity units to 10. Change successfully fulfilled by cassandra.", "StatusCode": "Successful" }, ...

此示例输出表明 Application Auto Scaling 已向发布Alter Table请求亚马逊 Keyspaces 更改写入容量。

删除扩展策略

删除 mytable 的扩展策略。如果不再需要扩展表的写入容量,则应考虑删除您的扩展策略,以便 Amazon Keyspaces 不会继续修改您的表的写入容量设置。您可以通过注销可扩展目标来删除扩展基础设施,也可以仅删除您的扩展策略并保持可扩展目标的注册状态,以便日后使用。

使用以下命令可删除指定的目标跟踪扩展策略。它还会删除CloudWatchApplication Auto Scaling 代表您创建的警报。

aws application-autoscaling delete-scaling-policy \ --service-namespace cassandra \ --resource-id "keyspace/mykeyspace/table/mytable" \ --scalable-dimension "cassandra:table:WriteCapacityUnits" \ --policy-name "MyScalingPolicy"

禁用现有表的自动缩放功能:注销可扩展目标

使用以下 Amazon CLI 命令来注销可扩展目标。这还将删除附加到此目标的扩展策略。

aws application-autoscaling deregister-scalable-target \ --service-namespace cassandra \ --resource-id "keyspace/mykeyspace/table/mytable" \ --scalable-dimension "cassandra:table:WriteCapacityUnits"