主机系统:rhel6.0 (数量不限)
desktop99.example.com
desktop80.example.com
系统环境:selinux and iptables disabled, installed gcc gcc-c++ gcc-gfortran
步骤(1):
在各个集群节点之间建立ssh信任连接
倘若在主节点desktop99.example.com和非主节点desktop80.example.com上:
useradd -u 600 sushan
passwd sushan

设置密码:假设为:redhat
su - sushan(一定要注意的是在产生sshkey的时候一定要以sushan这个普通的用户去产生,而且互相之间也要传
主节点desktop99.example.com:
ssh-keygen 一路回车即可
cd ~/.ssh
cp -p id_rsa.pub authorized_keys
(与自己信任连接)
(或者是
ssh-copy-id -i ~/.ssh/id_rsa.pub desktop99.example.com(与自己信任连接)
)
此时在 ~/.ssh 下面有:
ls
authorized_keys id_rsa id_rsa.pub这三个文件。
ssh-copy-id -i ~/.ssh/id_rsa.pub desktop80.example.com(与其他节点信任连接,第一次要输入密码的哦!注意在2台机子上都要互相执行哦!)
此时[sushan@desktop99 .ssh]$ cat known_hosts
你就可以看到 desktop99.example.com和desktop80.example.com被加进来了。
(2)在主节点上:
vi /etc/exports
/home/sushan *(rw,anonuid=600,anongid=600)

在主节点上:
/etc/init.d/nfs reload/etc/init.d/rpcbind restart有时候是自己起来的,有时候你需要手工启动呢!)
exportfs -v
/etc/init.d/sshd reload
(3)在另一个节点上desktop80.example.com:
yum install showmount* -y
mount 192.168.0.4:/home/sushan/ /home/sushan

(如果挂不上的话有可能是你的防火墙或者是selinux没有关闭。)
挂成功之后:df -h显示你挂载成功。
ll -a
total 8481
drwxr-xr-x 2 4294967294 4294967294 4096 Dec 17 22:02 .lftp
drwx------ 2 4294967294 4294967294 4096 Dec 17 22:44 .ssh
-rw------- 1 4294967294 4294967294 983 Dec 17 22:38 .viminfo
如果为类似以上的东西,说明同步的时候没有完全同步,因为按理说应该用户和用户组都是sushan的,而现在是那些不知道是什么的数字,所以你需要将此节点的主机进行重启
(4)成功之后测试:
主节点上:
desktop99.example.com:
ssh desktop99.example.com
ssh desktop80.example.com

均不用输入密码。

同样的,在另一个节点上desktop80.example.com::
ssh desktop80.example.com
ssh desktop99.example.com

均不用输入密码。
要想开机的时候自动挂载的话,那么你需要写: vi /etc/fstab
192.168.0.99:/home/sushan /home/sushan nfs defaults 0 0

(5)在每个节点上desktop99.example.com和desktop80.example.com:
yum install mpich2.x86_64 -y
(6)在主节点desktop99.example.com上:
su - sushan
vi .mpd.conf
secretword=westos
chmod 600 .mpd.conf

在另一个节点desktop80.example.com上:
ll -a 也可以看到,因为挂在上了,自然会同步的。
(7)在主节点desktop99.example.com上:
cd ~
vi mpd.hosts
desktop99.example.com
desktop80.example.com

注:如果以root用户启动mpd服务, 把mpd.conf文件创建在/etc目录中(不加"."),
mpd.hosts放在root主目录中
(8) 测试:lftp 192.168.0.254
cd pub/docs/mpich
get icpi-64(64位的)
chmod +x icpi-64
(测试运行MPICH的圆周率的程序在软件的安装包里有圆周率计算的原代码icpi.c,先编译成可执行文件,此时我用的是已经编译好的可执行文件,就是计算圆周率的,可以设置精确度的!)
在主节点上:
启动 mpich2:mpd(mpd直接就是一条命令啦!)
ctrl+Z
bg(打到后台,或者以上三步合为mpd &)

jobs可以查看你的任务。

mpdtrance(观看启动的机器)
输出: desktop99.example.com

退出:
mpdallexit
此时你在用:
mpdtrance就看不到了。。。。,出现类似以下:

mpich2 hpc集群_第1张图片

(9)运行集群系统:
mpdboot -n 2 -f mpd.hosts
参数-n 2指定了要起动的机器个数,-f mpd.hosts指定了通过mpd.hosts运行,-n的个数一定要<=mpd.hosts里面指定的个数)
mpiexec -n 2 /home/sushan/icpi-64
(这里的icpi-64是已经编译好的。)

mpich2 hpc集群_第2张图片

mpdallexit(退出)
单用户的时候对比:(mpiexec -n 1 /home/sushan/icpi-64

mpich2 hpc集群_第3张图片


(以上操作要以用户sushan执行的哦!由上述测试的结果可以看出使用单机单进程运行,intervals设为1000,此时由于数字比较小,一台机子运算比2台机子运算时间要少一些,因为数字小花费的时间主要放在两台自己的连接上,当数字为1000000时,此时的数字比较大的,而用两台机器双进程明显用时比单机进程的时间少,并行运算还是很有效果的。这是因为并行运算过程中,参与运算的机器需要通过网络传递一些消息,如果计算量不大的话,花在了这上面的时间影响会比较明显,因而反不如单机版的来得快)