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

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

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

要通过编程方式更新和管理 Amazon Keyspaces 自动扩展设置,您可以使用Amazon Command Line Interface(Amazon CLI)或AmazonAPI. Amazon Keyspaces 扩展策略不能使用 Cassandra 查询语言 (CQL) 进行管理。本主题概述了您可以使用 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 能够为您指定的表调整预置的写入或读取容量。在以下示例中,我们将注册我的表作为具有写入容量的 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 调整的指标。对于 Amazon Keyspaces,以下值是的有效值:PredefinedMetricType

    • CassandraReadCapacityUtilization

    • CassandraWriteCapacityUtilization

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

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

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

注意

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

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

适用于我的表,您可以设置TargetValue到百分之 50 Application Auto Scaling 可调整表的预配置吞吐量在 5-10 个容量单位范围内(请参阅在现有表上启用自动扩展:注册可扩展目标),以便消耗/预置比例保持在 50% 或接近 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

在此命令的输出中,您可以看到 Application Auto Scaling 创建的 CloudWatch 警报 — 每个警报针对消耗的上下容量,每个警报针对扩展目标范围的上限和下限。

{ "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"

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

{ "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请求,以更改写入容量。

删除扩展策略

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

使用以下命令可删除指定的目标跟踪扩展策略。此操作还将删除 Application Auto Scaling 代表您创建的 CloudWatch 警报。

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"