4. 设置 Head 节点

现在让我们开始“wolfing(狼化)”。选择性能最强的机器作为 head 节点。在上面安装 Linux,并选择你想要的所有软件包。唯一的要求是你需要选择“网络服务器”[Red Hat 术语],因为你需要 NFS 和 ssh。这就是你所需要的全部。就我而言,我打算开发 Beowulf 应用程序,所以我添加了 X 和 C 开发工具。

我的经验是,实际上你并不一定需要 NFS,但我发现它对于在节点之间复制文件以及自动化安装过程非常宝贵。在本文档的后面,我将描述如何在不使用 NFS 的情况下运行一个简单的 Beowulf 应用程序,但是更复杂的应用程序可能会使用 NFS 或实际上依赖于它。

那些研究 Beowulf 系统的人也会知道,你可以在 head 节点上安装第二块网卡,以便你可以从外部世界访问它。这不是集群运行所必需的。

我付出了惨痛的教训才明白:为你的 Linux 发行版使用符合强密码约束的密码。我曾经为我的用户使用了一个容易输入的密码,比如“a”,结果整个系统都无法工作。当我将我的密码更改为一个合法的密码,包含混合数字、字符、大小写字母时,它就工作了。

如果你使用 lam 作为你的消息传递接口,你会在手册中读到要关闭防火墙,因为它们使用随机端口号在节点之间进行通信。这里有一个规则:如果手册告诉你做什么,那就去做!lam 手册还告诉你以非 root 用户身份运行。为每台机器创建相同的用户。在集群中的每台机器上使用相同的用户和密码进行构建。我将那个非 root 用户命名为“wolf”。

4.1. Hosts

首先我们修改 /etc/hosts 文件。在其中,你会看到注释告诉你不要动“localhost”行。忽略那个建议,并更改它,使其在环回地址中不包含你的机器名称。

修改这行字

127.0.0.1 wolf00 localhost.localdomain localhost

...现在改为

127.0.0.1 localhost.localdomain localhost 

然后添加你想要在集群上的所有机器。注意:这不是 Beowulf 集群运行所必需的;只是为了方便,这样你在引用集群上的机器时可以输入简单的“wolf01”,而不是更繁琐的 192.168.0.101。

192.168.0.100 wolf00
192.168.0.101 wolf01
192.168.0.102 wolf02
192.168.0.103 wolf03
192.168.0.104 wolf04

4.2. Groups

为了负责任地设置你的集群,特别是如果你是你的机器的“用户”[参见定义],你应该有一些安全措施。

在你创建用户之后,创建一个组,并将用户添加到该组。然后,你可以修改你的文件和目录,使其只能由该组内的用户访问。

groupadd beowulf 
usermod -g beowulf wolf 

...并将以下内容添加到 /home/wolf/.bash_profile

umask 007

现在,用户“wolf”[或组内任何用户]创建的任何文件都将自动仅对组“beowulf”可写。

4.3. NFS

请参考以下网站:http://www.ibiblio.org/mdw/HOWTO/NFS-HOWTO/server.html

打印出来,并放在你的旁边。我将指导你如何修改你的系统以创建一个 NFS 服务器,但我发现这个网站非常宝贵,你可能也会这样认为。

创建一个目录供大家共享

mkdir /mnt/wolf 
chmod 770 /mnt/wolf 
chown wolf:beowulf /mnt/wolf -R 

转到 /etc 目录,并将你的“shared”目录添加到 exports 文件中

cd /etc 
cat >> exports 
/mnt/wolf 192.168.0.100/192.168.0.255 (rw) 
<control d>

4.4. IP 地址

我的网络是 192.168.0.nnn,因为它是“私有”IP 范围之一。Thomas Sterling 在他的书的第 106 页谈到了它。它在我的防火墙内部,并且工作正常。

我的 head 节点,我称之为“wolf00”,IP 地址是 192.168.0.100,而每个其他节点都命名为“wolfnn”,IP 地址为 192.168.0.100 + nn。我遵循了许多网页上的明智建议,为自己设置了一个更容易扩展集群的任务。

4.5. 服务

确保我们需要的服务已启动

chkconfig -add sshd 
chkconfig -add nfs 
chkconfig -add rexec 
chkconfig -add rlogin 
chkconfig -level 3 rsh on 
chkconfig -level 3 nfs on 
chkconfig -level 3 rexec on 
chkconfig -level 3 rlogin on

...并且,在启动期间,我看到了一些我知道我不需要的服务,而且在我看来,可以删除它们。你可以根据你的需要添加或删除其他服务;只需包含上面显示的那些。

chkconfig -del atd 
chkconfig -del rsh
chkconfig -del sendmail

4.6. SSH

为了负责任,我们让 ssh 工作起来。以 root 用户身份登录后,你必须修改 /etc/ssh/sshd_config 文件。以下几行

#RSAAuthentication yes 
#AuthorizedKeysFile .ssh/authorized_keys

...被注释掉了,所以取消注释它们[删除 #]。

重启,并以 wolf 用户身份重新登录,因为你的集群的操作将始终从用户“wolf”完成。此外,之前完成的 hosts 文件修改必须生效。注销并重新登录不会做到这一点。为了确保万无一失,重启机器,并确保你的提示符显示主机名“wolf00”。

要生成你的公钥和私钥,请执行以下操作

ssh-keygen -b 1024 -f ~/.ssh/id_rsa -t rsa -N "" 

...它将显示一些消息,并告诉你它创建了公钥/私钥对。你将在 /home/wolf/.ssh 目录中看到这些文件,id_rsa 和 id_rsa.pub。

将 id_rsa.pub 文件复制到一个名为“authorized_keys”的文件中,就在 .ssh 目录中。我们稍后将使用这个文件。验证此文件的内容是否显示主机名[我们重启机器的原因]。修改文件和目录的安全性

chmod 644 ~/.ssh/auth* 
chmod 755 ~/.ssh 

根据 LAM 用户组的说法,只有 head 节点需要登录到 slave 节点;反之则不然。因此,当我们复制公钥文件时,我们只将 head 节点的密钥文件复制到每个 slave 节点,并在 head 节点上设置代理。这比将所有 authorized_keys 文件复制到所有节点要容易得多。我将在后面更详细地描述这一点。

注意:我只记录了消息传递接口的 LAM 发行版的要求;如果你选择另一个消息传递接口来构建你的集群,你的要求可能会有所不同。

在 /home/wolf/.bash_profile 的末尾,添加以下语句[同样,这是 lam 特有的;你的要求可能会有所不同]

export LAMRSH='ssh -x' 
ssh-agent sh -c 'ssh-add && bash'

4.7. MPI

最后,将你的消息传递接口放在机器上。正如 1.2 节“要求”中所述,我使用了 lam。你可以从这里获取 lam

http://www.lam-mpi.org/

...但是你可以使用任何其他消息传递接口或并行虚拟机软件。再次强调,我只是向你展示对我有效的方法。

你可以从提供的源代码构建 LAM,也可以使用他们预编译的 RPM 包。描述这一点不在本文档的范围之内;我只是获取了源代码并按照说明进行操作,在另一个实验中,我安装了他们的 rpm。它们都工作正常。记住我们做这一切的全部原因是为了学习;前进并学习吧。

你也可以在这里阅读更多关于 LAM 和其他消息传递接口软件的文档 here.