建立在HP ProLiant DL380 G3的Debian Cluster系统配置

李会民 固体微结构研究室 Linux无盘系统主页

    最近帮朋友做了HP ProLiant DL380 G3的集群系统,以下全凭记忆所写,所以无法详细给出具体操作,也许有问题,请不要盲目全信,最好仔细研究各种设置自带的手册。

  1. 硬件配置:
    HP ProLiant DL380 G3,每个节点两个Intel Xeon 3.06GHz/533处理器,3G双路交叉PC2100 DDR SDRAM内存,一个Smart Array 5i plus控制器。服务器4个Wide Ultra3 146G SCSI硬盘做硬件raid5,在CMOS设置一下即可,客户机一个76G SCSI硬盘。
    这里主要提下与一般系统的不同之处,详细的配置可以参考http://micro.ustc.edu.cn/linux/(这里含有一些集群系统的资料以及FortranMPI的玩艺)。

  2. 安装基本系统:
    利用debian的d-i网络安装光盘网络安装。下载ftp://debian.ustc.edu.cn/debian-cd/d-i/pre-rc2/sarge-i386-netinst.iso,然后刻成引导光盘,选择2.4内核利用网络安装(2.6内核没安装成,但也许是我的光盘本身的问题),选择lilo引导。重启系统后让选择包的时候,选择一下(尽量少,因为马上要升级,等更新sources.list以后再选择)完成安装,进入系统后编辑/etc/apt/sources.list文件,添加源,以后都在这个源上进行网络安装(不想手敲的话,可以利用wget ftp://debian.ustc.edu.cn/sources.list/sources.list.stable得到,这里请选择合适的发行版本,并且要放到/etc/apt/sources.list)
    :光盘安装后默认只看到一个cpu,内存也只认出1G,不用担心因为内核的问题,升级内核为smp的即可。HP的raid5做后,/dev/cciss/c0d0p1相当于/dev/hda1,如果系统出问题,需要从光盘引导,引导的时候附加参数root=/dev/cciss/c0d0p1,比如对于woody光盘,选择rescbf24 root=/dev/cciss/c0d0p1

  3. 安装必须的包:
    在这个集群系统中主服务器的/home,/opt,/usr/local目录通过nfs共享到客户端,节点间通过rsh无密码登录,利用systemimager进行节点更新,所以需要安装 nfs-kernel-server,dhcp3-server,rsh-client,rsh-server,systemimager以及关联的包

  4. 安装编译器:
    安装Intel FORTRAN和C++编译器,然后安装mpich,请看它们的安装说明,软件可以去它们的主页或者ftp://fortran@210.45.72.53/

  5. 配置网络:
    三块网卡,eth0和eth1是自带的千兆网卡,临时没用eth0,以后可以做bonding,eth2是附加的对外百兆网卡
    编辑/etc/network/interfaces:
    -----------------------------------------------------------------------
    auto lo eth1 eth2

    iface lo inet loopback

    iface eth2 inet static #对外百兆网卡
    address xxx.xxx.xxx.xxx #换成固定IP
    netmask 255.255.255.0
    broadcast xxx.xxx.xxx.0 #换成对应的
    gateway xxx.xxx.xxx.254 #换成对应的

    iface eth1 inet static #对内网卡,最好以后利用bonding技术bonding双网卡eth0和eth1
    address 192.168.1.254
    netmask 255.255.255.0
    broadcast 192.168.1.255
    #gateway 192.168.1.254 #此行需要注释掉,否则连接不到外网
    -----------------------------------------------------------------------

  6. Bonding:
    使用多块网卡虚拟成为一块网卡,具有相同的IP地址。这项技术在sun和cisco中已经存在,分别称为Trunking和etherchannel技术,在Linux中,这种技术称为bonding。
    什么是bonding需要从ethernet网卡的promisc模式说起。我们知道,在正常情况下,ethernet网卡只接收目的mac地址是自身mac的ether帧,对于别的数据帧都过滤掉,以减轻驱动程序——也就是软件的负担。但是ethernet网卡也支持另外一种被称为promisc的模式,可以接收网络上所有的帧,很多系统程序如:sniffer、tcpdump,都运行在这个模式下。bonding也运行在这个模式下,而且修改了驱动程序中的mac地址,将两块网卡的mac地址改成相同,可以接收特定mac的数据帧。然后把相应的数据帧传送给bond驱动程序处理。bonding技术的最早应用是在集群——beowulf上,为了提高集群节点间的数据传输而设计的。
    说了半天理论,其实配置很简单,因为在内核中已经包含了,只需要在编译的时候把网络设备选项中的Bonding driver support选中就可以了。然后,重新编译核心(对于debian不需要,只要modprobe bonding即可),重新起动计算机,执行如下命令:
    #ifconfig eth0 down
    #ifconfig eth1 down
    #ifconfig bond0 ipaddress
    #ifenslave bond0 eth0
    #ifenslave bond0 eth1

    :bonding以后,有几点需要注意:
    • 主服务器的dhcp服务必须挂载到bond0上面
    • 主服务器的dhcp给客户端分配固定IP那里对应的mac地址需要重设为现在对应bond0的
    • systemimager客户端golden_client启动的时候也要设定好对应的bond0
    • 也许还有别的地方,一个原则,用bond0带替以前的eth0或者eth1

  7. 配置dhcp:
    修改服务器/etc/dhcp3/dhcpd.conf,内容请看机子上面修改后的,另外dhcp要挂在eth1上面,如果以后做成bonding,则要挂载到bond0上面
    如果是用动态IP,一般不需要做修改,对于定态的类似下面的格式:
    host node1{
    hardware ethernet 00:01:02:96:25:92; #网卡mac地址
    fixed-address 192.168.1.1;
    }

  8. 配置nfs共享:
    主服务器:
    添加修改服务器的/etc/exports以便客户端可以装载上面的那些文件并且共享/home等:
    -----------------------------------------------------------------------
    /home 192.168.1.0/255.255.255.0(rw,no_root_squash,async)
    /usr/local 192.168.1.0/255.255.255.0(rw,no_root_squash,async)
    /opt 192.168.1.0/255.255.255.0(rw,no_root_squash,async)
    -----------------------------------------------------------------------
    客户端:
    添加修改/etc/fstab以便客户端可以装载上面的那些文件并且共享/home等:
    -----------------------------------------------------------------------
    192.168.1.254:/home /home nfs defaults,nolock 0 1
    192.168.1.254:/opt /opt nfs defaults,nolock 0 1
    192.168.1.254:/usr/local /usr/local nfs defaults,nolock 0 1
    -----------------------------------------------------------------------
    以后安装软件在这里面,则自动nfs到各个节点,如果安装到其余地方则需要设置才能共享过去

  9. 配置rsh不需要密码登录:
  10. 这里是用mpi做并行计算,所以必须配置不要密码,当然这里也可以用ssh代替rsh,个人口味而已
    /etc/hosts.equiv:
    -----------------------------------------------------------------------
    + node1
    + node2
    -----------------------------------------------------------------------
    以上配置服务器,允许的哪些客户端连接,这里还可配置具体哪个客户端的哪个用户连接,请man hosts.equiv

    下面配置客户端的对应文件:
    /etc/hosts.equiv:
    -----------------------------------------------------------------------
    +
    -----------------------------------------------------------------------
    配置个人根目录下的.rhosts:
    -----------------------------------------------------------------------
    node1 UserName
    node2 UserName
    -----------------------------------------------------------------------

    :配置.rhosts权限为除了用户和root外其余帐户没有访问的权限,我的权限是-rw-------,这里如果不这么配置,rsh的时候还会出现输入密码的提示,切记!
    在配置rsh过程中还出现过一个错误,rcmd: getaddrinfo: Temporary failure in name resolution 这是因为rsh等命令为了安全需要setuid,执行下面命令即可:
    % chown root /usr/bin/rsh /usr/bin/rcp /usr/bin/rlogin
    % chmod 4555 /usr/bin/rsh /usr/bin/rcp /usr/bin/rlogin

  11. 节点更新:
    现在已经配置好systemimager服务器和客户端,以后对节点进行更新可以先在服务器下chroot /var/lib/system/image/ImageName(这里的ImageName是你的Golden-client的镜像,请看systemimager手册),然后执行dselect进行更新等,最后去每个客户端执行updateclient -server 192.168.1.254 -image ImageName进行更新
    注意更新后检查/etc/hosts下面那个主机名,千万不要重名

  12. 添加用户:
    服务器和各个节点都需要添加同名的用户,可以执行adduser添加用户,在客户端添加,可以类似前面说的利用chroot做,然后需要添加这个用户的客户端可以updateclient更新,也可以在客户端直接添加用户。
    另一个方便的是配置nis服务,请参考相关资料

  13. 注意事项:
    • mpi编译与提交:
      编译用mpif90,mpif77,mpicc等
      提交 mpirun -p4pg p4file MyProgram #用户指定CPU分配 具体内容比如p4file的格式,请查看mpich手册

    • 远程操作:
      为了安全,不支持telnet登录,不支持ftp传输,请用ssh代替telnet进行登录,用sftp代替ftp进行文件传输,在Windows下可以找支持的软件,比如对于ssh可以利用putty,fterm,sterm等的相应版本登录,ftp用CuteFtp或者SW_Ftp Pro(IE不支持)等相应支持的版本,选择sftp协议

    • 提高效率,简化劳动:
      Linux是个非常强大的系统,对于重复性很强的操作,最好利用脚本做,可以减轻操作,减少出错几率等,建议学习一些基本的命令操作,最好学会一些简单的shell编程,如果发现某个操作很繁琐,就应该去考虑一下是否有现成的命令或者自己编写脚本去处理。下面仅仅给出一个编译的脚本:
      Makefile文件内容
      -----------------------------------------------------------------------
      all:sem isem
      sem:sem.f90
      mpif90 -module module -o sem sem.f90
      rm -f *.o
      isem:isemmpi.f90
      mpif90 -module module -o isemmpi isemmpi.f90
      rm -f *.o
      clean:
      rm -f sem isemmpi
      -----------------------------------------------------------------------
      简单说明:
      此文件放到需要编译的文件的目录下面,其中sem.f90和isemmpi.f90是两个不同的需要编译的文件,那么在此目录下执行:
      • make sem   则相当于执行mpif90 -module module -o sem sem.f90和rm -f *.o
      • make isem  则相当于执行mpif90 -module module -o isemmpi isemmpi.f90和rm -f *.o
      • make all   则相当于执行make sem和make isem
      • make clean 则相当于执行rm -f sem isemmpi