Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3001881
  • 博文数量: 674
  • 博客积分: 17881
  • 博客等级: 上将
  • 技术积分: 4849
  • 用 户 组: 普通用户
  • 注册时间: 2010-03-17 10:15
文章分类

全部博文(674)

文章存档

2013年(34)

2012年(146)

2011年(197)

2010年(297)

分类: LINUX

2011-06-22 10:16:05

周一下午,XX方面要求给一套pc-cluster安装Lustre文件系统。初步打听了一下机器操作系统情况:RHEL 4U4 X86_64。  按照此情况,我准备了一套Lustre1.6.4.3。(目前最新版本是1.6.5.1)

    虽然以前自己独立安装过几套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

/*500*200,创建于2010-10-22*/ var cpro_id = 'u250253';
阅读(887) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~