From Kerrighed

Kerrighed Cluster 部署指南

一、Kerrighed Cluster系统介绍
Kerrighed是开源单系统镜像(Single-System Image)集群软件项目。Kerrighed成为Linux操作系统的一种扩展实现。它可以帮助科学计算软件使用更多的计算能力,这些程序可以使用OpenMP,MPI,或者Posix多线程编程模型。使用Kerrighed部署的集群看起来像一台SMP计算机,可以使用集群的全部处理器和内存资源。

该项目起始于1998年十月,目前最新稳定版本为2.4.0。
官方网站:http://www.kerrighed.org/wiki/index.php/Main_Page

二、Kerrighed Cluster部署要求

  • NFSROOT(集群中的每个节点必须共享相同的文件系统,计算节点使用无盘系统)
  • Linux内核2.6.20源代码
  • TFTP
  • DHCP
  • Syslinux(用于支持PXE启动)
  • Kerrighed安装包

三、Kerrighed Cluster安装流程

  • 在头节点安装操作系统,本例中使用Cent OS 5.2。
  • 建立CHROOT虚拟根目录。
  • 使用Kerrighed对内核源代码进行设置。
  • 修改内核设置,确定节点的网卡驱动编译进内核(网卡驱动不能以模块形式存在,否则计算节点的网络将无法启动)。
  • 开始编译Kerrighed并安装。
  • 配置PXE启动文件。
  • 配置DHCP服务器。
  • 启动DHCP,TFTP服务。
  • 启动计算节点,完成安装。

四、Kerrighed Cluster头节点安装步骤
在头节点安装操作系统。安装操作系统时要精简安装,主需要选择必备的软件包如开发包,DHCP服务器,XINETD服务器即可,IP地址为192.168.140.135。 安装完操作系统后,在根目录建立一个空文件夹,如NFSROOT。将该文件夹作为给计算节点提供虚拟根目录的位置。

mkdir /NFSROOT

下面就要生成一个小的根文件系统,我们使用rsync程序将现有的操作系统目录结构同步到虚拟根目录下。虚拟根目录也要精简。

rsync -a -e ssh localhost:/{bin,boot,dev,etc,home,lib,mnt,sys,tmp,usr,var} /NFSROOT

然后在虚拟根目录下建立proc目录并将其挂载。

mkdir /NFSROOT/proc
mount -o bind /proc /NFSROOT/proc

完成该步骤后就可以进入虚拟根目录。

chroot /NFSROOT

设置root用户密码。

passwd

修改虚拟根目录下面的fstab文件,在该文件末尾添加以下内容。

none    /proc       proc    defaults    0 0
none    /sys        sysfs   defaults    0 0
none    /var/run    tmpfs   defaults    0 0
192.168.140.135:/NFSROOT    /   nfs rw,hard,nolock 0 0
192.168.140.135:/NFSROOT/var     /var    nfs rw,hard,nolock 0 0
192.168.140.135:/NFSROOT/tmp     /tmp    nfs rw,hard,nolock 0 0
192.168.140.135:/NFSROOT/root    /root   nfs rw,hard,nolock 0 0
192.168.140.135:/NFSROOT/sys    /sys   nfs rw,hard,nolock 0 0
192.168.140.135:/NFSROOT/etc     /etc    nfs rw,hard,nolock 0 0

添加完成后,需要将原文件中的以下内容使用#注释掉。

LABEL=/boot    /boot       ext3    defaults    1 2
tmpfs    /dev/shm   tmpfs    defaults    0 0
devpts   /dev/pts   devpts   gid=5,mode=620    0 0
sysfs    /sys       sysfs    defaults    0 0
proc     /proc      proc     defaults    0 0

下面开始编译Kerrighed软件包。将 linux-2.6.20.tar.bz2和kerrighed-2.4.0.tar.gz拷贝到/usr/src目录下,解压缩这两个压缩包。

cd /usr/src
tar zxf kerrighed-2.4.0.tar.gz
tar jxf linux-2.6.20.tar.bz2

设置源代码。

cd kerrighed-2.4.0
./configure --disable-service

由于基于RHEL的Linux发行版缺少LSB中的一些脚本,因此不能以服务的方式将Kerrighed启动,需要加上--disable-service选项,只能手工启动。 设置完成后进入kernel目录下,开始设置内核,将网卡驱动选择编译到内核中。

make menuconfig

内核源代码设置完成后,回到上一级子目录,开始对内核进行编译和安装。

make && make install

