网络配置指南
目录
概述
在 Slurm 集群中,有很多组件需要能够相互通信。一些站点有安全要求,阻止它们在机器之间开放所有通信,因此需要能够选择性地仅开放必要的端口。本文档将介绍不同组件之间能够相互通信所需的内容。
下面是一个相当典型的集群的示意图,其中 slurmctld 和 slurmdbd 在不同的机器上。在较小的集群中,MySQL 可以与 slurmdbd 在同一台机器上运行,但在大多数情况下,最好将其运行在专用机器上。slurmd 在计算节点上运行,客户端命令可以从您选择的机器上安装和运行。

典型配置
slurmctld 的通信
默认情况下,slurmctld 用于监听传入请求的端口是 6817。可以通过 SlurmctldPort slurm.conf 参数更改此端口。Slurmctld 在该端口上监听传入请求,并通过请求者打开的同一连接进行响应。
运行 slurmctld 的机器也需要能够建立出站连接。它需要通过默认端口 6819 与 slurmdbd 进行通信(有关如何更改此设置的信息,请参见 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 的机器需要能够在默认情况下通过端口 6817 与 slurmctld 建立连接(有关如何更改此设置的信息,请参见 slurmctld 部分)。
默认情况下,slurmd 通过 IPv4 进行通信。有关如何更改此设置的信息,请参见 slurmctld 部分,因为 slurm.conf 参数也会影响 slurmd 守护进程。
客户端命令的通信
大多数客户端命令默认情况下将通过端口 6817 与 slurmctld 进行通信(有关如何更改此设置的信息,请参见 slurmctld 部分)以获取所需的信息。这包括以下命令:
- salloc
- sacctmgr
- sbatch
- sbcast
- scancel
- scontrol
- sdiag
- sinfo
- sprio
- squeue
- sshare
- sstat
- strigger
- sview
- sacctmgr
还有一些命令默认情况下直接与 slurmdbd 在端口 6819 进行通信(有关如何更改此设置的信息,请参见 slurmdbd 部分)。以下命令从 slurmdbd 获取信息:
- sacct
- sacctmgr
- sreport
- sacctmgr
当用户使用 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 验证所有进程的终止并释放下一个作业的资源
- 1b. slurmctld 授予分配并返回详细信息

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

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

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

联合体配置
与 IPv6 的通信
slurmctld、slurmdbd 和 slurmd 守护进程默认情况下将使用 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 日