Quick Howto on Lustre 1.8
by Alex on Nov.24, 2009, under Purdue
Everybody likes fast file performance and recently I’ve been twiddling with different distributed/parallel/clustered file systems for fun and excitement. Tonight was Lustre’s turn to be toyed with. Below is how I got a small/slow Lustre going on my laptop using VirtualBox.
First, install CentOS 5 on some VMs, perhaps three? Then download the RPM packages from Sun/Lustre.org. On the servers:
rpm -ivh kernel-lustre* rpm -ivh lustre-1.8.1.1* lustre-ldiskfs* lustre-modules* e2fsprogs*
On the clients, install the appropriate kernel package for the patch-less client and then the lustre-client packages:
rpm -ivh --force kernel-2.6.18-128.7.1.el5.i686.rpm rpm -ivh lustre-client-1.8.1.1-2.6.18_128.7.1.el5_lustre.1.8.1.1.i686.rpm lustre-client-modules-1.8.1.1-2.6.18_128.7.1.el5_lustre.1.8.1.1.i686.rpm
Now, specially if your VMs have one network for the outside world through NAT and one network for inter-VM communication, you should add the following line to /etc/modprobe.conf to make Lustre find and use the correct interface:
options lnet networks=tcp0(eth1)
Now it’s time to set up the meta-data and management servers:
mkfs.lustre --reformat --device-size=250000 --fsname lustre --mdt --mgs /tmp/mdt mkdir -p /lustre/mds mount -t lustre -o loop /tmp/mdt /lustre/mds
Now it’s time to set up the servers and storage targets (in this simple example, there is only one server per target). Run this on all the storage servers:
mkfs.lustre --reformat --device-size=10000000 --fsname lustre --ost --mgsnode=@tcp0 /tmp/ost mkdir -p /lustre/ost mount -t lustre -o loop /tmp/ost /lustre/ost
After the client has finished rebooting into it proper kernel, mounting the file system is straight forward:
mount -t lustre@tcp0:/lustre /mnt
Of course, now it’s time to write files into our file system to see that it really works:
dd if=/dev/zero of=/mnt/foo bs=1M count=100 lfs getstripe /mnt/*
At this point, if you have multiple storage targets, then you’ll see that your large file got written to just a single target. That’s sad, since we were hoping for super-ultra-fast file I/O from our VMs running Lustre. Thankfully, this can be easily fix:
mkdir /mnt/super-fast lfs setstripe -c 2 /mnt/super-fast dd if=/dev/zero of=/mnt/super-fast/bar bs=1M count=100 lfs getstripe /mnt/super-fast/*
Aaah, there we go. You should have gotten “twice” the performance in MB/s reported from dd and you should see that now your large file of zero’s got written out to two different targets. Of course, the Lustre manual has all sorts of useful tuning suggestions and things to try to get working (like shared targets and proper failover). Many things to try, but I just thought I should document all this in a place that I could later find it easily. As for where I got this, I mostly found quick bits at this blog and the stranger stuff in the Lustre 1.8 manual when I got stuck on my network problems.