本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
排查扩展问题
本节与使用 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
--regioneu-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
\ --regioneu-west-1
--log-stream-nameip-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...
根据您的用例,考虑使用以下方法之一来避免收到这些类型的错误消息:
-
如果启用了置放群组,则将其禁用。有关更多信息,请参阅置放群组和实例启动问题:
-
为实例预留容量并使用 ODCR(按需容量预留)启动它们。有关更多信息,请参阅使用 ODCR(按需容量预留)启动实例:
-
使用不同的实例类型配置多个计算资源。如果您的工作负载不需要特定的实例类型,则可以使用多个计算资源利用容量不足的快速故障转移。有关更多信息,请参阅Slurm群集速度快容量不足故障转移:
-
在同一个计算资源中配置多个实例类型,并利用多实例类型分配。有关配置多个实例的更多信息,请参阅使用 Slurm 分配多实例类型和 Scheduling/SlurmQueues/ComputeResources/Instances。
-
通过更改集群配置中的子网 ID Scheduling/SlurmQueuesNetworking/将队列移至其他可用区SubnetIds。
-
如果您的工作负载没有紧密耦合,请将队列跨越不同的可用区。有关配置多个子网的更多信息,请参阅 Scheduling/SlurmQueues/Networking/SubnetIds。
解决节点初始化问题
本节介绍如何解决节点初始化问题。这包括节点无法启动、启动或加入集群的问题。
头节点
适用的日志:
-
/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
日志中显示错误消息。如果在集群的配置中指定了OnNodeStart
或OnNodeConfigured
脚本,请通过日志消息仔细检查脚本是否成功运行。
创建集群时,头节点必须等待计算节点加入集群,然后才能加入集群。因此,如果计算节点无法加入集群,那么头节点也会失败。您可以按照其中一组过程来解决此类问题,具体取决于您使用的计算笔记类型,您可以按照其中一组过程来解决此类问题,具体取决于您使用的计算注释类型,您可以按照其中一组过程来解决此类问题:
计算节点
-
适用的日志:
-
/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
日志进行故障排除。