

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

# 自动扩缩 Amazon Neptune 数据库集群中的副本数量
<a name="manage-console-autoscaling"></a>

您可以使用 Neptune 自动扩缩来自动调整数据库集群中 Neptune 副本的数量，以满足您的连接和工作负载要求。自动扩缩可让您的 Neptune 数据库集群处理工作负载的增加，然后，当工作负载减少时，自动扩缩会删除不必要的副本，这样您就无需为未使用的容量付费。

只能对已经有一个主写入器实例和至少一个只读副本实例的 Neptune 数据库集群使用自动扩缩（请参阅[Amazon Neptune 数据库集群和实例](feature-overview-db-clusters.md)）。此外，集群中的所有只读副本实例都必须处于可用状态。如果任何只读副本处于除可用状态以外的状态，则在集群中的每个只读副本都可用之前，Neptune 自动扩缩不会执行任何操作。

如果您需要创建新的集群，请参阅[创建 Neptune 集群](get-started-create-cluster.md)。

使用 AWS CLI，您可以定义[扩展策略](#manage-console-autoscaling-define-policy)并将其应用于数据库集群。也可以使用 AWS CLI 来编辑或删除您的自动扩缩策略。该策略指定以下自动扩缩参数：
+ 集群中要具有的最小和最大副本数。
+ 副本添加扩展活动之间的 `ScaleOutCooldown` 间隔和副本删除缩减活动之间的 `ScaleInCooldown` 间隔。
+ CloudWatch 指标和用于纵向扩展或缩减的指标触发值。

可以通过多种方式减小 Neptune 自动扩缩操作的频率：
+ 最初，为自动扩缩以添加或删除读取器，必须突破 `CPUUtilization` 高警报达至少 3 分钟，或者必须突破低警报达至少 15 分钟。
+ 在首次添加或删除之后，后续 Neptune 自动扩缩操作的频率受到自动扩缩策略中 `ScaleOutCooldown` 和 `ScaleInCooldown` 设置的限制。

如果您正在使用的 CloudWatch 指标达到您在策略中指定的高阈值，自上次自动扩缩操作以来经过了 `ScaleOutCooldown` 间隔，并且，如果数据库集群还没有您设置的最大副本数，则 Neptune 自动扩缩会使用与数据库集群的主实例相同的实例类型创建一个新的副本。

同样，如果指标达到您指定的低阈值，自上次自动扩缩操作以来经过了 `ScaleInCooldown` 间隔，并且，如果您的数据库集群的副本数量超过了您指定的最小副本数，Neptune 自动扩缩会删除其中一个副本。

**注意**  
Neptune 自动扩缩仅移除它创建的副本。它不会移除先前存在的副本。

使用 [neptune\$1autoscaling\$1config](parameters.md#parameters-db-cluster-parameters-neptune_autoscaling_config) 数据库集群参数，您还可以指定 Neptune 自动扩缩创建的新只读副本的实例类型、这些只读副本的维护时段以及要与每个新只读副本关联的标签。您可以在 JSON 字符串中提供这些配置设置作为 `neptune_autoscaling_config` 参数的值，如下所示：

```
"{
  \"tags\": [
    { \"key\" : \"reader tag-0 key\", \"value\" : \"reader tag-0 value\" },
    { \"key\" : \"reader tag-1 key\", \"value\" : \"reader tag-1 value\" },
  ],
  \"maintenanceWindow\" : \"wed:12:03-wed:12:33\",
  \"dbInstanceClass\" : \"db.r5.xlarge\"
}"
```

请注意，JSON 字符串中的引号必须全部使用反斜杠字符 (`\`) 进行转义。像往常一样，字符串中的所有空格都是可选的。

`neptune_autoscaling_config` 参数中未指定的三个配置设置中的任何一个都是从数据库集群的主写入器实例的配置中复制的。

当[自动扩缩](https://docs.aws.amazon.com/autoscaling/plans/userguide/)添加新的只读副本实例时，它会在数据库实例 ID 前加上`autoscaled-reader` 前缀（例如 `autoscaled-reader-7r7t7z3lbd-20210828`）。它还会为它创建的每个只读副本添加一个标签，其键为 `autoscaled-reader`，值为 `TRUE`。您可以在 AWS 管理控制台中的数据库实例详细信息页面的**标签**选项卡上看到此标签。

```
 "key" : "autoscaled-reader",  "value" : "TRUE"
```

通过自动扩缩创建的所有只读副本实例的提升层为最低优先级，默认情况下为 `15`。这意味着在失效转移期间，任何优先级更高的副本（如手动创建的副本）会先提升。请参阅[Neptune 数据库集群的容错能力](backup-restore-overview-fault-tolerance.md)。

Neptune 自动扩缩是使用 Application Auto Scaling 实现的，其[目标跟踪扩展策略](https://docs.aws.amazon.com/autoscaling/application/userguide/application-auto-scaling-target-tracking.html)使用 Neptune [`CPUUtilization`](cw-metrics.md#cw-metrics-available) CloudWatch 指标作为预定义指标。

## 在 Neptune 无服务器数据库集群中使用自动扩缩
<a name="autoscaling-with-serverless"></a>

当需求超过实例的容量时，Neptune 无服务器的响应速度比 Neptune 自动扩缩的速度快得多，并可以纵向扩展实例而不是添加另一个实例。自动扩缩旨在适应相对稳定的工作负载增加或减少，而无服务器则擅长处理需求中的快速峰值和抖动。

了解它们的优势，您可以将自动扩缩和无服务器结合起来，以创建一个灵活的基础设施，该基础设施将高效地处理工作负载的变化并满足需求，同时最大限度地降低成本。

为了让自动扩缩与无服务器有效协作，务必将[无服务器集群的 `maxNCU`](neptune-serverless-capacity-scaling.md#neptune-serverless-capacity-range-max) 设置配置得足够高，以适应需求的峰值和短暂变化。否则，瞬态更改不会触发无服务器扩展，这可能会导致自动扩缩启动许多不必要的额外实例。如果 `maxNCU` 设置得足够高，则无服务器扩展可以更快、以更低的成本处理这些变化。

## 如何为 Amazon Neptune 启用自动扩缩
<a name="manage-console-autoscaling-enable"></a>

只能使用 AWS CLI 为 Neptune 数据库集群启用自动扩缩。您无法使用 AWS 管理控制台启用自动扩缩。

此外，以下 Amazon 区域不支持自动扩缩：
+ 非洲（开普敦）：`af-south-1`
+ 中东（阿联酋）：`me-central-1`
+ AWS GovCloud（美国东部）：`us-gov-east-1`
+ AWS GovCloud（美国西部）：`us-gov-west-1`

为 Neptune 数据库集群启用自动扩缩涉及三个步骤：

### 1. 向 Application Auto Scaling 注册数据库集群
<a name="manage-console-autoscaling-register"></a>

为 Neptune 数据库集群启用自动扩缩的第一步是使用 AWS CLI 或其中一个 Application Auto Scaling SDK 向 Application Auto Scaling 注册该集群。集群必须已经有一个主实例和至少一个只读副本实例：

例如，要注册一个集群以通过一个至八个其它副本进行自动扩缩，可以按如下方式使用 AWS CLI [https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/register-scalable-target.html](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/register-scalable-target.html) 命令：

```
aws application-autoscaling register-scalable-target \
  --service-namespace neptune \
  --resource-id cluster:(your DB cluster name) \
  --scalable-dimension neptune:cluster:ReadReplicaCount \
  --min-capacity 1 \
  --max-capacity 8
```

这等同于使用 [https://docs.aws.amazon.com/ApplicationAutoScaling/latest/APIReference/API_RegisterScalableTarget.html](https://docs.aws.amazon.com/ApplicationAutoScaling/latest/APIReference/API_RegisterScalableTarget.html) Application Auto Scaling API 操作。

AWS CLI `register-scalable-target` 命令使用以下参数：
+ ** `service-namespace`** – 设置为 `neptune`。

  此参数与 Application Auto Scaling API 中的 `ServiceNamespace` 参数相同。
+ **`resource-id`** – 将其设置为 Neptune 数据库集群的资源标识符。资源类型为 `cluster`，后跟冒号 ('`:`')，然后是数据库集群的名称。

  此参数与 Application Auto Scaling API 中的 `ResourceID` 参数相同。
+ **`scalable-dimension`** – 在本例中，可扩展维度是数据库集群中副本实例的数量，因此您可以将此参数设置为 `neptune:cluster:ReadReplicaCount`。

  此参数与 Application Auto Scaling API 中的 `ScalableDimension` 参数相同。
+ **`min-capacity`** – 由 Application Auto Scaling 管理的最小读取器数据库副本实例数。该值应设置在 0 到 15 的范围内，并且必须等于或小于在 `max-capacity` 中为最大 Neptune 副本数量指定的值。数据库集群中必须至少有一个读取器才能进行自动扩缩。

  此参数与 Application Auto Scaling API 中的 `MinCapacity` 参数相同。
+ **`max-capacity`** – 数据库集群中读取器数据库副本实例的最大数量，包括预先存在的实例和由 Application Auto Scaling 管理的新实例。此值必须设置在 0 到 15 的范围内，并且必须等于或大于在 `min-capacity` 中为最小 Neptune 副本数量指定的值。

  `max-capacity` AWS CLI 参数与 Application Auto Scaling API 中的 `MaxCapacity` 参数相同。

注册数据库集群时，Application Auto Scaling 会创建一个 `AWSServiceRoleForApplicationAutoScaling_NeptuneCluster` 服务相关角色。有关更多信息，请参阅《Application Auto Scaling 用户指南》**中的 [Application Auto Scaling 服务相关角色](https://docs.aws.amazon.com/autoscaling/application/userguide/application-auto-scaling-service-linked-roles.html)。

### 2. 定义用于数据库集群的自动扩缩策略
<a name="manage-console-autoscaling-define-policy"></a>

目标跟踪扩展策略定义为一个 JSON 文本对象，也可以将其保存在文本文件中。对于 Neptune，此策略目前只能使用 Neptune [`CPUUtilization`](cw-metrics.md#cw-metrics-available) CloudWatch 指标作为名为 `NeptuneReaderAverageCPUUtilization` 的预定义指标。

以下是 Neptune 的目标跟踪扩展配置策略示例：

```
{
  "PredefinedMetricSpecification": { "PredefinedMetricType": "NeptuneReaderAverageCPUUtilization" },
  "TargetValue": 60.0,
  "ScaleOutCooldown" : 600,
  "ScaleInCooldown" : 600
}
```

此处的 **`TargetValue`** 元素包含 CPU 利用率的百分比，高于该百分比的自动扩缩会*横向扩展*（即添加更多副本），低于该百分比则会*横向缩减*（即删除副本）。在这种情况下，触发扩展的目标百分比为 `60.0`%。

**`ScaleInCooldown`** 元素指定在一个横向缩减活动完成后，另一个横向缩减可以开始前的时长（秒）。默认值为 300 秒。这里，值为 600 指定一个副本删除完成与开始另一个副本删除之间必须经过至少十分钟。

**`ScaleOutCooldown`** 元素指定在一个横向扩展活动完成后，另一个横向扩展可以开始前的时长（秒）。默认值为 300 秒。这里，值为 600 指定一个副本添加完成与开始另一个副本添加之间必须经过至少十分钟。

**`DisableScaleIn`** 元素是一个布尔值，如果存在并设置为 `true`，则完全禁用横向缩减，这意味着自动扩缩可能会添加副本，但从不会删除任何副本。默认情况下，横向缩减处于启用状态，并且 `DisableScaleIn` 为 `false`。

### 
<a name="manage-console-autoscaling-apply-policy"></a>

向 Application Auto Scaling 注册 Neptune 数据库集群并在文本文件中定义 JSON 扩展策略后，接下来将扩展策略应用于已注册的数据库集群。您可以使用 AWS CLI [https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/put-scaling-policy.html](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/put-scaling-policy.html) 命令执行此操作，参数如下：

```
aws application-autoscaling put-scaling-policy \
  --policy-name (name of the scaling policy) \
  --policy-type TargetTrackingScaling \
  --resource-id cluster:(name of your Neptune DB cluster) \
  --service-namespace neptune \
  --scalable-dimension neptune:cluster:ReadReplicaCount \
  --target-tracking-scaling-policy-configuration file://(path to the JSON configuration file)
```

应用自动扩缩策略后，将在数据库集群上启用自动扩缩。

您也可以使用 AWS CLI[https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/put-scaling-policy.html](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/put-scaling-policy.html) 命令更新现有的自动扩缩策略。

另请参阅《Application Auto Scaling API 参考》**中的 [PutScalingPolicy](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_PutScalingPolicy.html)。

## 从 Neptune 数据库集群中移除自动扩缩
<a name="manage-console-autoscaling-delete"></a>

要从 Neptune 数据库集群中移除自动扩缩，请使用 AWS CLI [delete-scaling-policy](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/delete-scaling-policy.html) 和 [deregister-scalable-target](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/deregister-scalable-target.html) 命令。