建立在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以后,有几点需要注意:
  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. 注意事项: