linux ubuntu下配置MPICH2集群计算环境

        最近在帮导师做点MPI的东西,虽然耽误了一些自己看游戏开发书籍的时间,但还是收获挺多的,至少加强了敲linux命令和环境配置的能力。下面分享下今天配置MPICH2高性能集群计算环境心得,希望对初配MPI环境的童鞋有点指引。

一、说明

Linux环境中安装MPICH2集群环境需要安装以下软件:

1linuxgcc;

2linuxg++

3NFS(服务器端);

4SSH

5MPICH2

特别注意:安装MPICH2环境要用到SSH,为保证集群机的一致性,要在每台机器上建立一个相同用户名的用户,我们以“josh”为例,并且在josh目录下做相同的软件配置。 由于实验设备限制,我们用两台机器进行集群,分别是josh@joshjosh@tutu

接下来,将逐步介绍怎样安装和配置这些软件。


二、实验环境

实验中我使用的环境为:

局域网

Ubuntu

mpich2-1.2.1.tar.gz


三、安装及配置

1、安装linuxgccg++(所有机器)

直接使用apt-getinstall即可装最新的gccg++版本,用于C/C++程序的开发等。

$sudo apt-get install gcc

$sudo apt-get install g++


2、(1)配置serverjosh@josh)的网络配置(客户机上网络配置类似,只要修改ip即可)

$sudo gedit /etc/network/interfaces

在文件末尾添加如下内容:

auto eth0

iface eth0 inet static

address 192.168.13.50   #serverip地址

netmask 255.255.255.0

gateway 192.168.13.254


2)为服务器配置DNS使其可以上网:

$sudo vim /etc/resolv.conf

向文件中添加:

nameserver 202.116.32.4 #以自己实验室的DNS为例

3、为每台机器配置hosts文件(包括server

$sudo vim /etc/hosts

先注释掉如下行:

127.0.1.1     josh-Rev-1-0 #不注释掉,无法联机解析,非常重要,之后再将主机名添加到下 #面的别名中即可,所以机器都要这么做

在文件尾添加所有集群机器的ip和别名:

192.168.13.50     node0      josh-Rev-1-0 #把主机名加在这里是正确的

192.168.13.51     node1      tutu-desktop

4、可见192.168.13.50server,机器信息为josh@josh192.168.13.51为节点1(node1),机器信息为josh@tutu。接着,在两台机器上ping彼此,看连接是否通。

5、为server安装NFS网络文件系统

$sudo apt-get install nfs-kernel-server nfs-common

1)案子完成后在/usr/下建立集群共享文件夹cluster

$sudo mkdir cluster

2)将cluster文件夹的用户和用户组改为cluster:

$ll /usr/cluster

$sudo chown cluster:cluster /usr/cluster


3)配置NFSserver的文件共享信息:

$sudo vim /etc/exports

在文件尾添加如下信息:

/usr/clusternode0(rw, sync)

/usr/clusternode1(rw, sync)


6、配置SSH(每台机)


1SSH中公匙与私匙原理说明

利用MPICH搭建并行高性能计算环境需要使用SSH协议,SSH为建立在应用层和传输层基础上的安全协议。SSH是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用SSH协议可以有效防止远程管理过程中的信息泄露问题。

SSH配置成功后,namenode可以使用SSH无密钥登陆并启动datanode进程,同样,在datanode上也可以用SSH无密钥登陆到namenodedatanode之间也可以实现无密钥登陆。也可以在datanode上启动或关闭MPICH

namenode作为客户端,要实现无密钥验证,连接到服务端datanode上时,需要在namenode上生成一个密钥对,包括一个公钥和一个私钥,然后将公钥复制到datanode上。当namenode通过SSH链接datanode时,datanode就会生成一个随机数并用namenode的公钥对随机数进行加密,并发送给namenodenamenode收到加密数据之后再用私钥解密,并将解密数据回传datanodedatanode确认解密数无误后,就允许namenode进行无密钥验证链接了。这就是公钥认证过程,期间不需要用户手工输入密码。其中关键过程是将客户端namenode的公钥复制到服务端datanode上。


2)在每台机器上安装SSH

$sudo apt-get install ssh

3)在每台机(含server)上生成SSH本机秘匙对(一个公匙和一个私匙)

$ssh-keygen-t rsa #一路回车

4)查看是否生成.ssh文件:

