

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

# 尝试更新集群
<a name="troubleshooting-fc-v3-update-cluster"></a>

下一节提供在尝试更新集群时可能发生的问题的问题排查解决方案。

## `pcluster update-cluster 命令无法`在本地运行
<a name="update-cluster-failure-cli-v3"></a>

检查本地文件系统中的 `~/.parallelcluster/pcluster-cli.log` 以查看失败详细信息。

## 集群更新超时
<a name="update-cluster-failure-timeout-v3"></a>

这可能是与 `cfn-hup` 未运行有关的问题。如果 `cfn-hup` 进程守护程序因外部原因终止，它不会自动重启。如果`cfn-hup`未运行，则在集群更新期间， CloudFormation 堆栈会按预期启动更新过程，但更新过程未在头节点上激活，堆栈部署最终会超时。有关更多信息，请参阅[`cfn-hup` 未运行时集群更新超时故障排除](troubleshooting-v3-cluster-update-timeout.md)以排除故障并从问题中恢复。

## `集群状态为` `UPDATE_FAILED`
<a name="update-cluster-failure-v3"></a>

### 根本原因
<a name="update-cluster-failure-v3-root-causing"></a>

要确定故障的根本原因，首先要查看集群堆栈事件和`/var/log/chef-client.log`头节点。

可能的原因是至少有一个群集节点未应用更新。您可以通过在日志中查找来检索`/var/log/chef-client.log`在头节点中更新失败的`Check cluster readiness`节点列表。

查看在 “[GitHub 已知问题” 中是否提到了您的问题](https://github.com/aws/aws-parallelcluster/wiki) GitHub。 AWS ParallelCluster 

### 预防
<a name="update-cluster-failure-v3-preventing"></a>

如果集群中至少有一个节点未成功应用更新，则集群更新可能会失败。为了降低集群更新失败的风险，我们建议在启动更新之前终止损坏的节点。可能被破坏的节点的一个例子是计算节点处于`COMPLETING`状态的时间超过预期的 epilog 持续时间。要检测这些节点，您可以运行以下命令，根据需要调整该`threshold`值（该值必须大于 epilogs 预期的最大持续时间）。

```
$ scontrol show nodes --json | jq -r --argjson threshold 60 '
  .nodes[] | select(.state | index("COMPLETING")) |
  select((now - .last_busy.number) > $threshold) |
  .name
'
```

### 正在恢复
<a name="update-cluster-failure-v3-recovering"></a>

如果更新失败，则回滚是恢复集群状态的预期机制。

 如果回滚失败，则集群状态不确定。在这种情况下，可能是为了防止故障放大`clustermgtd`而停止的。我们建议通过在头节点上运行以下命令来启动它。将 Python 版本与你的 AWS ParallelCluster 版本一起提供的版本进行调整：

```
$ /opt/parallelcluster/pyenv/versions/{{3.12.11}}/envs/cookbook_virtualenv/bin/supervisorctl start clustermgtd
```

### `clusterSt` `atus 为 UPDATE_FAILED，clou d 为 UPDATE_ROLLBACK_ FormationStackStatus`
<a name="update-cluster-failure-rollback-failed-v3"></a>

 当`pcluster describe-cluster`报告现状`UPDATE_FAILED`和`clusterStatus`现状`cloudFormationStackStatus`时`UPDATE_ROLLBACK_FAILED`，集群更新和随后的回滚都失败了。在这种状态下，集群堆栈无法接受任何进一步的更新，需要手动干预才能解除阻止。

要解除对群集堆栈的封锁，请完成以下步骤：

1. 修复失败的根本原因。

1. 强制继续回滚。

   ```
   $ aws cloudformation continue-update-rollback --region {{REGION}} --stack-name {{CLUSTER_STACK_NAME}}
   ```

1. 等待堆栈达到`UPDATE_ROLLBACK_COMPLETE`状态。

1. 使用`pcluster update-cluster`命令重试原始更新。

## `集群堆栈显示卡在 UPDATE_IN_PROGRESS 或 UPDATE_ROLLBACK_IN_ PROGRESS 中`
<a name="update-cluster-stuck-in-progress-v3"></a>

 如果登录节点 Auto Scaling Group 由于登录节点中的引导失败而无法稳定下来，则集群堆栈可能会停滞`UPDATE_IN_PROGRESS`或`UPDATE_ROLLBACK_IN_PROGRESS`最多 1 小时。

 要验证是否由于登录节点 Auto Scaling Group 而处于这种情况，您需要进行以下检查：在主堆栈中`UPDATE_IN_PROGRESS`，唯一存在的资源是登录节点的嵌套堆栈。在登录节点的嵌套堆栈中，唯一被卡住的资源是登录节点 Auto Scaling Group。`UPDATE_IN_PROGRESS`

 如果您处于这种情况，则可以取消更新，这样就无需等待 1 小时即可完成更新。

```
$ aws cloudformation cancel-update-stack --region {{REGION}} --stack-name {{CLUSTER_STACK_NAME}}
```

 取消更新会触发回滚。您无法缩短回滚时的 1 小时超时时间，因此在最坏的情况下，您需要等待回滚达到其最终状态。

 如果回滚成功，则在修复了故障的根本原因后，您可以立即重试原始集群更新。否则，请参阅[`clusterSt` `atus 为 UPDATE_FAILED，clou d 为 UPDATE_ROLLBACK_ FormationStackStatus`](#update-cluster-failure-rollback-failed-v3)。