本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
排查扩展问题
本节与使用 3.0.0 及更高 AWS 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
AWS ParallelCluster 在 CloudWatch 日志组中创建集群日志流。您可以在控制台的 “自定义 CloudWatch 控制面板” 或 “日志” 组中查看这些日志。有关更多信息,请参阅 与 Amazon CloudWatch Logs 集成 和 亚马逊 CloudWatch 控制面板。
主题
用于调试的关键日志
下表概述了头节点的关键日志:
-
/var/log/cfn-init.log
- AWS 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控制守护程序日志。 AWS ParallelCluster 不会做出扩展决策。相反,它只会尝试启动资源来满足 Slurm 的要求。它可用于排查扩展和分配问题、与作业相关的问题以及与调度器相关的任何启动和终止问题。 -
/var/log/parallelcluster/compute_console_output
:此日志记录意外终止的静态计算节点样本子集的控制台输出。如果静态计算节点终止并且计算节点日志在中不可用,则使用此日志 CloudWatch。当您使用 Amazon EC2 控制台或检索实例控制台输出时 AWS CLI ,您收到的compute_console_output log
内容是相同的。
以下是计算节点的关键日志:
-
/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...
根据您的用例,请考虑使用以下方法之一来避免收到这些类型的错误消息:
-
如果启用了置放群组,则将其禁用。有关更多信息,请参阅 置放群组和实例启动问题。
-
为实例预留容量并使用 ODCR(按需容量预留)启动这些实例。有关更多信息,请参阅 使用按需容量预留 (ODCR) 启动实例。
-
配置多个具有不同实例类型的计算资源。如果您的工作负载不需要特定的实例类型,则可以对多个计算资源利用快速容量不足故障转移。有关更多信息,请参阅 Slurm 集群快速容量不足故障转移。
-
在同一个计算资源中配置多种实例类型,并利用多实例类型分配。有关配置多个实例的更多信息,请参阅 Slurm 的多实例类型分配和 Scheduling/SlurmQueues/ComputeResources/Instances。
-
通过在集群配置 Scheduling/SlurmQueues/Networking/SubnetIds 中更改子网 ID,将队列移动到不同的可用区。
-
如果您的工作负载没有紧密耦合,则将队列分散到不同的可用区。有关配置多个子网的更多信息,请参阅 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
日志 (/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 Amazon EC2 Spot Instances.
使用竞价型实例时,您的账户中必须存在
AWSServiceRoleForEC2Spot
服务相关角色。要使用在您的账户中创建此角色 AWS CLI,请运行以下命令:$
aws iam create-service-linked-role --aws-service-name spot.amazonaws.com
有关更多信息,请参阅 Amazon EC2 AWS ParallelCluster 用户指南使用竞价型实例中的用户指南和 Amazon EC2 用户指南中竞价型实例请求的服务相关角色。
排查意外节点替换和终止问题
本节继续探讨如何排查节点相关问题,特别是在节点意外替换或终止时。
-
适用日志:
-
/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 的预期终止,更具体地说是即时终止。computemgtd
,在计算节点上运行,如果节点clustermgtd
被确定为运行状况不佳,也可以终止节点。检查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
\ --instance-initiated-shutdown-behavior "{\"Value\": \"stop\"}" -
启用终止保护。
$
aws ec2 modify-instance-attribute \ --instance-id
i-1234567890abcdef0
\ --disable-api-termination -
将节点标记为易于识别。
$
aws ec2 create-tags \ --resources
i-1234567890abcdef0
\ --tags Key=Name,Value=QUARANTINED-Compute -
通过更改
parallelcluster:cluster-name
标签将节点与集群分离。$
aws ec2 create-tags \ --resources
i-1234567890abcdef0
\ --tags Key=parallelcluster:clustername,Value=QUARANTINED-ClusterName -
使用以下命令从该节点检索控制台输出。
$
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
状态。
排查其他已知的节点和作业问题
另一种已知问题是 AWS ParallelCluster 可能无法分配工作岗位或做出扩展决策。对于此类问题, AWS ParallelCluster 只按照 Slurm 的指示启动、终止或维护资源。对于这些问题,请查看 slurmctld
日志以排查问题。