

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

# 配置 Amazon MWAA Worker 节点自动扩缩
<a name="mwaa-autoscaling"></a>

自动扩缩机制会根据 Amazon Managed Workflows for Apache Airflow 环境中正在运行和排队的任务数量，自动增加 Apache Airflow Worker 节点数量，并在没有其他任务排队或正在执行时停止多余的 Worker 节点。本主题介绍如何使用 Amazon MWAA 控制台指定在环境中运行的最大 Apache Airflow Worker 工作线程数，从而配置自动扩缩。

**注意**  
Amazon MWAA 使用 Apache Airflow 指标来确定何时需要额外的 [Celery 执行程序](https://airflow.apache.org/docs/apache-airflow/stable/executor/celery.html)工作线程，并根据需要将 Fargate 工作线程数增加到 `max-workers` 指定的值。随着额外 Worker 节点完成工作和工作负载的减少，Amazon MWAA 会将其移除，从而缩减到 `min-workers` 设定的值。  
如果 Worker 节点在缩减的同时接到新任务，Amazon MWAA 会保留 Fargate 资源并且不会移除该 Worker 节点。有关更多信息，请参阅 [Amazon MWAA 自动扩缩的工作原理](#mwaa-autoscaling-how)。

**Topics**
+ [Worker 节点扩缩的工作原理](#mwaa-autoscaling-how)
+ [使用 Amazon MWAA 控制台](#mwaa-autoscaling-console)
+ [高性能用例示例](#mwaa-autoscaling-high-volume)
+ [对停留在运行状态的任务进行故障排除](#mwaa-autoscaling-stranded)
+ [接下来做什么？](#mwaa-autoscaling-next-up)

## Worker 节点扩缩的工作原理
<a name="mwaa-autoscaling-how"></a>

Amazon MWAA 使用 `RunningTasks` 和 `QueuedTasks` [指标](access-metrics-cw.md#available-metrics-cw)，其中*（正在运行的任务 \$1 排队的任务）/（[每个工作线程的任务数](environment-class.md#environment-class-sizes)）=（所需工作线程）*。如果所需的工作线程数大于当前工作线程数，Amazon MWAA 将在该值中添加 Fargate 工作线程容器，但不得超过 `max-workers` 指定的最大值。

随着工作负载减少以及 `RunningTasks` 与 `QueuedTasks` 指标之和下降，Amazon MWAA 会请求 Fargate 缩减环境的 Worker 节点数。任何在缩减期间仍在完成工作的 Worker 节点继续受到保护，直到完成工作为止。根据具体的工作负载，工作线程缩减时任务可能会排队等候。

## 使用 Amazon MWAA 控制台
<a name="mwaa-autoscaling-console"></a>

您可以在 Amazon MWAA 控制台上选择可在环境中同时运行的最大工作线程数。默认情况下，您可以指定最大值，最大值为 25。

**要配置工作线程数，请执行以下操作**

1. 在 Amazon MWAA 控制台上打开[环境页面](https://console.aws.amazon.com/mwaa/home#/environments)。

1. 选择环境。

1. 选择**编辑**。

1. 选择**下一步**。

1. 在**环境类**窗格上，在**最大工作线程计数**中输入一个值。

1. 选择**保存**。

**注意**  
更改可能需要几分钟才能生效。

## 高性能用例示例
<a name="mwaa-autoscaling-high-volume"></a>

下一节介绍可用于在环境中实现高性能和并行性的配置类型。

### 本地 Apache Airflow
<a name="mwaa-autoscaling-high-volume-aa"></a>

通常，在本地 Apache Airflow 平台中，您在 `airflow.cfg` 文件中配置任务并行度、自动扩缩和并发设置：
+ `core.parallelism`— 每个计划程序可以同时运行的最大任务实例数。
+ `core.dag_concurrency`— DAG（非工作线程）的最大并发度。
+ `celery.worker_autoscale`— 可在任何工作线程上同时运行的最大和最小任务数。

例如，如果 `core.parallelism` 设置为 `100` 且 `core.dag_concurrency` 设置为 `7`，则只有在拥有 2 个 DAG 的情况下，您才能够同时运行总共 `14` 个任务。假设，即使总体并行度设置为 `100`（在 `core.parallelism` 中），每个 DAG 也只能同时运行七个任务（在 `core.dag_concurrency` 中）。

**注意**  
`core.dag_concurrency` 在 Apache Airflow v3 中不可用。

### 在Amazon MWAA 环境中
<a name="mwaa-autoscaling-high-volume-mwaa"></a>

在 Amazon MWAA 环境中，您可以直接在 Amazon MWAA 控制台上使用 [在 Amazon MWAA 上使用 Apache Airflow 配置选项](configuring-env-variables.md)、[配置 Amazon MWAA 环境类](environment-class.md) 和 **最大 Worker 节点数**自动扩缩机制来配置这些设置。虽然在 Amazon MWAA 控制台中，`core.dag_concurrency` 并未作为一个 **Apache Airflow 配置选项**在下拉列表中出现，但您可以将其作为自定义 [Apache Airflow 配置选项](configuring-env-variables.md)添加。

比方说，当您创建环境时，您选择了以下设置：

1. **mw1.small** [环境类](environment-class.md)，用于控制默认情况下每个工作线程可以运行的最大并发任务数和容器的 vCPU。

1. **最大工作线程计数**中的 `10` 工作线程的默认设置。

1. [Apache Airflow 配置选项](configuring-env-variables.md)，适用于每个工作线程的 `5,5` 个任务的 `celery.worker_autoscale`。

这意味着您可以在环境中运行 50 个并发任务。任何超过 50 的任务都将排队，并等待正在运行的任务完成。

**运行更多并发任务**。您可以使用以下配置修改环境以同时运行更多任务：

1. 通过选择 `mw1.medium`（默认为 10 个并发任务）[环境类](environment-class.md)，增加每个工作线程默认可以运行的最大并发任务数和各个容器的 vCPU。

1. 添加 `celery.worker_autoscale` 作为 [Apache Airflow 配置选项](configuring-env-variables.md)。

1. 增加**最大工作线程计数**。在此示例中，将最大工作线程数从 `10` 增加到 `20` 会使环境可以运行的并发任务数增加一倍。

**指定最低工作线程数**。您还可以使用 AWS Command Line Interface（AWS CLI）指定在环境中运行的 Apache Airflow 工作线程的最小和最大数。例如：

```
aws mwaa update-environment --max-workers 10 --min-workers 10 --name YOUR_ENVIRONMENT_NAME
```

要了解更多信息，请参阅 AWS CLI 中的 [update-environment](https://docs.aws.amazon.com/cli/latest/reference/mwaa/update-environment.html) 命令。

## 对停留在运行状态的任务进行故障排除
<a name="mwaa-autoscaling-stranded"></a>

在极少数情况下，Apache Airflow 可能会认为还有任务在运行。要解决此问题，您需要清除 Apache Airflow UI 中的滞留任务。有关更多信息，请参阅 [Amazon MWAA 故障排除](troubleshooting.md) 故障排除主题。

## 接下来做什么？
<a name="mwaa-autoscaling-next-up"></a>
+ 要详细了解我们推荐的调整环境性能的最佳实践，请参阅 [Amazon MWAA 上的 Apache Airflow 的性能调整](best-practices-tuning.md)。