1. 在/etc/sysconfig/network-scripts/ifcfg-eth0文件下,可以配置eth0网卡的参数
IPADDR=IP地址
NETMASK=子网掩码
NETWORK=所在局域网
BROADCAST=广播地址
BOOTPROTO=获取地址方式(static——静态IP,dhcp——动态IP)
2. 配置NFS基本步骤
1)编写/etc/exports文件
[要共享的目录] [可访问的主机名或IP地址或通配符组合] (rw|ro)
....
....
这个文件更详细的格式说明在http://blog.chinaunix.net/u/26040/showart_285389.html
试过填了 192.168.1.*(rw),但无法访问,错误信息是permission denied. 可能由于括号跟星号连在一起,改成主机名后就无问题了。
2)启动portmap服务和nfs服务
service portmap restart
service nfs restart
3) 注意防火墙,目前除了关闭或者信任网卡之外,还不知道怎么配置防火墙才能成功配置NFS,可以ping的情况下如果出现no route to host的错误信息,就是防火墙有 问题。
4) 客户端使用mount命令挂载NFS公开的目录,试过不需要在客户端的fstab文件中加入被公开目录的信息,一样可以成功挂载(客户端使用df命令一样可以检测到被挂载 的目录)。
3. 在/etc/hosts文件中修改网络主机名称解析
可以写成:
[IP] [主机名]
也可以写成:
[IP] [域名] [主机名]
还不知道两者区别,但可以正常使用
4. 无密码登录的RSH配置
预备工作
a) 检查被登录主机上是否已经安装rsh及rsh-server,使用命令 rpm -aq | grep ^rsh* 即可(针对CentOS)。没有装的话yum install一下。
b) 安装后,去到/etc/xinetd.d/下编辑rlogin,rsh,rexec文件,把里面原来的disable = yes 改成 disable = no。
c) 执行命令/etc/init.d/xinetd restart
hosts.equiv文件方式:
在被登录主机上的/etc/目录下创建hosts.equiv文件,按每行
[主机名H] [用户名U]
的格式配置,设置后就允许远程主机H上的U用户无密码登录到本机,当然在/etc/hosts文件里面应该要有H对应的IP解析设置。
用户名是可选的,不设置的话该主机H上所有普通用户都能无密码登录。
关于hosts.equiv文件的详细格式说明,在这里 http://www.ibeijie.cn/hosts-equiv-file-format-and-the-use-of
被登录主机就配置好了,被允许的客户端主机只要使用被允许的用户执行rsh [被登录主机名或IP] 就可以无密码登录。
5. 无密码SSH登录配置
在这个配置过程分开角色主机A和B,A——客户端主机,执行远程登录,B——服务器主机,被登录。
1) 在主机A上命令ssh-keygen -t rsa,不用任何参数,默认在当前用户的主目录下创建一个.ssh文件夹,并在内产生一个id_rsa和iid_rsa.pub文件,带.pub后缀的记录公钥,另一个记录私钥。注意产生过程中,任何输入都直接回车,这样采用默认方式就可以,复杂的话看SSH的专业配置文档。
2) 把上述产生的id_rsa.pub文件在.ssh目录下复制一份,改名为authorized_keys。
3) 在B主机上利用执行命令 scp A:/home/用户名/.ssh/authorized_keys ~/.ssh/ ,这样把公钥文件复制到B主机上(当然也可以用其他远程文件传输命令),不过scp不需要对方公开目录(例如用nfs)。采用scp的过程可能会询问你是否要建立链接(取决于是否第一次互连),输入yes即可。然后还要求输入A主机的密码。
4) 在B主机获取了A主机生成的公钥文件后(并置于B主机对应用户下的.ssh文件夹中),就可以使用主机A登录主机B了,第一次要求输入密码,以后就不用了。但注意此过程不可逆,主机B现在还不能以无密码方式登录主机A的。
雷人的囧事:这里的.ssh文件夹,如果是通过ssh-keygen命令调用而被创建的话,其属性是drwx------,一切没有问题。但如果手动用mkdir创建,是drwxr-xr-x,则在被远程登录时,会跳过该文件夹的检查,哪怕有authorized_keys文件在里面。
6. 安装配置MPICH2
预备配置:
1)NFS,NIS都是可选的,不做都可以。
2)配置SSH,关于SSH的配置可以看第5点。不过这里有一点要注意,在第5点中的配置后,主机B不能无密码访问主机A。为了达到这种效果,就把主机A用户目录下的.ssh整个文件夹的内容都复制到主机B去。这样做以后,A,B均使用同样的密钥,也拥有同样的公钥。在这种情况下,两台主机就对等了,可以互相无密码访问,对于更多的主机集群也一样的道理。
3)为每一台集群的主机创建一样的用户。配置好/etc/hosts,让主机之间能互相解析,这就意味着所有主机都用固定IP。我成功的情况下是没有域名的,一台机叫node3,另一台叫node4,没有设置域。(在设置域的情况下做了好久都失败,不知道有无原因相关)
4)把每台主机的/etc/hosts中127.0.0.1这一行的解析数据删掉,这一步很关键,如果不删除的话,后面是启动不了MPI集群的。
5)安装gcc编译器,gcc-c++编译器。(MPICH2的默认配置文件需要g++,但可以删掉,具体做法不详)
6)防火墙关掉。
安装过程:
1)第一点,所有集群主机都要安装MPI,有说法是不用全部都安装,只需要一台安装,并用NFS公开该目录,让其他主机挂载。(但我没试过成功,不能下定论)
2)安装前要考虑好安装目录,而且所有集群主机的MPI安装目录都必须完全一致。
3)下载好MPICH2的tar文件,用各种手段分发到各台主机上吧。(例如我就是一台主机做NFS)
4)安装全过程使用ROOT帐号没问题。(特意说一下这个)
5)解压tar文件,解压文件中有个configure可执行文件,执行该文件 ./configure --prefix=安装目录。 (强烈建议指定安装目录,不指定的话就按默认了,我的默认是装到/usr/local/share/下)
6)configure执行完毕以后,接着执行make,随之make installl。
7)就这样安装结束,在每台主机上重复。
单机启动:
在集群启动之前,先尝试单机启动。切换到使用MPI的用户,一般不支持用ROOT使用。然后在该目录的主文件夹中:
1)touch .mpd.conf
2)chmod 600 .mpd.conf
3)使用vi在里面添加一句:MPD_SECRETWORD=abc,abc就是你要使用的密码,填其他。因为MPICH2需要安全保护,所以改变这个文件权限那一步也不能省略,不该权限,启动不了。
4)修改用户的.bashrc文件,在里面最后添加一句 export PATH=MPICH2安装目录/bin:$PATH。 这样就可以直接使用MPICH2的命令了。
一切准备就绪,调用mpd & 在后台启动MPICH2。
启动MPICH2后,要确保单机下MPICH2可以工作,在MPICH2的安装目录下的share中有个examples_logging文件夹,在里面有份cpi.c的代码,是例子代码,一个并行计算PI值的程序,拷贝过来主目录。
5)调用mpicc cpi.c -o cpi编译该程序。
6)调用mpiexec -np 5 ./cpi执行该程序,参数中的-np是指定并行核的数量,单机上,是通过启动多进程模拟。
运行无误后,进入集群启动。
集群启动:
1)关掉所有主机上的mpd进程,如果有开的话。在每台主机上执行mpdallexit命令。
2)选择一台主机作为启动主机,在该主机下建立一个mpd.hosts文件
touch mpd.hosts
用vi编辑器向文件写入要被加入集群的所有主机的名称,包括当前主机(注意)
3)可选的一步,使用mpdcheck -f mpd.hosts -ssh测试一下所有主机是否都能无密码SSH访问
4)执行mpdboot -n 3 -f mpd.hosts命令,其中-n指定核的数量,一般是少于等于主机列表文件中主机的数量。
启动完毕,之后就可以像单机模式下来执行并行程序了!
排错:
1)Invalid port info,在执行mpdboot时出现,一般情况下,这个错误源于各个主机中MPICH2的安装目录不一致,甚至有些机器没有安装。但还有很多其他原因。
2)mpdboot无法加入节点的一个原因:该节点之前已经加入过并行计算机群,但没有正常结束,导致其/tmp目录下留有mpich使用的登录帐户文件,删除即可。