排查扩展问题 - Amazon ParallelCluster
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

排查扩展问题

本节与使用 Amazon ParallelCluster 版本 3.0.0 及更高版本通过 Slurm 作业调度器安装的集群相关。有关配置多个队列的更多信息,请参阅多个队列的配置

如果您的一个正在运行的集群遇到问题,请在开始排查问题之前,通过运行以下命令将该集群置于 STOPPED 状态。这样可以防止产生任何意外成本。

$ pcluster update-compute-fleet --cluster-name mycluster \ --status STOP_REQUESTED

您可以使用 pcluster list-cluster-log-streams 命令,并通过使用其中一个失败节点或头节点的 private-dns-name 进行筛选,列出集群节点中可用的日志流。

$ pcluster list-cluster-log-streams --cluster-name mycluster --region eu-west-1 \ --filters 'Name=private-dns-name,Values=ip-10-0-0-101'

然后,您可以通过使用 pcluster get-cluster-log-events 命令并传递与下一节中提及的其中一个关键日志相对应的 --log-stream-name,检索日志流的内容并进行分析:

$ pcluster get-cluster-log-events --cluster-name mycluster \ --region eu-west-1 --log-stream-name ip-10-0-0-13.i-04e91cc1f4ea796fe.cfn-init

Amazon ParallelCluster在 CloudWatch 日志组中创建集群日志流。您可以在控制台的 “自定义 CloudWatch 控制面板” 或 “日志” 组中查看这些日志。有关更多信息,请参阅 与 Amazon CloudWatch Logs 集成Amazon CloudWatch 控制面板

用于调试的关键日志

下表概述了头节点的关键日志:

  • /var/log/cfn-init.log:这是 Amazon CloudFormation 初始化日志。其中包含设置实例时运行的所有命令。可以用它来排查初始化问题。

  • /var/log/chef-client.log:这是 Chef 客户端日志。其中包含通过 Chef/CINC 运行的所有命令。可以用它来排查初始化问题。

  • /var/log/parallelcluster/slurm_resume.log:这是 ResumeProgram 日志。它启动动态节点的实例。可以用它来排查动态节点启动问题。

  • /var/log/parallelcluster/slurm_suspend.log:这是 SuspendProgram 日志。在终止动态节点的实例时会调用该日志。可以用它来排查动态节点终止问题。查看此日志时,还应检查 clustermgtd 日志。

  • /var/log/parallelcluster/clustermgtd:这是 clustermgtd 日志。它作为集中式进程守护程序运行,用于管理大多数集群操作。可以用它来排查任何启动、终止或集群操作问题。

  • /var/log/slurmctld.log:这是 Slurm 控制进程守护程序日志。Amazon ParallelCluster 不会做出扩展决策。相反,它只会尝试启动资源来满足 Slurm 的要求。它可用于排查扩展和分配问题、与作业相关的问题以及与调度器相关的任何启动和终止问题。

  • /var/log/parallelcluster/compute_console_output:此日志记录意外终止的静态计算节点样本子集的控制台输出。如果静态计算节点终止并且计算节点日志在中不可用,则使用此日志 CloudWatch。您得到的 compute_console_output log 内容与使用 EC2 控制台或 Amazon CLI 检索实例控制台输出时的内容相同。

以下是计算节点的关键日志:

  • /var/log/cloud-init-output.log:这是 cloud-init 日志。其中包含设置实例时运行的所有命令。可以用它来排查初始化问题。

  • /var/log/parallelcluster/computemgtd:这是 computemgtd 日志。它在每个计算节点上运行,用于在头节点上的 clustermgtd 进程守护程序离线的不常见事件中监控节点。可以用它来排查意外终止问题。

  • /var/log/slurmd.log:这是 Slurm 计算进程守护程序日志。可以用它来排查初始化和计算失败问题。

运行作业失败时在 slurm_resume.log 中看到“InsufficientInstanceCapacity”错误,或创建集群失败时在 clustermgtd.log 中看到该错误

如果集群使用 Slurm 调度器,则会遇到容量不足问题。如果发出实例启动请求时没有足够的可用实例,则会返回 InsufficientInstanceCapacity 错误。

对于静态实例容量,您可以在 /var/log/parallelcluster/clustermgtd 中的 clustermgtd 日志中找到该错误。

对于动态实例容量,您可以在 /var/log/parallelcluster/slurm_resume.log 中的 ResumeProgram 日志中找到该错误。

消息与以下示例类似:

An error occurred (InsufficientInstanceCapacity) when calling the RunInstances/CreateFleet operation...

根据您的用例,请考虑使用以下方法之一来避免收到这些类型的错误消息:

排查节点初始化问题

本节介绍如何排查节点初始化问题。这包括节点无法启动、开机或加入集群的问题。

头节点

适用日志:

  • /var/log/cfn-init.log

  • /var/log/chef-client.log

  • /var/log/parallelcluster/clustermgtd

  • /var/log/parallelcluster/slurm_resume.log

  • /var/log/slurmctld.log

检查 /var/log/cfn-init.log/var/log/chef-client.log 日志或相应的日志流。这些日志包含设置头节点时运行的所有操作。设置过程中发生的大多数错误的错误消息应该都包含在 /var/log/chef-client.log 日志中。如果在集群的配置中指定了 OnNodeStartOnNodeConfigured 脚本,请通过日志消息仔细检查脚本是否成功运行。

创建集群时,头节点必须等待计算节点加入集群,然后才能加入集群。因此,如果计算节点加入集群失败,则头节点也会失败。根据您使用的计算节点的类型,您可以按照其中一组过程来排查此类问题:

计算节点

  • 适用日志:

    • /var/log/cloud-init-output.log

    • /var/log/slurmd.log

  • 如果启动了计算节点,请先检查 /var/log/cloud-init-output.log,其中应包含类似于头节点 /var/log/chef-client.log 日志的设置日志。设置过程中发生的大多数错误的错误消息应该都包含在 /var/log/cloud-init-output.log 日志中。如果在集群配置中指定了预安装或安装后脚本,请检查它们是否成功运行。

  • 如果您使用的是修改了 Slurm 配置的自定义 AMI,则可能存在阻止计算节点加入集群的 Slurm 相关错误。对于与调度器相关的错误,请检查 /var/log/slurmd.log 日志。

动态计算节点:

  • 搜索计算节点名称的 ResumeProgram 日志 (/var/log/parallelcluster/slurm_resume.log) 以查看是否对该节点调用过 ResumeProgram。(如果未调用过 ResumeProgram,则可以检查 slurmctld 日志 (/var/log/slurmctld.log) 以确定 Slurm 是否尝试过对该节点调用 ResumeProgram)。

  • 请注意,ResumeProgram 的权限不正确可能会导致 ResumeProgram 静默失败。如果您使用的是修改了 ResumeProgram 设置的自定义 AMI,请检查该 ResumeProgram 是否由 slurm 用户拥有并具有 744 (rwxr--r--) 权限。

  • 如果调用了 ResumeProgram,请查看是否为该节点启动了实例。如果未启动任何实例,则会看到一条描述启动失败的错误消息。

  • 如果启动了实例,则在设置过程中可能出现了问题。您应该会从 ResumeProgram 日志中看到相应的私有 IP 地址和实例 ID。此外,您可以查看特定实例的相应设置日志。有关排查计算节点设置错误的更多信息,请参阅下一节。

静态计算节点:

  • 检查 clustermgtd (/var/log/parallelcluster/clustermgtd) 日志,查看是否为该节点启动了实例。如果未启动,则应该有详细说明启动失败的明确错误消息。

  • 如果启动了实例,则表示设置过程中出现了问题。您应该会从 ResumeProgram 日志中看到相应的私有 IP 地址和实例 ID。此外,您可以查看特定实例的相应设置日志。

由竞价型实例支持的计算节点:

  • 如果这是您第一次使用竞价型实例,并且作业保持在 PD(待处理状态),请仔细检查 /var/log/parallelcluster/slurm_resume.log 文件。您可能会发现类似下面的错误:

    2022-05-20 13:06:24,796 - [slurm_plugin.common:add_instances_for_nodes] - ERROR - Encountered exception when launching instances for nodes (x1) ['spot-dy-t2micro-2']: An error occurred (AuthFailure.ServiceLinkedRoleCreationNotPermitted) when calling the RunInstances operation: The provided credentials do not have permission to create the service-linked role for EC2 Spot Instances.

    使用竞价型实例时,您的账户中必须存在 AWSServiceRoleForEC2Spot 服务相关角色。要使用 Amazon CLI 在账户中创建此角色,请运行以下命令:

    $ aws iam create-service-linked-role --aws-service-name spot.amazonaws.com

    有关更多信息,请参阅 Amazon ParallelCluster 用户指南中的使用竞价型实例Amazon EC2 用户指南(适用于 Linux 实例)中的竞价型实例请求的服务相关角色

