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

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

排查扩展问题

本节与使用 3.0.0 及更高Amazon ParallelCluster版本使用 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亚马逊 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。当您使用 EC2 控制台或检索实例控制台输出时Amazon CLI,您收到的compute_console_output log内容是相同的。

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

  • /var/log/cloud-init-output.log-这是云初始化日志。它包含在设置实例时运行的所有命令。用它来解决初始化问题。

  • /var/log/parallelcluster/computemgtd-这是日computemgtd志。它在每个计算节点上运行,以在头节点clustermgtd上的守护程序处于脱机状态的罕见事件中监视该节点。使用它来解决意外终止问题。

  • /var/log/slurmd.log-这是 Slurm 计算守护程序日志。使用它来解决初始化和计算失败问题。

在我无法运行任务slurm_resume.log时看到InsufficientInstanceCapacity错误,或者在创建集群失败clustermgtd.log时看到错误

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

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

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

消息看上去类似于下面的示例:

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 log (/var/log/parallelcluster/slurm_resume.log) 中搜索您的计算节点名称,看看是否ResumeProgram曾经用该节点调用过。(如果ResumeProgram从未调用过,则可以查看slurmctld log (/var/log/slurmctld.log) 以确定 Slurm 是否曾经尝试过调ResumeProgram用该节点)。

  • 请注意,的权限不正确ResumeProgram可能会ResumeProgram导致静默失败。如果您使用的是经过修改的自定义 AMResumeProgram I,请检查是否归slurm用户所有并拥有744 (rwxr--r--) 权限。ResumeProgram

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

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

静态计算节点:

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

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

由 Spot 实例支持的计算节点:

  • 如果这是您第一次使用 Spot 实例且任务仍处于 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

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

排除意外节点替换和终止故障

本节继续探讨如何解决与节点相关的问题,特别是在节点被意外替换或终止时。

  • 适用的日志:

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

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

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

节点意外更换或终止

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

  • 如果clustermgtd替换或终止了节点,则应显示一条消息,详细说明为何在该节点上执行此操作。如果原因与调度程序相关(例如,因为节点在DOWN),请查看slurmctld日志以获取更多信息。如果原因与 Amazon EC2 相关,则应显示信息性消息,详细说明需要更换的 Amazon EC2 相关问题。

  • 如果clustermgtd没有终止节点,请先检查这是否是 Amazon EC2 的预期终止,更具体地说是即时终止。 computemgtd在计算节点上运行,如果确定节点不clustermgtd正常,也可以终止节点。检查computemgtd log (/var/log/parallelcluster/computemgtd) 以查看节点是否computemgtd已终止。

节点失败

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

  • 如果slurm_resume报告该节点已启动,并在几分钟后clustermgtd报告该节点的 Amazon EC2 中没有相应的实例,则该节点可能会在设置过程中出现故障。要从 compute (/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日志以查看SuspendProgram是否slurmctld使用特定节点作为参数调用。请注意,SuspendProgram它实际上并未执行任何操作。相反,它只在被调用时记录。所有实例的终止和NodeAddr重置均由完成clustermgtd。Slurm 会SuspendTimeout自动将节点恢复到POWER_SAVING状态。

  • 如果计算节点由于引导失败而持续出现故障,请验证它们是否在Slurm集群保护模式启用时启动。如果未启用保护模式,请修改保护模式设置以启用保护模式。对引导脚本进行故障排除和修复。

队列(分区)Inactive状态

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

解决其他已知节点和作业问题

另一种已知问题是,Amazon ParallelCluster可能无法分配工作或做出扩展决策。对于此类问题,Amazon ParallelCluster只能根据 Slurm 指令启动、终止或维护资源。对于这些问题,请查看slurmctld日志进行故障排除。