$ls -a

5)进入.ssh目录:

$cd .ssh

6)在每台机器的.ssh目录下新建authorized_keys文件:

$touch authorized_keys

7)此时在各个节点执行:ssh节点主机名,这样系统就可以记住该用户,用户以后在自己主机上执行此命令就不再需要输入密码了;

8)将每个节点的公钥用scp命令(安全拷贝)传送到另外两个节点:

node0的拷贝给node1:

$scp -r id_rsa.pub josh@tutu:~/.ssh/publickey_joshjosh

就可以将josh@josh上生成的密钥传到节点josh@tutu用户下,并重命名为pubkey_joshjosh


同样,将node1的拷贝给node0:

$scp -r id_rsa.pub josh@josh:~/.ssh/publickey_joshtutu

就可以将josh@tutu上生成的密钥传到节点josh@josh用户下,并重命名为pubkey_joshtutu

9)在每个节点的.ssh目录下,将另外两个节点传过来的公钥文件的内容复制到本目录下的authorized_keys文件中,并将authorized_keys文件的权限改为600,次步骤非常重要是配置SSH的关键:

node0上:

$cat public_joshtutu >> authorized_keys

$cat id_rsa.pub >> authorized_keys

$chmod 600 authorized_keys

node1上:

$cat public_joshjosh >> authorized_keys

$cat id_rsa.pub >> authorized_keys

$chmod 600 authorized_keys

10)至此SSH配置完毕,二个节点可以彼此使用SSH无密码登录,测试如下:

node0上:

$ssh node1

node1上:

$ssh node0

若双方都可以实现无密码登录彼此,则SSH配置成功。


7、安装MPICH2


1)将MPICH2软件包拷到各机器的/home/josh目录下;

2)解压缩:

$tar –zxvf mpich2-1.2.1.tar.gz

3)创建安装目录:

$mkdir /opt/mpich2

4)进入解压后的软件目录中:

$cd ~/software/mpich2-1.2.1

5)设置安装目录:

$./configure –prefix=/opt/mpich2

6)编译
$make

7)安装

$make install

8ok,退出到用户目录

$cd

9)配置MPICH2环境

$sudo vim /etc/profile

在文件尾添加如下内容:

PATH=$PATH:/opt/mpich2/bin"

10)在每台机器上测试环境变量:

$which mpd

$which mpicc

$which mpiexec

$which mpirun

11)在每台机器的josh目录用户下创建MPD密码文件:

$cd~

$vim ~/.mpd.conf

在文件中添加如下内容:

MPD_SECRETWORD=myword

改变.mod.conf文件权限:

$chmod600 ~/.mpd.conf #这个权限很重要,一定要是600

12)在每台机器的josh用户目录下创建集群机器名称集合(用于启动集群时用):

$vim ~/mpd.hosts

在文件中添加如下内容:

node0

node1

至此所以配置基本完成,接着可以测试了。

8、测试

1)考虑到联机环境,测试程序的存放路径一定要相同。我将测试程序放在/home/josh/TestMPI/下,保证每台机器都这样。将MPICH2examples中的程序cpi.c拷贝到所有机器的TestMPI目录下。因为每台机器的硬件环境不同,所以待测试的源程序需要分别在自己的机器上编译。


2)源文件编译后,在每台机器上进行单机测试

$mpd& #单机启动方法

$mpiexec -n 10 ~/TestMPI/cpi #10个进程运行

$mpdallexit退出

截图如下:

linux ubuntu下配置MPICH2集群计算环境_第1张图片


3)集群运行前确保每台机都各自编译过源程序,在任一台上测试集群运行案例

$mpdboot -n 2 -f mpd.hosts #启动2台机器

$mpiexec -n 10 ~/TestMPI/cpi #10个进程运行

$mpdallexit

截图如下:

linux ubuntu下配置MPICH2集群计算环境_第2张图片


网上关于MPICH的配置页面很多,但许多博主并没把配置中重要的地方说清楚,这里给出以下两个链接页面,是我筛选后认为比较好的,我在配置实验环境中也遇到率很多问题,参考了他们的说明基本理解和解决率,谢谢!

http://www.linuxidc.com/Linux/2011-12/49313.htm

http://hi.baidu.com/coolrainbow/item/9804323fe53240f5df22214d


你可能感兴趣的:(MPI,Linux)