编译完成后,从虚拟根文件系统中退出。下面开始设置PXE启动。将已编译完成的内核文件与PXE启动文件拷贝到/tftpboot目录下。

cd /tftpboot
cp /boot/vmlinuz-2.6.20-krg 
cp /usr/lib/syslinux/pxelinux.0
mkdir pxelinux.cfg

进入到pxelinux.cfg目录下并生成一个启动设置文件,命名为default。在文件当中添加以下内容。

default nfsroot
label nfsroot
       kernel /vmlinuz-2.6.20-krg
       append console=tty1 root=/dev/nfs nfsroot=192.168.140.135:/NFSROOT ro ip=dhcp pci=nommconf

若没有/dev/nfs设备文件,需要建立一个块设备文件。

mknod /dev/nfs b 0 255

下面开始设置DHCP服务器。修改/etc/dhcpd.conf文件,在文件中添加以下内容。

ddns-update-style ad-hoc; 
allow bootp; 
allow booting; 
default-lease-time 600; 
max-lease-time 7200; 
option subnet-mask 255.255.255.0; 
subnet 192.168.140.0 netmask 255.255.255.0 { 
   option broadcast-address 192.168.140.255; 
} 
group { 
 filename "pxelinux.0"; 
 option root-path "192.168.140.135:/NFSROOT"; 
 host node1 { fixed-address 192.168.140.141; 
              hardware ethernet 00:0C:29:12:CB:4C; } 
 host node2 { fixed-address 192.168.140.142; 
              hardware ethernet 00:0C:29:A2:05:42; } 
 next-server 192.168.140.135; 
} 

若还有更多的计算节点,只需根据MAC地址和所要分配的IP地址添加到group组即可。 下面开始设置NFS服务器。在/etc/exports文件中添加以下内容。

/NFSROOT 192.168.140.0/255.255.255.0(ro,sync,no_root_squash)
/NFSROOT/tmp 192.168.140.0/255.255.255.0(rw,sync,no_root_squash)
/NFSROOT/sys 192.168.140.0/255.255.255.0(rw,sync,no_root_squash)
/NFSROOT/var 192.168.140.0/255.255.255.0(rw,sync,no_root_squash)
/NFSROOT/root 192.168.140.0/255.255.255.0(rw,sync,no_root_squash)
/NFSROOT/etc 192.168.140.0/255.255.255.0(rw,sync,no_root_squash)

最后,启动头节点的相关服务。

service nfs restart
service dhcpd restart
service xinetd restart

五、Kerrighed Cluster计算节点设置步骤
如果一切正常,计算节点就可以顺利启动。登录后,需要在每个节点上将Kerrighed的相关模块加载。

modprobe kerrighed

然后在任意一台节点上启动集群和负载器调度器。

krgadm cluster start
krg_legacy_scheduler

启动负载器时,可能会由于没有挂载configfs而报错。需要在/etc/fstab文件末尾添加以下内容并在根目录下建立config目录。

configfs     /config    configfs defaults 0 0

若启动一切正常,那么就应该能够在任意一台节点上看到所有计算节点的处理器和内存,类似于一台独立的SMP计算机。

六、Kerrighed Cluster使用方法
当把负载调度器启动后,Kerrighed就会自动将多进程程序中的进程移植到其他计算节点的处理器上。但是,在运行程序之前,要通知Kerrighed允许移植进程。

krgcapset -d +CAN_MIGRATE

执行完上面的命令后,就可以启动多进程程序,可以用top观察处理器和内存的使用情况。

七、Kerrighed Cluster使用实例
共2个计算节点,每个节点含有1枚单核处理器,128MB内存,无盘系统。在Node1和Node2上分别将Kerrighed的模块加载。

modprobe kerrighed

然后在Node1(或Node2)上启动集群和负载器调度器。

krgadm cluster start
krg_legacy_scheduler

通知Kerrighed允许移植进程。

krgcapset -d +CAN_MIGRATE

开始运行HPL。

mpirun -np 2 xhpl
Node1节点截图
Image:node1.jpg
Node2节点top命令输出情况
Image:node2.jpg
其中"Cpu4512”是Node1上的处理器;"Cpu4544”是Node2上的处理器。

八、错误处理

  • 若计算节点启动时在”Starting udev”处挂起,则需要删除虚拟根目录下的/etc/sysconfig/network-scripts/if-cfg0文件。
  • 由于发行版本的不同,计算节点启动后根文件系统变为只读,需要将其重新挂载。
mount -t nfs -n -o remount 192.168.140.135:/NFSROOT /