本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
AWS ParallelCluster 故障排除
AWS ParallelCluster 社区维护着一个 Wiki 页面,在 AWS ParallelCluster GitHub Wi
主题
检索和保留日志
日志是用于排查问题的有用资源。在使用日志对 AWS ParallelCluster 资源进行问题排查之前,应先创建集群日志存档。按照 AWS ParallelCluster GitHub Wiki
如果您的一个正在运行的集群遇到问题,则应在开始排查问题之前,通过运行 pcluster stop
<
命令将该集群置于 cluster_name
>STOPPED
状态。这样可以防止产生任何意外成本。
如果 pcluster
停止运行,或者您想删除集群但仍保留其日志,请运行 pcluster delete —keep-logs
<
命令。运行此命令会删除集群,但保留存储在 Amazon 中的日志组 CloudWatch。有关此命令的更多信息,请参阅 pcluster delete 文档。cluster_name
>
排查堆栈部署问题
如果您的集群创建失败并回滚堆栈创建,则可以通过查看以下日志文件来诊断问题。您需要在这些日志中找到 ROLLBACK_IN_PROGRESS
的输出。失败消息的内容应与以下内容类似:
$
pcluster create mycluster
Creating stack named: parallelcluster-mycluster Status: parallelcluster-mycluster - ROLLBACK_IN_PROGRESS Cluster creation failed. Failed events: - AWS::EC2::Instance MasterServer Received FAILURE signal with UniqueId i-07af1cb218dd6a081
要诊断问题,请使用 pcluster create(包括 --norollback
标志)重新创建该集群。然后,SSH进入集群:
$
pcluster create mycluster --norollback
...$
pcluster ssh mycluster
登录到头节点后,您应该可以找到三个主要的日志文件,可以用它们来精准确定错误。
-
/var/log/cfn-init.log
是cfn-init
脚本的日志。首先查看此日志。在此日志中,您可能会看到类似“Command chef failed
”的错误。查看此行前面的几行,了解与该错误消息相关的更多细节。有关更多信息,请参阅 cfn-init。 -
/var/log/cloud-init.log
是 cloud-init的日志。如果您在 cfn-init.log
中没有看到任何内容,请接下来尝试查看此日志。 -
/var/log/cloud-init-output.log
是 cloud-init运行的命令的输出。这包括 cfn-init
的输出。在大多数情况下,排查此类问题无需查看此日志。
排查多队列模式集群中的问题
本节与使用 2.9.0 及更高 AWS ParallelCluster 版本安装的集群相关 Slurm 作业调度器。有关多队列模式的更多信息,请参阅多队列模式。
关键日志
下表概述了头节点的关键日志:
/var/log/cfn-init.log
-
AWS CloudFormation 这是初始化日志。其中包含设置实例时运行的所有命令。可以用它来排查初始化问题。
/var/log/chef-client.log
-
这是 Chef 客户端日志。它包含通过 ChefCINC/运行的所有命令。可以用它来排查初始化问题。
/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/cloud-init-output.log
-
这是 cloud-init
日志。其中包含设置实例时运行的所有命令。可以用它来排查初始化问题。 /var/log/parallelcluster/computemgtd
-
这是
computemgtd
日志。它在每个计算节点上运行,用于在头节点上的clustermgtd
进程守护程序离线的罕见事件中监控节点。可以用它来排查意外终止问题。 /var/log/slurmd.log
-
这是 Slurm 计算守护程序日志。可以用它来排查初始化和计算失败相关问题。
排查节点初始化问题
本节介绍如何排查节点初始化问题。这包括节点无法启动、开机或加入集群的问题。
头节点:
适用日志:
-
/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
日志中。如果在集群的配置中指定了预安装或安装后脚本,请通过日志消息仔细检查脚本是否成功运行。
创建集群时,头节点必须等待计算节点加入集群,然后才能加入集群。因此,如果计算节点加入集群失败,则头节点也会失败。根据您使用的计算节点的类型,您可以按照其中一组过程来排查此类问题:
动态计算节点:
-
搜索计算节点名称的
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。此外,您可以查看特定实例的相应设置日志。
-
计算节点:
-
适用日志:
-
/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
日志中。如果在集群配置中指定了预安装或安装后脚本,请检查它们是否成功运行。 -
如果你使用的是经过修改AMI的自定义 Slurm 配置,那么可能有一个 Slurm 导致计算节点无法加入集群的相关错误。对于与调度器相关的错误,请检查
/var/log/slurmd.log
日志。
-
排查意外节点替换和终止问题
本节继续探讨如何排查节点相关问题,特别是在节点意外替换或终止时。
-
适用日志:
-
/var/log/parallelcluster/clustermgtd
(头节点) -
/var/log/slurmctld.log
(头节点) -
/var/log/parallelcluster/computemgtd
(计算节点)
-
-
节点意外替换或终止
-
检查
clustermgtd
日志 (/var/log/parallelcluster/clustermgtd
) 以查看clustermgtd
是否执行了替换或终止节点的操作。请注意,clustermgtd
处理所有正常的节点维护操作。 -
如果
clustermgtd
替换或终止了该节点,则应该会有详细说明为何对该节点执行此操作的消息。如果原因与调度器有关(例如,因为节点处于DOWN
状态),请查看slurmctld
日志以获取更多信息。如果原因EC2与亚马逊有关,则应附上信息性消息,详细说明需要更换的亚马逊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-xyz --disable-api-termination
-
使用以下命令从该节点检索控制台输出。
aws ec2 get-console-output --instance-id i-xyz --output text
-
-
替换、终止或关闭有问题的实例和节点
-
适用日志:
-
/var/log/parallelcluster/clustermgtd
(头节点) -
/var/log/parallelcluster/slurm_suspend.log
(头节点)
-
-
在大多数情况下,
clustermgtd
会处理所有预期的实例终止操作。检查clustermgtd
日志以查看其无法替换或终止节点的原因。 -
对于 scaledown_idletime 失败的动态节点,请检查
SuspendProgram
日志以查看slurmctld
是否以特定节点作为参数调用了SuspendProgram
。请注意,SuspendProgram
实际上并不执行任何操作,它只是记录被调用时的时间。所有实例终止和NodeAddr
重置均由clustermgtd
完成。Slurm 之后会SuspendTimeout
自动将节点恢复到POWER_SAVING
状态。
排查其他已知的节点和作业问题
另一种已知问题是 AWS ParallelCluster 可能无法分配工作岗位或做出扩展决策。对于此类问题, AWS ParallelCluster 只能根据以下条件启动、终止或维护资源 Slurm 指令。对于这些问题,请查看 slurmctld
日志以排查问题。
排查单队列模式集群中的问题
注意
从 2.11.5 版开始, AWS ParallelCluster 不支持使用 SGE 或者 Torque 调度器。
本节适用于采用以下两种配置之一并且没有多队列模式的集群:
-
使用 2.9.0 之前的 AWS ParallelCluster 版本启动,并且 SGE, Torque,或 Slurm 作业调度器。
-
使用 2.9.0 或 AWS ParallelCluster 更高版本启动,并且 SGE 或者 Torque 作业调度器。
关键日志
以下日志文件是头节点的关键日志。
对于 2.9.0 或更高 AWS ParallelCluster 版本:
/var/log/chef-client.log
-
这是CINC(厨师)客户端日志。它包含所有运行过的命令CINC。可以用它来排查初始化问题。
对于所有 AWS ParallelCluster 版本:
/var/log/cfn-init.log
-
这是
cfn-init
日志。其中包含设置实例时运行的所有命令,因此可用于排查初始化问题。有关更多信息,请参阅 cfn-init。 /var/log/clustermgtd.log
-
这是的
clustermgtd
日志 Slurm 调度器。clustermgtd
作为管理大多数集群操作操作的集中式守护程序运行。可以用它来排查任何启动、终止或集群操作问题。 /var/log/jobwatcher
-
这是的
jobwatcher
日志 SGE 以及 Torque 调度器。jobwatcher
监控调度器队列并更新 Auto Scaling 组。可以用它来排查与纵向扩展节点相关的问题。 /var/log/sqswatcher
-
这是的
sqswatcher
日志 SGE 以及 Torque 调度器。sqswatcher
处理计算实例在成功初始化后发送的实例就绪事件。它还会向调度器配置中添加计算节点。可以使用此日志来排查一个或多个节点无法加入集群的问题。
以下是计算节点的关键日志。
AWS ParallelCluster 版本 2.9.0 或更高版本
/var/log/cloud-init-output.log
-
这是云初始化日志。其中包含设置实例时运行的所有命令。可以用它来排查初始化问题。
AWS ParallelCluster 2.9.0 之前的版本
/var/log/cfn-init.log
-
CloudFormation 这是初始化日志。其中包含设置实例时运行的所有命令。可以用它来排查初始化问题
所有版本
/var/log/nodewatcher
-
这是日
nodewatcher
志。nodewatcher
使用时在每个计算节点上运行的守护程序 SGE 以及 Torque 调度器。如果某个节点处于空闲状态,他们会缩减该节点。可以使用此日志来排查与缩减资源相关的任何问题。
排查启动和加入操作失败问题
-
适用日志:
-
/var/log/cfn-init-cmd.log
(头节点和计算节点) -
/var/log/sqswatcher
(头节点)
-
-
如果节点启动失败,请检查
/var/log/cfn-init-cmd.log
日志以查看具体的错误消息。在大多数情况下,节点启动失败是由设置失败引起的。 -
如果计算节点虽然设置成功,但仍无法加入调度器配置,请检查
/var/log/sqswatcher
日志以查看sqswatcher
是否处理了该事件。在大多数情况下,这些问题是因为sqswatcher
未处理该事件。
排查扩展问题
-
适用日志:
-
/var/log/jobwatcher
(头节点) -
/var/log/nodewatcher
(计算节点)
-
-
纵向扩展问题:对于头节点,检查
/var/log/jobwatcher
日志以查看jobwatcher
进程守护程序是否计算出正确的所需节点数并更新了自动扩缩组。请注意,jobwatcher
会监控调度器队列并更新自动扩缩组。 -
缩减问题:对于计算节点,检查出问题节点上的
/var/log/nodewatcher
日志以查看缩减该节点的原因。请注意,nodewatcher
进程守护程序会缩减处于空闲状态的计算节点。
排查其他集群相关问题
一个已知问题是随机计算节点在大规模集群(特别是具有 500 或更多计算节点的集群)上失败。此问题与单队列集群的扩展架构限制有关。如果你想使用大型集群,正在使用 v2.9.0 或更高 AWS ParallelCluster 版本,正在使用 Slurm,为了避免此问题,您应该升级并切换到支持多队列模式的集群。您可以通过运行 pcluster-config convert 来实现这一目的。
对于超大规模集群,可能需要对系统进行额外调整。欲了解更多信息,请联系 AWS Support。
置放群组和实例启动问题
为了获得最低的节点间延迟,请使用置放群组。置放群组可确保您的实例位于同一网络主干中。如果发出请求时没有足够的可用实例,则会返回 InsufficientInstanceCapacity
错误。要在使用集群置放群组时降低收到此错误的可能性,请将 placement_group 参数设置为 DYNAMIC
并将 placement 参数设置为 compute
。
如果您需要高性能的共享文件系统,请考虑使用 for Lustre FSx。
如果头节点必须位于置放群组中,则对头节点和所有计算节点使用相同的实例类型和子网。这样可确保 compute_instance_type 参数与 master_instance_type 参数具有相同的值,placement 参数设置为 cluster
且未指定 compute_subnet_id 参数。使用此配置时,master_subnet_id 参数的值用于计算节点。
有关更多信息,请参阅 Amazon EC2 用户指南中的排查实例启动问题和置放群组角色和限制
无法替换的目录
以下目录在节点之间共享,无法替换。
/home
-
这包括默认的用户主文件夹(
/home/ec2_user
在 Amazon Linux/home/centos
上,CentOS,/home/ubuntu
等等 Ubuntu). /opt/intel
-
这包括英特尔MPI、英特尔 Parallel Studio 和相关文件。
/opt/sge
-
注意
从 2.11.5 版开始, AWS ParallelCluster 不支持使用 SGE 或者 Torque 调度器。
这包括 Son of Grid Engine 和相关文件。(有条件,仅当 scheduler
= sge
时。) /opt/slurm
-
这包括 Slurm Workload Manager 和相关文件。(有条件,仅当 scheduler
= slurm
时。) /opt/torque
-
注意
从 2.11.5 版开始, AWS ParallelCluster 不支持使用 SGE 或者 Torque 调度器。
这包括 Torque Resource Manager 和相关文件。(有条件,仅当 scheduler
= torque
时。)
对 Amazon 中的问题进行故障排除 DCV
亚马逊日志 DCV
Amazon DCV 的日志将写入/var/log/dcv/
目录中的文件中。查看这些日志有助于排查问题。
Amazon DCV 实例类型内存
实例类型应至少有 1.7 千兆字节 (GiB) 才能RAM运行 Amazon。DCVNano 以及 micro 实例类型没有足够的内存来运行 Amazon DCV。
Ubuntu Amazon 问题 DCV
在 Ubuntu 上通过DCV会话运行 Gnome 终端时,你可能无法自动访问通过登录外壳 AWS ParallelCluster 提供的用户环境。该用户环境提供 openmpi 或 intelmpi 等环境模块以及其他用户设置。
Gnome 终端的默认设置会阻止 Shell 作为登录 Shell 启动。这意味着 shell 配置文件不会自动获取,也不会加载 AWS ParallelCluster 用户环境。
要正确获取外壳配置文件并访问 AWS ParallelCluster 用户环境,请执行以下操作之一:
-
更改默认终端设置:
-
在 Gnome 终端中选择编辑菜单。
-
选择首选项,然后选择配置文件。
-
选择命令,然后选择作为登录 Shell 运行命令。
-
打开新终端。
-
-
使用命令行获取可用的配置文件:
$
source /etc/profile && source $HOME/.bashrc
在采用 AWS Batch 集成的集群中排查问题
本节与具有 AWS Batch 调度程序集成的集群相关。
头节点问题
与头节点相关的设置问题可以按照与单队列集群相同的方式进行排查。有关这些问题的更多信息,请参阅排查单队列模式集群中的问题。
AWS Batch 多节点 parallel 作业提交问题
如果在 AWS Batch 用作作业调度器时提交多节点 parallel 作业时遇到问题,则应升级到 2.5.0 AWS ParallelCluster 版。如果这不可行,则可以使用以下主题中详细介绍的解决方法:Self patch a cluster used for submitting multi-node parallel jobs through AWS Batch
计算问题
AWS Batch 管理服务的扩展和计算方面。如果您遇到与计算相关的问题,请参阅 AWS Batch 故障排除文档以获取帮助。
作业失败
如果作业失败,您可以运行 awsbout
命令来检索作业输出。您也可以运行awsbstat -d
命令以获取指向 Amazon 存储的任务日志的链接 CloudWatch。
资源创建失败时排查问题
本节内容与集群资源创建失败有关。
当资源创建失败时,会 ParallelCluster 返回如下错误消息。
pcluster create -c config
my-cluster
Beginning cluster creation for cluster: my-cluster WARNING: The instance type 'p4d.24xlarge' cannot take public IPs. Please make sure that the subnet with id 'subnet-1234567890abcdef0' has the proper routing configuration to allow private IPs reaching the Internet (e.g. a NAT Gateway and a valid route table). WARNING: The instance type 'p4d.24xlarge' cannot take public IPs. Please make sure that the subnet with id 'subnet-1234567890abcdef0' has the proper routing configuration to allow private IPs reaching the Internet (e.g. a NAT Gateway and a valid route table). Info: There is a newer version 3.0.3 of AWS ParallelCluster available. Creating stack named: parallelcluster-my-cluster Status: parallelcluster-my-cluster - ROLLBACK_IN_PROGRESS Cluster creation failed. Failed events: - AWS::CloudFormation::Stack MasterServerSubstack Embedded stack arn:aws:cloudformation:region-id:123456789012:stack/parallelcluster-my-cluster-MasterServerSubstack-ABCDEFGHIJKL/a1234567-b321-c765-d432-dcba98766789 was not successfully created: The following resource(s) failed to create: [MasterServer]. - AWS::CloudFormation::Stack parallelcluster-my-cluster-MasterServerSubstack-ABCDEFGHIJKL The following resource(s) failed to create: [MasterServer]. - AWS::EC2::Instance MasterServer You have requested more vCPU capacity than your current vCPU limit of 0 allows for the instance bucket that the specified instance type belongs to. Please visit http://aws.amazon.com/contact-us/ec2-request to request an adjustment to this limit. (Service: AmazonEC2; Status Code: 400; Error Code: VcpuLimitExceeded; Request ID: a9876543-b321-c765-d432-dcba98766789; Proxy: null) }
例如,如果您看到之前的命令响应中显示的状态消息,则必须使用不会超过当前 v CPU 限制的实例类型或请求更多 v CPU 容量。
您还可以使用 CloudFormation 控制台查看有关"Cluster creation failed"
状态的信息。
从控制台查看 CloudFormation 错误消息。
-
登录 AWS Management Console 并导航到 https://console.aws.amazon.com/cloudformation
。 -
选择名为 parallelcluster-的堆栈
cluster_name
. -
选择事件选项卡。
-
通过按逻辑 ID 滚动浏览资源事件列表,查看创建失败的资源的状态。如果子任务创建失败,请向后移动,找到失败的资源事件。
-
AWS CloudFormation 错误消息示例:
2022-02-07 11:59:14 UTC-0800 MasterServerSubstack CREATE_FAILED Embedded stack arn:aws:cloudformation:region-id:123456789012:stack/parallelcluster-my-cluster-MasterServerSubstack-ABCDEFGHIJKL/a1234567-b321-c765-d432-dcba98766789 was not successfully created: The following resource(s) failed to create: [MasterServer].
解决IAM策略大小问题
要验证附加到IAM角色的托管策略的配 AWS STS 额,请参阅和配额、名称要求和字符限制。如果托管策略的大小超过配额,请将该策略拆分为两个或多个策略。如果某个角色所关联的策略数量超过了配额,请创建其他角色并在这些角色之间分配策略以满足配额。IAM
其他支持
有关已知问题的列表,请参阅 GitHubWiki