如何在 Centos 7 中使用 firewalld 启用 MPI mpirun

Posted

技术标签:

【中文标题】如何在 Centos 7 中使用 firewalld 启用 MPI mpirun【英文标题】:how to enable MPI mpirun using firewalld in Centos 7 【发布时间】:2015-12-18 16:00:00 【问题描述】:

我正在尝试让 MPI 在 Centos 7 操作系统上的小型集群上运行。防火墙阻止它运行。这是我得到的错误:

    $ mpirun -np 30 -hostfile hosts.txt mpi_sample_program/mpitest
    ------------------------------------------------------------
    A process or daemon was unable to complete a TCP connection
to another process:
  Local host:    marcher5
  Remote host:   ***.***.***.***.***
This is usually caused by a firewall on the remote host. Please
check that any firewall (e.g., iptables) has been disabled and
try again.
------------------------------------------------------------
--------------------------------------------------------------------------
ORTE was unable to reliably start one or more daemons.
This usually is caused by:

* not finding the required libraries and/or binaries on
  one or more nodes. Please check your PATH and LD_LIBRARY_PATH
  settings, or configure OMPI with --enable-orterun-prefix-by-default

* lack of authority to execute on one or more specified nodes.
  Please verify your allocation and authorities.

* the inability to write startup files into /tmp (--tmpdir/orte_tmpdir_base).
  Please check with your sys admin to determine the correct location to use.

*  compilation of the orted with dynamic libraries when static are required
  (e.g., on Cray). Please check your configure cmd line and consider using
  one of the contrib/platform definitions for your system type.

* an inability to create a connection back to mpirun due to a
  lack of common network interfaces and/or no route found between
  them. Please check network connectivity (including firewalls
  and network routing requirements).
--------------------------------------------------------------------------

当我使用 sudo systemctl disable firewalld 禁用防火墙时,MPI 工作正常。 我一直在尝试添加一个规则,允许 MPI 在不关闭防火墙的情况下运行,但它还没有工作。 我能够使用 sudo iptables -A INPUT -s -j ACCEPT 来做到这一点并且它有效。但是现在由于 Centos 7,我必须使用 firewall-cmd。 您建议我在不损害集群安全性的情况下做什么。我应该添加一条规则以允许我的节点之间的所有流量吗?

我当前的 firewall-cmd 配置是:

$ firewall-cmd --list-all
work (default, active)
  interfaces: eno1
  sources:
  services: dhcpv6-client ipp-client ssh
  ports:
  masquerade: no
  forward-ports:
  icmp-blocks:
  rich rules:

【问题讨论】:

【参考方案1】:

我尝试使用这个添加源:

sudo firewall-cmd --permanent --zone=work --add-source=[host_IP]

但仍然无法使 MPI 应用程序正确运行。 然后决定在这个集群上启用 MPI 的唯一方法是制定一个规则来接受节点之间的所有流量。 我运行了这两个命令。

sudo firewall-cmd --permanent --direct --add-rule ipv4 filter INPUT 0 -s  [server+IP] -j ACCEPT

firewall-cmd --reload

它就像一个魅力。但不确定这是否是安全方面的最佳解决方案。

【讨论】:

IDK 如果它是唯一/最好的解决方案,但我能说的是,通常,在集群上,内部网络不对外部开放,因此,因为唯一的访问点集群是通过登录或服务节点,这些是您必须管理访问和水密安全的节点 好的,但是如果一个普通用户进入主节点并尝试 ssh 到从节点怎么办?鉴于他在从节点上没有帐户,也不知道他们的 IP。这是一种可能的威胁吗? 普通用户在节点上应该有一个帐户,对吧?我认为这与serverfault.com/q/609148 更相关。有些方面降低所有限制,只在批处理作业启动时增加限制,这样节点上没有批处理分配的用户就无法使用它。否则:使用错误帐户通过 SSH 连接到节点可能会降低您的网络速度,但不应危及该节点。不知道 IP 是不可依赖的。如果他真的想的话,你的主节点上的某个人很可能会找出节点 IP。 您可能也会感兴趣:lists.sdsc.edu/pipermail/npaci-rocks-discussion/2014-April/…

以上是关于如何在 Centos 7 中使用 firewalld 启用 MPI mpirun的主要内容,如果未能解决你的问题,请参考以下文章

CentOS 7 中firewall-cmd命令

CentOS 7通过Firewall开放防火墙端口

CentOS 7 firewall-cmd 端口转发

centos 7中如何用 yum 安装 firewall-cmd 和 systemctl 命令? 我用minimal安装后找不到这两个命令了。

centos7_firewall

如何在CentOS 7下开放8080端口