网络配置指南

目录

概述

在 Slurm 集群中,有很多组件需要能够相互通信。一些站点有安全要求,阻止它们在机器之间开放所有通信,因此需要能够选择性地仅开放必要的端口。本文档将介绍不同组件之间能够相互通信所需的内容。

下面是一个相当典型的集群的示意图,其中 slurmctldslurmdbd 在不同的机器上。在较小的集群中,MySQL 可以与 slurmdbd 在同一台机器上运行,但在大多数情况下,最好将其运行在专用机器上。slurmd 在计算节点上运行,客户端命令可以从您选择的机器上安装和运行。


典型配置

slurmctld 的通信

默认情况下,slurmctld 用于监听传入请求的端口是 6817。可以通过 SlurmctldPort slurm.conf 参数更改此端口。Slurmctld 在该端口上监听传入请求,并通过请求者打开的同一连接进行响应。

运行 slurmctld 的机器也需要能够建立出站连接。它需要通过默认端口 6819slurmdbd 进行通信(有关如何更改此设置的信息,请参见 slurmdbd 部分)。它还需要通过默认端口 6818 与计算节点上的 slurmd 进行通信(有关如何更改此设置的信息,请参见 slurmd 部分)。

默认情况下,slurmctld 将监听 IPv4 流量。可以通过在 slurm.conf 的 CommunicationParameters 中添加 EnableIPv6 来启用 IPv6 通信。启用 IPv6 后,您可以通过在 CommunicationParameters 中添加 DisableIPv4 来禁用 IPv4。这些设置必须在 slurmdbd.conf 和 slurm.conf 中匹配(请参见 slurmdbd 部分)。

slurmdbd 的通信

默认情况下,slurmdbd 用于监听传入请求的端口是 6819。可以通过 DbdPort slurmdbd.conf 参数更改此端口。Slurmdbd 在该端口上监听传入请求,并通过请求者打开的同一连接进行响应。

运行 slurmdbd 的机器需要能够通过默认端口 3306 访问 MySQL 或 MariaDB 服务器(该端口在数据库端是可配置的)。可以通过 StoragePort slurmdbd.conf 参数更改此端口。它还需要能够在默认情况下通过端口 6819 向 slurmctld 发起连接(有关如何更改此设置的信息,请参见 slurmctld 部分)。

默认情况下,slurmdbd 将监听 IPv4 流量。可以通过在 slurmdbd.conf 的 CommunicationParameters 中添加 EnableIPv6 来启用 IPv6 通信。启用 IPv6 后,您可以通过在 CommunicationParameters 中添加 DisableIPv4 来禁用 IPv4。这些设置必须在 slurmdbd.conf 和 slurm.conf 中匹配(请参见 slurmctld 部分)。

slurmd 的通信

默认情况下,slurmd 用于监听来自 slurmctld 的传入请求的端口是 6818。可以通过 SlurmdPort slurm.conf 参数更改此端口。

运行 srun 的机器还使用一系列端口与 slurmstepd 进行通信。默认情况下,这些端口是从临时端口范围中随机选择的,但您可以使用 SrunPortRange 指定可以选择的端口范围。这对于位于防火墙后面的登录节点是必要的。

运行 slurmd 的机器需要能够在默认情况下通过端口 6817slurmctld 建立连接(有关如何更改此设置的信息,请参见 slurmctld 部分)。

默认情况下,slurmd 通过 IPv4 进行通信。有关如何更改此设置的信息,请参见 slurmctld 部分,因为 slurm.conf 参数也会影响 slurmd 守护进程。

客户端命令的通信

大多数客户端命令默认情况下将通过端口 6817slurmctld 进行通信(有关如何更改此设置的信息,请参见 slurmctld 部分)以获取所需的信息。这包括以下命令:

salloc
sacctmgr
sbatch
sbcast
scancel
scontrol
sdiag
sinfo
sprio
squeue
sshare
sstat
strigger
sview

还有一些命令默认情况下直接与 slurmdbd 在端口 6819 进行通信(有关如何更改此设置的信息,请参见 slurmdbd 部分)。以下命令从 slurmdbd 获取信息:

sacct
sacctmgr
sreport

当用户使用 srun 启动作业时,必须从调用 srun 的机器到分配作业的节点之间建立通信路径。通信遵循以下顺序:

1a. srun 向 slurmctld 发送作业分配请求
1b. slurmctld 授予分配并返回详细信息
2a. srun 向 slurmctld 发送步骤创建请求
2b. slurmctld 以步骤凭证进行响应
3. srun 打开 I/O 的套接字
4. srun 将凭证与任务信息转发给 slurmd
5. slurmd 根据需要转发请求(按扇出)
6. slurmd 分叉/执行 slurmstepd
7. slurmstepd 连接 I/O 并启动任务
8. 在任务终止时,slurmstepd 通知 srun
9. srun 通知 slurmctld 作业终止
10. slurmctld 通过 slurmd 验证所有进程的终止并释放下一个作业的资源

srun 通信

多个控制器的通信

您可以配置一个备用的 slurmctld 和/或 slurmdbd 作为后备,以防主控器出现故障。所涉及的端口不会改变,但需要考虑额外的通信路径。客户端命令需要能够访问运行 slurmctld 的两台机器以及运行 slurmdbd 的两台机器。两个 slurmctld 实例需要能够访问两个 slurmdbd 实例,每个 slurmdbd 需要能够访问 MySQL 服务器。


备用 slurmctld 和 slurmdbd

与多个集群的通信

在多个 slurmctld 实例共享同一个 slurmdbd 的环境中,您可以配置每个集群独立运行,并允许用户指定要提交作业的集群。不同守护进程使用的端口不会改变,但所有 slurmctld 实例需要能够与同一个 slurmdbd 实例进行通信。有关多集群配置的更多信息,请参见 多集群操作 文档。


多集群配置

在联合体中的通信

Slurm 还提供在多个集群之间以对等方式调度作业的能力,允许作业首先在具有可用资源的集群上运行。这与多集群配置之间的通信需求的不同之处在于,两个 slurmctld 实例需要能够相互通信。有关使用 联合体 的更多详细信息,请参见文档。


联合体配置

与 IPv6 的通信

slurmctldslurmdbdslurmd 守护进程默认情况下将使用 IPv4 进行通信,但可以配置为使用 IPv6。这可以通过在 slurm.conf 和 slurmdbd.conf 中设置 CommunicationParameters=EnableIPv6 来处理,然后重启所有守护进程。在此模式下,slurmd 可以通过 IPv4 或 IPv6 进行操作。可以通过设置 CommunicationParameters=EnableIPv6,DisableIPv4 来禁用 IPv4。在此模式下,所有内容必须具有有效的 IPv6 地址,否则连接将失败。

slurmctld 期望一个节点映射到一个单一的 IP 地址(这是在使用 getaddrinfo() 查找节点的 IP 时返回的第一个地址)。如果您在现有集群上启用 IPv6 并且节点具有 IPv6 地址,则必须重启 slurmd 守护进程以建立通过 IPv6 的通信。

/etc/gai.conf 中存在 precedence ::ffff:0:0/96 100 将导致在返回 IPv6 地址之前返回 IPv4 地址。这可能导致您已为 Slurm 启用 IPv6,但仍然看到节点通过 IPv4 进行通信。如果对使用哪个地址存在混淆,您可以调用 scontrol setdebugflags +NET 在您的 slurmctld.log 中启用与网络相关的调试日志记录。

如果同时启用了 IPv4 和 IPv6,回环接口仍可能解析为 127.0.0.1。这不一定表示存在问题。

最后修改于 2020 年 11 月 25 日