排查意外节点替换和终止问题

本节继续探讨如何排查节点相关问题,特别是在节点意外替换或终止时。

  • 适用日志:

    • /var/log/parallelcluster/clustermgtd(头节点)

    • /var/log/slurmctld.log(头节点)

    • /var/log/parallelcluster/computemgtd(计算节点)

节点意外替换或终止

  • 检查 clustermgtd 日志 (/var/log/parallelcluster/clustermgtd) 以查看 clustermgtd 是否替换或终止了节点。请注意,clustermgtd 处理所有正常的节点维护操作。

  • 如果 clustermgtd 替换或终止了该节点,则应该会有详细说明为何对该节点执行此操作的消息。如果原因与调度器有关(例如,因为节点处于 DOWN 状态),请查看 slurmctld 日志以获取更多信息。如果原因与 Amazon EC2 有关,则应有信息性消息,详细说明需要该替换的 Amazon EC2 相关问题。

  • 如果 clustermgtd 未终止该节点,请先检查这是否是 Amazon EC2 的预期终止,更具体地说是竞价型终止。如果系统确定 clustermgtd 的运行状况不佳,则计算节点上运行的 computemgtd 也可以终止该节点。检查 computemgtd 日志 (/var/log/parallelcluster/computemgtd) 以查看 computemgtd 是否终止了该节点。

节点失败

  • 检查 slurmctld 日志 (/var/log/slurmctld.log) 以查看作业或节点失败的原因。请注意,如果节点失败,作业会自动重新排队。

  • 如果 slurm_resume 报告该节点已启动,并且 clustermgtd 在几分钟后报告 Amazon EC2 中没有该节点的相应实例,则该节点可能在设置过程中失败。要从计算 (/var/log/cloud-init-output.log) 中检索日志,请执行以下步骤:

    • 提交一项作业以便让 Slurm 启动一个新节点。

    • 节点启动后,使用以下命令启用终止保护。

      $ aws ec2 modify-instance-attribute --instance-id i-1234567890abcdef0 --disable-api-termination
    • 使用以下命令从该节点检索控制台输出。

      $ aws ec2 get-console-output --instance-id i-1234567890abcdef0 --output text

替换、终止或关闭有问题的实例和节点

  • 适用日志:

    • /var/log/parallelcluster/clustermgtd(头节点)

    • /var/log/parallelcluster/slurm_suspend.log(头节点)

  • 在大多数情况下,clustermgtd 会处理所有预期的实例终止操作。检查 clustermgtd 日志以查看其无法替换或终止节点的原因。

  • 对于 SlurmSettings 属性 失败的动态节点,请检查 SuspendProgram 日志以查看 slurmctld 是否以特定节点作为参数调用了 SuspendProgram。请注意,SuspendProgram 实际上并不执行任何操作,它只是记录被调用时的时间。所有实例终止和 NodeAddr 重置均由 clustermgtd 完成。经过 SuspendTimeout 之后,Slurm 会自动将节点置回 POWER_SAVING 状态。

  • 如果计算节点由于引导失败而持续失败,请验证它们是否在启用了 Slurm 集群受保护模式的情况下启动。如果未启用受保护模式,请修改受保护模式设置以启用受保护模式。排查并修复引导脚本问题。

队列(分区)Inactive 状态

如果您运行 sinfo 并且输出显示队列的 AVAIL 状态为 inact,则您的集群可能启用了 Slurm 集群受保护模式,并且队列已在预定义的时间段内设置为 INACTIVE 状态。

排查其他已知的节点和作业问题

另一种已知问题是 Amazon ParallelCluster 可能无法分配作业或做出扩展决策。对于此类问题,Amazon ParallelCluster 只按照 Slurm 的指示启动、终止或维护资源。对于这些问题,请查看 slurmctld 日志以排查问题。