上课提交实验需要,做MPICH的安装及其实现多台主机高性能计算。实验不难,经过一天的时间终于成功实现,特记录下全过程供有需要的人参考。

一、实验目的: 1、了解建设高性能计算机集群系统的过程;

                            2、熟悉利用MPICH搭建高性能计算机的方法。

二、实验环境:

   软件环境: MPICH版本:mpich2-1.4.1p1.tar.gz

    操作系统版本:CentOS5.5

    硬件环境: 三台主机

三、实验步骤:

(一) 集群网络环境介绍

1、本实验的集群网络环境包含三个节点:

一个主节点namenode,本实验的主节点为njrhero

两个从节点datanode,本实验的从节点为njrnjrhero1

2、各节点之间用局域网连接,相互之间可以ping通。

3、三个节点均运行在CentOS系统上,且都以root用户登录系统。

(二) SSH无密码验证配置

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

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

注意:CentOS5.5 在安装完毕后,默认启动sshd服务,可以在“系统”->“管理”->“服务”中查看sshd服务是否启动。如果系统中没有安装sshd服务,则执行命令sudo yum install ssh来安装,还要安装远程数据同步工具rsync,可通过LAN/WAN快速同步多台主机间的文件,执行命令sudo yum install rsync即可。

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

SSH的配置过程如下:

1、 安装和启动SSH

在三台机器上均执行以下命令:

#sudo yum install ssh (若已经安装可省略此步骤)

#sudo yum install rsync

#ssh sudo /etc/init.d/ssh restart 启动服务(也可重启虚拟机)

2、在三台机器的/etc/hosts文件中添加所有节点名和相应的IP 地址,添加内容如下:

59.64.139.63  njrhero

59.64.138.38  njr

59.64.138.160 njrhero1

3、配置各节点的无密钥验证登陆

为实现集群网络环境中的各节点都可作为namenode节点,本实验在三台机器上均做了相同的namenode配置。

1)在root目录下生成密钥对

namenodedatanode均进入root目录下执行以下命令,每个节点都会生成一个.ssh目录,

root@njrhero ~#ssh-keygen –t rsa

回车将出现以下代码,

Generating public/private rsa key pair.

Enter file in which to save the key (root/.ssh/id_rsa):

一路回车就可以了。产生密钥成功后将出现:

Your identification has been saved in root/.ssh/id_rsa.

Your public key has been saved in root/.ssh/id_rsa.pub.

进入到.ssh目录

root@njrhero .ssh#ls –al

可以看到以下三个文件(分别代表私钥,公钥,已知主机)

id-rsa  id_rsa.pub  known_hosts

2)在每个节点的.ssh目录下新建authorized_keys文件:

root@njrhero .ssh#touch authorized_keys

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

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

    主机njrhero执行如下命令:

root@njrhero .ssh# scp –r id_rsa.pub root@njr:~/.ssh/pubkey_njrhero

root@njrhero .ssh# scp –r id_rsa.pub root@njrhero1:~/.ssh/pubkey_njrhero

这样,就可以将njrhero上生成的密钥传到主机njrnjrhero1root用户下,并重命名为pubkey_njrhero

主机njr执行如下命令:

root@njr .ssh# scp –r id_rsa.pub root@njrhero:~/.ssh/pubkey_njr

root@njr .ssh# scp –r id_rsa.pub root@njrhero1:~/.ssh/pubkey_njr

主机njrhero1执行如下命令:

root@njrhero1 .ssh# scp –r id_rsa.pub root@njrhero:~/.ssh/pubkey_njrhero1

root@njrhero1 .ssh# scp –r id_rsa.pub root@njr:~/.ssh/pubkey_njrhero1

4)在每个节点的.ssh目录下,将另外两个节点传过来的公钥文件的内容复制到本目录下的authorized_keys文件中,并将authorized_keys文件的权限改为600
主机njrhero执行命令:

root@njrhero .ssh#cat pubkey_njr >> authorized_keys

root@njrhero .ssh#cat pubkey_yenjrhero1 >> authorized_keys

root@njrhero .ssh#cat id_rsa.pub >> authorized_keys

 (注意:此步很重要,方便主机可以无密钥登陆本主机)

root@njrhero .ssh#chmod 600 authorize_keys

主机njr执行命令:

root@njr .ssh# cat pubkey_njrhero >> authorized_keys

root@njr .ssh# cat pubkey_yenjrhero1 >> authorized_keys

root@njr .ssh# cat id_rsa.pub >> authorized_keys 

root@njr .ssh# chmod 600 authorize_keys

主机njrhero1执行命令:

root@njrhero1 .ssh#cat pubkey_njrhero >> authorized_keys

root@njrhero1 .ssh#cat pubkey_njr >> authorized_keys

root@njrhero1 .ssh#cat id_rsa.pub >> authorized_keys 

root@njrhero1 .ssh#chmod 600 authorize_keys

至此,SSH配置完毕,三个节点可以使用SSH无密钥相互访问。

在主机njrhero上执行如下命令进行测试:
【root@njrhero .ssh】#ssh njr

root@njrhero .ssh#ssh njrhero1

若可以成功登陆到njr、njrhero1两台主机上,则证明SSH无密钥成功配置。

三) 安装MPICH2

在每台机器上安装MPICH2软件。

1、解压缩软件包

#tar –zxvf mpich2-1.4.1p1.tar.gz

2、创建安装目录

#mkdir /usr/MPICH -install

3、进入mpich2解压目录

#cd mpich2-1.4.1p1

4、设置安装目录

#./configure –prefix=/usr/MPICH-install

5、编译

#make

6、安装

#make install

7、退出到root目录

#cd ..

8、通过编辑.bashrc文件修改环境变量

#vi .bashrc

修改后的.bashrc文件如下:

# .bashrc

# User specific aliases and functions

  PATH="$PATH:/usr/MPICH-install/bin"

执行.bashrc文件使设置生效:

#source  .bashrc

9、测试环境变量设置

#which mpicc

#which mpiexec

#which mpirun

10、创建主机名称集合文件(用于启动集群时用)

#vi machinefile

内容为:

njrhero

njr

njrhero1

(四) 测试

本实验选用MPICH压缩包中自带的程序:cpip.c来对集群环境进行测试。先在njr主机的/home/test文件夹下对cpi.c源文件进行编译:

[root@njr test]#mpicc cpip.c -o cpip

执行完后可以生成cpip可执行文件。

在不采用集群环境的情况下,只在机器njr上运行程序的结果如图一所示:

 

MPICH2的linux下安装及其实现多台主机高性能计算_集群

在集群环境下测试,注意:本实验是将源文件cpip.c放在各台主机的/home/test文件夹下,并要求各主机都进行编译。请务必要求三台主机都有相同的路径,即test文件夹路径都一样,且内容也一样,主要包括:machinefile,cpip.c源文件。连接三台机器时运行程序的结果如图二所示:

MPICH2的linux下安装及其实现多台主机高性能计算_职场_02

显然,图示结果表明,本实验搭建的MPICH集群环境可以运行,但由于选作测试的程序相对来说很简单,所以在此没能体现出高性能计算机在计算上的高效性,如果采用相对复杂的计算程序,则高性能计算机集群系统的高效性将得到很好的体现。