分类: LINUX
2011-06-22 10:16:05
虽然以前自己独立安装过几套Lustre,但是心里还是没有底。因为以前安装的大多是Lustre1.4版本,多数情况下需要编译内核,而内核编译又比较麻烦,有时不能正常引导机器,还需自己添加所需的内核模块。还好,这次安装的OS是RHEL4U4,内核是2.6.9, 2.6的内核本身所带驱动比较全面,用Lustre1.6提供的内核一般都能启动,这才心里踏实了一些。
这次安装涉及到以下一些节点:
MGS, 2个OSS(4个OST), 113个Client。
安装过程如下:
1. 在2个IO节点安装内核、Lustre模块以及Lustre工具包
rpm -ivh kernel-lustre-smp-2.6.9-67.0.4.EL_lustre.1.6.4.3.x86_64.rpm
rpm -ivh lustre-modules-1.6.4.3-2.6.9_67.0.4.EL_lustre.1.6.4.3smp.x86_64.rpm
rpm -ivh lustre-ldiskfs-3.0.4-2.6.9_67.0.4.EL_lustre.1.6.4.3smp.x86_64.rpm
rpm -ivh lustre-1.6.4.3-2.6.9_67.0.4.EL_lustre.1.6.4.3smp.x86_64.rpm
然后编辑/boot/grub/grub.conf,更改启动选项
reboot (过了几分钟,机器正常启动了,心中大喜,说明内核工作正常,不用编译内核了)
2. 在2个IO节点编辑/etc/modprobe.conf,增加如下内容:options lnet networks=tcp1(bond0)
(注:bond0是千兆网)
然后用parted工具对磁盘进行分区
其中一个IO上分出 /dev/sdb1(做MDT), /dev/sdb2(做OST), /dev/sdc1(做OST)
另一个IO节点分出做OST的两个分区: /dev/sdb1 和 /dev/sdc1
3. 创建MGS,OSS。 (首先把nfs相关的内容停掉:/fstab、 /etc/exports、 chkconfig )
创建MGS: mkfs.lustre --mgs --mdt --fsname=data --param lov.stripecount=4 /dev/sdb1
格式化完成后: mkdir -p /lustre/mds; mount -t lustre /dev/sdb1 /lustre/mds
创建4个OST:在其中一个IO节点上执行如下命令(与MGS同一节点):
mkfs.lustre --ost --fsname=data /dev/sdb2
mkdir -p /lustre/ost1; mount -t lustre /dev/sdb2 /lustre/ost1
mkfs.lustre --ost --fsname=data /dev/sdc1
mkdir -p /lustre/ost2; mount -t lustre /dev/sdc1 /lustre/ost2
修改/etc/fstab:
/dev/sdb1 /lustre/mds lustre defaults 0 0
/dev/sdb2 /lustre/ost1 lustre defaults 0 0
/dev/sdc1 /lustre/ost2 lustre defaults 0 0
在另一个OSS上执行如下命令:
mkfs.lustre --ost --fsname=data /dev/sdb1
mkdir -p /lustre/ost3; mount -t lustre /dev/sdb1 /lustre/ost3
mkfs.lustre --ost --fsname=data /dev/sdc1
mkdir -p /lustre/ost4; mount -t lustre /dev/sdc1 /lustre/ost4
修改/etc/fstab:
/dev/sdb1 /lustre/ost3 lustre defaults 0 0
/dev/sdc1 /lustre/ost4 lustre defaults 0 0
(注:整个步骤因为主要是格式化磁盘,进行的比较慢,耐心等待,大约每个OST3TB,需要20分钟)
4. 在上步格式化的过程中,安装Client的软件包
现在在其中一个Client上安装,然后用dsh脚本批量copy到各节点
rpm -ivh kernel-lustre-smp-2.6.9-67.0.4.EL_lustre.1.6.4.3.x86_64.rpm
rpm -ivh lustre-modules-1.6.4.3-2.6.9_67.0.4.EL_lustre.1.6.4.3smp.x86_64.rpm
rpm -ivh lustre-ldiskfs-3.0.4-2.6.9_67.0.4.EL_lustre.1.6.4.3smp.x86_64.rpm
rpm -ivh lustre-1.6.4.3-2.6.9_67.0.4.EL_lustre.1.6.4.3smp.x86_64.rpm
编辑/boot/grub/grub.conf,更改启动选项
编辑/etc/modprobe.conf,增加 options lnet networks=tcp1(eth0) //eth0是千兆网
编辑/etc/fstab,增加 f114n23f@tcp1:/data /data lustre defaults 0 0
reboot (能正常启动)
5. 弄好一个Client后,把所有需要的东西打包
cd /
tar cvf lustre.tar /boot/vmlinuz-2.6.9-67.0.4.EL_lustre.1.6.4.3smp
/boot/System.map-2.6.9-67.0.4.EL_lustre.1.6.4.3smp
/boot/initrd-2.6.9-67.0.4.EL_lustre.1.6.4.3smp.img
/boot/grub/grub.conf
/lib/modules/2.6.9-67.0.4.EL_lustre.1.6.4.3smp
/etc/modprobe.conf /etc/fstab
rpm -qa | grep lustre (得到包名,lustre-1.6.4.3-2.6.9_67.0.4.EL_lustre.1.6.4.3smp)
rpm -ql lustre-1.6.4.3-2.6.9_67.0.4.EL_lustre.1.6.4.3smp | xargs tar rvf lustre.tar
这样,一个tarball就制作好了,把包放到一个共享的路径,或者批量copy到各Client,再解包
最后,重启所有Client
6. 在OST格式化完成后就可以在client挂载Lustre文件系统了
各节点执行如下命令:
mkdir -p /data
mount -a (或者 mount -t lustre f114n23f@tcp1:/data /data)
mount成功后,用df命令,可以看到刚刚mount的Lustre文件系统 /data
到此为止,整个安装算是完成了,各Client可以使用Lustre文件系统了。为了保险起见,我自己先测试一下Lustre的速度。
在Lustre文件系统上用dd命令产生一个2GB文件:
time dd if=/dev/zero of=aa bs=1M count=2048
正常情况下,2GB大小的文件需要18秒左右的时间就能完成
刚刚开始测试的时候,发现如果文件stripecount为4(所有)时,速度还可以,但是stripecount为1时速度大约慢一倍,需要30秒左右的时间。经过分析,可能时网络带宽的问题,按说千兆网的正常带宽的情况下,不可能这么慢。
后来测试过程中发现,有的节点写文件速度特别慢,而且时好时坏,这样就更怀疑网络的问题了。
做了很多遍测试,感觉头痛的很,为什么这么不稳定? 如此下去刚刚做的这个Lustre文件系统是不能用的。
后来,我看了一下网卡的型号,是NVidia主板自带的forcedeth。 驱动程序的版本是0.60, 原来系统的版本是:Version 0.62-Driver Package V1.23,是不是网卡驱动的原因呢?于是赶紧去NVidia官方网站找驱动,终于找到了最新的驱动源码。 下载后,找到forcedeth.c, 看其版本,果然是Version 0.62-Driver Package V1.23,于是在某个节点安装了Lustre内核源码
rpm -ivh kernel-lustre-source-2.6.9-67.0.4.EL_lustre.1.6.4.3.x86_64.rpm
把forcedeth.c copy到某个源码下某个路径里,进行编译:
首先编写一个Makefile文件:
obj-m := forcedeth.o
modules:
make -C kernel_path M=current_path modules
然后make,就产生了网卡的驱动 forcedeth.ko,
copy至/lib/modules/`uname -r`/kernel/drivers/net
把新编译的forcedeth.ko copy到所有节点, reboot
这样,所有节点重启后,再测试Lustre的性能,速度基本都可以了。看来果然是网卡驱动的问题,这下心里美滋滋的,终于找到原因了,解决问题了。
但是,唯独有6个节点的速度奇慢。登陆这些节点,查看原因,原来eth0不是千兆网的网段,eth1是千兆网的网段。换成 options lnet networks=tcp1(eth1)后,重启Client,速度还是不行。于是,猜想是系统配置有问题,把千兆网和百兆网的网口弄错了:把千兆网卡接在了百兆交换机上,把百兆网口接在了千兆交换机上。 让系统配置人员重新更改网络配置后, 一些正常了, 所有节点的速度都上去了。后来又做了很多遍测试,终于放心了,交付使用了。
谢天谢地,终于完成了这次安装。
经过这次安装,提醒我,出现问题一定要从多方面仔细查找,好好分析。
最后,因为Lustre1.6.4.3在预读方面有些bug,需要在mds上作一下设置:
lctl conf_param data.llite.statahead_max=0