提交实验需要,做MPICH的安装及其实现多台主机高性能计算。实验不难,经过一天的时间终于成功实现,特记录下全过程供有需要的人参考。
一、实验目的: 1、了解建设高性能计算机集群系统的过程;
2、熟悉利用MPICH搭建高性能计算机的方法。
二、实验环境:
软件环境: MPICH版本:mpich2-1.4.1p1.tar.gz
操作系统版本:CentOS 5.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@ ~】#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@ .ssh】#ls –al
可以看到以下三个文件(分别代表私钥,公钥,已知主机):
id-rsa id_rsa.pub known_hosts
2)在每个节点的.ssh目录下新建authorized_keys文件:
【root@ .ssh】#touch authorized_keys
注意:此时在各个节点执行:ssh 节点主机名,这样系统就可以记住该用户,用户以后在自己主机上执行此命令就不再需要输入密码了。
3)将每个节点的公钥用scp命令(安全拷贝)传送到另外两个节点:
主机njrhero执行如下命令:
【root@ .ssh】# scp –r id_rsa.pub root@njr:~/.ssh/pubkey_njrhero
【root@ .ssh】# scp –r id_rsa.pub root@:~/.ssh/pubkey_njrhero
这样,就可以将njrhero上生成的密钥传到主机njr和njrhero1的root用户下,并重命名为pubkey_njrhero。
主机njr执行如下命令:
【root@njr .ssh】# scp –r id_rsa.pub root@:~/.ssh/pubkey_njr
【root@njr .ssh】# scp –r id_rsa.pub root@:~/.ssh/pubkey_njr
主机njrhero1执行如下命令:
【root@ .ssh】# scp –r id_rsa.pub root@:~/.ssh/pubkey_njrhero1
【root@ .ssh】# scp –r id_rsa.pub root@njr:~/.ssh/pubkey_njrhero1
4)在每个节点的.ssh目录下,将另外两个节点传过来的公钥文件的内容复制到本目录下的authorized_keys文件中,并将authorized_keys文件的权限改为600。
主机njrhero执行命令:
【root@ .ssh】#cat pubkey_njr >> authorized_keys
【root@ .ssh】#cat pubkey_yenjrhero1 >> authorized_keys
【root@ .ssh】#cat id_rsa.pub >> authorized_keys
(注意:此步很重要,方便主机可以无密钥登陆本主机)
【root@ .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@ .ssh】#cat pubkey_njrhero >> authorized_keys
【root@ .ssh】#cat pubkey_njr >> authorized_keys
【root@ .ssh】#cat id_rsa.pub >> authorized_keys
【root@ .ssh】#chmod 600 authorize_keys
至此,SSH配置完毕,三个节点可以使用SSH无密钥相互访问。
在主机njrhero上执行如下命令进行测试:
【root@ .ssh】#ssh njr
【root@ .ssh】#ssh njrhero1