上课提交实验需要,做MPICH的安装及其实现多台主机高性能计算。实验不难,经过一天的时间终于成功实现,特记录下全过程供有需要的人参考。
一、实验目的: 1、了解建设高性能计算机集群系统的过程;
2、熟悉利用MPICH搭建高性能计算机的方法。
二、实验环境:
软件环境: MPICH版本:mpich2-1.4.1p1.tar.gz
操作系统版本:CentOS5.5
硬件环境: 三台主机
三、实验步骤:
(一) 集群网络环境介绍
1、本实验的集群网络环境包含三个节点:
一个主节点namenode,本实验的主节点为njrhero;
两个从节点datanode,本实验的从节点为njr和njrhero1。
2、各节点之间用局域网连接,相互之间可以ping通。
3、三个节点均运行在CentOS系统上,且都以root用户登录系统。
(二) SSH无密码验证配置
利用MPICH搭建并行高性能计算环境需要使用SSH协议,SSH 为建立在应用层和传输层基础上的安全协议。SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。
SSH配置成功后,namenode可以使用SSH无密钥登陆并启动datanode进程,同样,在datanode上也可以用SSH无密钥登陆到namenode,datanode之间也可以实现无密钥登陆。也可以在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收到加密数据之后再用私钥解密,并将解密数据回传给datanode,datanode确认解密数无误后,就允许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目录下生成密钥对
namenode和datanode均进入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上生成的密钥传到主机njr和njrhero1的root用户下,并重命名为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上运行程序的结果如图一所示:
在集群环境下测试,注意:本实验是将源文件cpip.c放在各台主机的/home/test文件夹下,并要求各主机都进行编译。请务必要求三台主机都有相同的路径,即test文件夹路径都一样,且内容也一样,主要包括:machinefile,cpip.c源文件。连接三台机器时运行程序的结果如图二所示:
显然,图示结果表明,本实验搭建的MPICH集群环境可以运行,但由于选作测试的程序相对来说很简单,所以在此没能体现出高性能计算机在计算上的高效性,如果采用相对复杂的计算程序,则高性能计算机集群系统的高效性将得到很好的体现。