來說一下最近用的第三套 Clustering FS, Lustre.
比起上面兩種:Gluster, PVFS 這套不是那麼方便安裝。
目前使用的環境及軟體:
kernel: linux-2.6.22.19
lustre: 1.8
gcc version 4.3.2 (Gentoo 4.3.2-r3 p1.6, pie-10.1.5)
Lustre Networking (LNET) 相依軟體:
1. readline
$ emerge -uD sys-libs/readline
2. libxml2
$ emerge -uD dev-libs/libxml2
3. Python
$ emerge -uD dev-lang/python
4. PyXML
$ emerge -uD dev-python/pyxml
Step1.
下載相關軟體。
1.1. 下載支援的 linux kernel.
由於目前 Lustre 1.8 supported kernels:
2.6-sles10 -----SLES10: 2.6.16.60-0.37
2.6-rhel5 ------RHEL5: 2.6.18-128.1.6.el5
2.6.18-vanilla --kernel.org: 2.6.18.8
2.6.22-vanilla --kernel.org: 2.6.22.14
因為要 patch kernel, 所以只好用原始的 kernel 來安裝。
目前 kernel_patch 支援到 2.6.22.14, 不過我測 2.6.22.19 好像也可以用。
$ cd /usr/src
$ wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.22.19.tar.gz
1.2. 下載 lustre 套件。
透過 cvs 下載最新版 1.8 系列的 source code.
http://wiki.lustre.org/index.php/Open_CVS
$ cd /usr/src
$ cvs -d :pserver:anonymous@cvs.lustre.org:/lustre login
Logging in to :pserver:anonymous@cvs.lustre.org:2401/lustre
CVS password: (Leave blank, Hit Enter)
$ cvs -d :pserver:anonymous@cvs.lustre.org:/lustre co lustre
$ cd lustre
$ ./lustrecvs b1_8 <- 指定下載版本,b1_6, version 1.6
$ cvs -d :pserver:anonymous@cvs.lustre.org:/lustre logout
Step2.
編譯、安裝。
2.1. 安裝 Kernel Patch management tool, quilt.
$ emerge -uD dev-util/quilt
2.2. 安裝 kernel.
$ cd /usr/src
$ tar zxf linux-2.6.22.19.tar.gz
$ cd /usr/src/linux-2.6.22.19
$ ln -s ../lustre/lustre/kernel_patches/series/2.6.22-vanilla.series series
$ ln -s ../lustre/lustre/kernel_patches/patches patches
$ quilt push -av (patch kernel)
由於目前使用的 gcc 4.3.2 在 compile 2.6.22.19 還會有些錯誤,需要手動 patch.
可參考:這篇及這篇。
--- a/include/linux/time.h
+++ b/include/linux/time.h
@@ -174,6 +174,10 @@ static inline void timespec_add_ns(struct timespec *a, u64 ns)
{
ns += a->tv_nsec;
while(unlikely(ns >= NSEC_PER_SEC)) {
+ /* The following asm() prevents the compiler from
+ * optimising this loop into a modulo operation. */
+ asm("" : "+r"(ns));
+
ns -= NSEC_PER_SEC;
a->tv_sec++;
}
$ make menuconfig
$ make
$ make modules
$ make modules_install
$ mount /boot
$ make install
# 記得重新開機
2.3. 安裝 lustre.
$ cd /usr/src/lustre
$ sh autogen.sh
$ ./configure --with-linux=/usr/src/linux-2.6.22.19
$ make
$ make install
Step3.
設定 Lustre 系統。整個系統共包含三個子系統:Meta Data Servers (MDSs), Object Storage Targets (OSTs), and Lustre clients, 可以全部在同一台,也可以分散開來。
3.1. modules 設定。
$ cat /etc/modprobe.d/Lustre
# Networking options, see /sys/module/lnet/parameters
options lnet networks=tcp# alias lustre llite -- remove this line from existing modprobe.conf
# (the llite module has been renamed to lustre)
# end Lustre modules
$ update-modules
$ depmod -A -e
$ modprobe lustre (載入相關模組)
$ lsmod
Module Size Used by
lustre 733416 0
lov 476968 1 lustre
mdc 177004 1 lustre
osc 229704 1 lustre
ksocklnd 139512 1
ptlrpc 988648 4 lustre,lov,mdc,osc
obdclass 723320 5 lustre,lov,mdc,osc,ptlrpc
lnet 253456 4 lustre,ksocklnd,ptlrpc,obdclass
lvfs 51932 6 lustre,lov,mdc,osc,ptlrpc,obdclass
libcfs 115216 9 lustre,lov,mdc,osc,ksocklnd,ptlrpc,obdclass,lnet,lvfs
3.2. Making and starting a filesystem.
$ mkfs.lustre --fsname=testfs --mdt --mgs /dev/cciss/c0d1p1
Permanent disk data:
Target: testfs-MDTffff
Index: unassigned
Lustre FS: testfs
Mount type: ldiskfs
Flags: 0x75
(MDT MGS needs_index first_time update )
Persistent mount opts: errors=remount-ro,iopen_nopriv,user_xattr
Parameters: mdt.group_upcall=/usr/sbin/l_getgroups
checking for existing Lustre data: not found
device size = 34726MB
2 6 22
formatting backing filesystem ldiskfs on /dev/cciss/c0d1p1
target name testfs-MDTffff
4k blocks 0
options -J size=400 -i 4096 -I 512 -q -O dir_index,uninit_groups -F
mkfs_cmd = mke2fs -j -b 4096 -L testfs-MDTffff -J size=400 -i 4096 -I 512 -q -O dir_index,uninit_groups -F /dev/cciss/c0d1p1
Writing CONFIGS/mountdata
$ mkdir -p /mnt/test/mdt
$ mount -t lustre /dev/cciss/c0d1p1 /mnt/test/mdt
$ mkfs.lustre --fsname=testfs --ost --mgsnode=node25@tcp0 /dev/cciss/c0d1p1
$ mkdir -p /mnt/test/ost0/
$ mount -t lustre /dev/cciss/c0d1p1 /mnt/test/ost0/
Step4.
掛載!最後測試!
$ mkdir -p /mnt/lustrefs
$ mount -t lustre node25@tcp0:/testfs /mnt/lustrefs
$ cat /proc/fs/lustre/devices
0 UP mgs MGS MGS 11
1 UP mgc MGC140.110.x.25@tcp 776dd96f-dca4-a775-9ee3-22ab38dea648 5
2 UP mdt MDS MDS_uuid 3
3 UP lov testfs-mdtlov testfs-mdtlov_UUID 4
4 UP mds testfs-MDT0000 testfs-MDT0000_UUID 9
5 UP osc testfs-OST0000-osc testfs-mdtlov_UUID 5
6 UP osc testfs-OST0001-osc testfs-mdtlov_UUID 5
7 UP osc testfs-OST0002-osc testfs-mdtlov_UUID 5
$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/cciss/c0d0p3 33G 3.1G 30G 10% /
udev 10M 36K 10M 1% /dev
shm 506M 0 506M 0% /dev/shm
/dev/cciss/c0d1p1 34G 449M 32G 2% /mnt/test/ost0
node25@tcp0:/testfs 101G 1.4G 94G 2% /mnt/lustrefs
$ time dd if=/dev/zero of=/mnt/lustrefs/5gfile bs=5120 count=1024000
1024000+0 records in
1024000+0 records out
5242880000 bytes (5.2 GB) copied, 194.119 s, 27.0 MB/s
real 3m14.174s
user 0m0.652s
sys 0m43.527s
說明:
目前設定如下:
node 25 為 MDS
node 26 為 OST, client. 提供 34G 空間。
node 27 為 OST, client. 提供 34G 空間。
node 28 為 OST, client. 提供 34G 空間。
Total 101G,每個 client 都看到 101G.
參考:
詳細安裝設定請看:Install and Configure.
沒有留言:
張貼留言