對擴展問題進行故障診斷 - AWS ParallelCluster

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

對擴展問題進行故障診斷

本節與使用 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 --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

AWS ParallelCluster 在 CloudWatch 日誌群組中建立叢集日誌串流。您可以在 CloudWatch 主控台自訂儀表板或日誌群組 中檢視這些日誌。如需詳細資訊,請參閱 與 Amazon CloudWatch Logs 整合Amazon 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 control daemon log. AWS ParallelCluster doesn 不會做出擴展決策。相反地,它只會嘗試啟動資源來滿足 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錯誤。

對於靜態執行個體容量,您可以在 的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日誌中顯示錯誤訊息。如果在叢集組態中指定預先安裝或安裝後指令碼,請檢查它們是否已成功執行。

  • 如果您使用自訂AMI,並修改 Slurm 組態,則可能會有 Slurm相關錯誤,導致運算節點無法加入叢集。如需排程器相關錯誤,請檢查/var/log/slurmd.log日誌。

動態運算節點:

  • 搜尋運算節點名稱的ResumeProgram日誌 (/var/log/parallelcluster/slurm_resume.log),以查看是否ResumeProgram曾經使用節點呼叫 。(如果ResumeProgram從未呼叫 ,您可以檢查slurmctld日誌 (/var/log/slurmctld.log) 以確定是否 Slurm 曾經嘗試ResumeProgram使用節點呼叫 )。

  • 請注意,不正確的 許可ResumeProgram可能會導致 靜音ResumeProgram失敗。如果您使用自訂AMI並修改ResumeProgram設定,請檢查 ResumeProgram 是否屬於slurm使用者,並具有 744rwxr--r--) 許可。

  • 如果 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 Amazon EC2 Spot Instances.

    使用 Spot 執行個體時,AWSServiceRoleForEC2Spot服務連結角色必須存在於您的帳戶中。若要使用 在帳戶中建立此角色 AWS CLI,請執行下列命令:

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

    如需詳細資訊,請參閱 Amazon AWS ParallelCluster 使用者指南 使用 競價型執行個體 中的 Spot 執行個體請求使用者指南和服務連結角色 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,更具體地說是位置終止。如果 clustermgtd 被判定為運作狀態不佳,computemgtd則在運算節點上執行的 也可以終止節點。檢查computemgtd日誌 (/var/log/parallelcluster/computemgtd) 以查看節點是否computemgtd終止。

節點失敗

  • 簽入slurmctld日誌 (/var/log/slurmctld.log) 以查看任務或節點失敗的原因。請注意,如果節點失敗,任務會自動重新排入佇列。

  • 如果slurm_resume報告啟動節點,並在幾分鐘後clustermgtd報告EC2該節點的 Amazon 中沒有對應的執行個體,則節點可能會在設定期間失敗。若要從運算 (/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日誌,查看 SuspendProgram 是否slurmctld以特定節點作為引數呼叫 。請注意, 實際上SuspendProgram不會執行任何動作。相反地,它只會在呼叫時記錄。所有執行個體終止和NodeAddr重設都由 完成clustermgtd。Slurm SuspendTimeout 會自動將節點置於 之後POWER_SAVING的狀態。

  • 如果運算節點因開機失敗而持續失敗,請確認是否在Slurm叢集保護模式啟用的情況下啟動。如果未啟用受保護模式,請修改受保護模式設定以啟用受保護模式。對引導指令碼進行疑難排解和修正。

佇列 (分割區) Inactive 狀態

如果您執行 sinfo且輸出顯示AVAIL狀態為 的佇列inact,則叢集可能Slurm叢集保護模式已啟用,且佇列已設定為預先定義時段INACTIVE的狀態。

對其他已知節點和任務問題進行故障診斷

另一種已知問題類型是 AWS ParallelCluster 可能無法配置任務或做出擴展決策。對於此類問題, AWS ParallelCluster 僅根據 啟動、終止或維護資源 Slurm 指示。針對這些問題,請檢查slurmctld日誌進行故障診斷。