Lustre 学习总结
集群存储简介:
在集群里,一组独立的节点或主机可以象一个系统一样步调一致地工作。整个集群只有
唯一
的命名空间。厂商们也已经制造了一些软件和硬件设备,它们可以把不相干的文件系统
融合成只使用一个命名空间的文件系统。用户可以访问并共享其他用户的数据,而无需考虑
是什么介质或其所处的是哪台主机。
集群存储系统需要解决的最基本的问题:
(1)提供共享访问数据,便于集群应用程序的编写和存储的负载均衡;
(2)提供高性能的存储,在 I/O 级和数据吞吐率方面能满足成百上千台规模的 Linux
集群服务器聚合访问的需求
与分布式文件系统相比:数据不需要从一个文件系统拷贝或复制到另一个文件系统,通
过集群系统共享应用和数据的任务执行起来要比在单独的设备上执行快得多;集群可以为文
件和文件系统提供更多的空间;因为只需要管理一个文件系统,而不再是每个存储设备或主
机都需要一个文件系统,管理也更容易了;如果集群内的某台服务器出现了故障,另一台服
务器就可以把它的工作接手过来,故障恢复也成为了现实;用户也可以同时对位于其网络上
的存储设备里的所有文件进行访问。
Lustre 集群文件并行系统由客户端,两个 MDS,OSD 设备池通过高速以太网或 QWS Net
多构成。其采用分布式的锁管理机制来实现并发控制,元数据和文件数据的通信链路分开管
理。
1 Lustre 系统由来:
Lustre 是 HP,Intel,Cluster
File System 公司连个美国能源部开发的 Linux 集群并行文
件系统。它来源于卡耐基梅隆大小额的 NASD 项目研究工作。Lustre 文件系统在 2003 年推
出了了 1.0 版本。它是第一个机遇对象存储设备的、开源的并行文件系统。
Lustre 是一个透明的全局文件系统,客户端可以透明地访问集群文件系统中的数据,而无需
知道这些数据的存储位置。
2 开发 Lustre 系统的目的:
Luster 的名字是有 Linux 和 Cluster 演化而来的,是为海量存储问题而设计的全新文件系
统。它可支持 10000 个节点,PB 级的存储量,100GB/S 的传输速度,具有完美的可伸缩性,
安全性和可管理性。
3 Luster 的组成部分:
Metadata Server(MDS):元数据服务器存储了文件系统的基本信息,负责管理整个系统的
命名空间,维护整个文件系统的目录结构、用户权限,并负责维护文件系统数据的一致性。
通过 MDS 的文件和目录访问管理,Lustre 能够控制客户端对文件系统中文件和目录的创建、
删除、修改。Client 可以通过 MDS 读取保存到 MDT 上的元数据。当 Client 读写文件时,从
MDS 得到文件信息,从 OSS 中得到数据。Client 通过 LNET 协议和 MDS/OSS 通信。在 Lustre
中 MDS 可以有 2 个,采用 Active-Standby 的容错机制,当其中一个 MDS 不能正常工作时,
另外一个后备 MDS 可以启动服务。
Metadata Target(MDT):MDT 存储了 MDS 上元数据的文件名、目录、权限和文件布局。
一个文件系统只能有一个 MDT,不同的 MDS 之间共享同一个 MDT。
Object Storage Servers(OSS):对象存储服务器提供了文件 I/O 服务和用来处理一个或多
个当地 OST 的网络请求。OST、MDT 和 Client 可以同时在一个节点运行。但是典型的配置是
一个 MDT 专用一个节点,每个 OSS 节点可以有两个或多个 OST,一个客户端可以有大量的
计算机节点。
Object Storage Target(OST):OST 负责实际数据的存储,处理所有客户端和物理存储之间
的交互。这种存储是基于对象的,OST 将所有的对象数据放到物理存储设备上,并完成对每
个对象的管理。OST 和实际的物理存储设备之间通过设备驱动方式来实现交互。通过驱动程
式的作用,Lustre 能继承新的物理存储技术及文件系统,实现对物理存储设备的扩展。为了
满足高性能计算系统的需要,Lustre 针对大文件的读写进行优化,为集群系统提供了较高的
I/O 吞吐率。存储在 OST 上的文件都是普通文件,也能是复制文件。Lustre 同时还将数据条
块化,再把数据分配到各个存储服务器上,提供了比传统 SAN 的“块共享”更为灵活和可
靠的共享方式。
Client:客户端通过标准的 POSIX 接口向用户提供对文件系统的访问。对客户端而言,Client
同 OST 进行文件数据的交互,包括文件数据的读写、对象属性的改动等;同 MDS 进行元数
据的交互,包括目录管理、命名空间管理等。存储设备跟普通的,基于块的 IDE 存储设备不
同,是基于对象的智能存储设备。客户端在需要访问文件系统的文件数据时,先访问 MDS,
获取文件相关的元数据信息,然后就直接和相关的 OST 通信,取得文件的实际数据。客户
端通过网络读取服务器上的数据,存储服务器负责实际文件系统的读写操作以及存储设备的
连接,元数据服务器负责文件系统目录结构、文件权限和文件的扩展属性以及维护整个文件
系统的数据一致性和响应客户端的请求。
图 1 Lustre 组成部分结构图
图 2 Lustre 文件系统各部分连接图
4 Luster 文件系统的安装过程
1 安装 Centos5.4 Linux 操作系统
首先检查硬件设备是否好用,包括:内存条,有无硬盘,硬盘型号是否正确(SATA 盘,SAS
盘等),硬盘是否能用,硬盘连接线是否以及接好,光驱是否好用,显示器,键盘,最好弄
两张安装盘等
然后插上电源线和网线开始安装操作系统。
2 采用 RPM 包的方法安装 Lustre。
2.1 安装软件包
rpm -ivh kernel
rpm -ivh lustre-module
rpm -ivh lustre-ldiskfs
rpm -ivh lustre
rpm –ivh e2fsprogs 或 rpm -Uvh e2fsprogs
2.2 reboot
安装完成后,grub 被自动修改为已经修改过内核的启动项,直接重启机器即可。
也可以查看一下/ect/grub.conf 中的 default=0 确认一下。
2.3 磁盘配置
每个 MDS 和 OSS 服务器上单独创建一个分区/dev/sda3 用来分配给 mdt/ost,
利用 fdisk /dev/sda p n +20G p w reboot.
2.4 创建并挂载 MDS/MDT,OSS/OST
2.4.1 在所有系统的/etc/modprobe.conf 中添加如下内容:
--mdt --reformat --mgs /dev/sda3
options lnet networks=tcp
添加完以后执行:
modprobe lnet
lctl network up 后显示
LNET configured 说明网络连接正常
2.4.2 在 mds 中执行一下操作:
mkfs.lustre --fsname=test
mkdir /mnt/mdt
mount.lustre /dev/sda3 /mnt/mdt
2.4.3 在 oss 上执行一下操作:
mkfs.lustre –fsname=test –ost –reformat –mgsnode=10.53.11.143@tcp1 /dev/sda3
mount.lustre /dev/sda3 /mnt/ost
2.5 安装客户端软件包
rpm -ivh luster
rpm -ivh lustre-module
rpm -ivh lustre-client-modules
rpm -ivh lustre-client
rpm -ivh kernel
2.6 客户端连接 MDS
检测一下网络连接是否正常
mkdir /lustrefs
mount.lustre 10.53.11.143@tcp0:/tes t
2.7 客户端查连接情况
使用 lfs df -h 命令可用看到挂载的空间。
2.8 停止 lustre 文件系统
按照 lustre 的启动顺序完全相反的的顺序停止。先停止客户机,再停止 ost,再停止 mds。
停止即卸载:umount /mnt/lustrefs
/lustrefs
Luster 手册例子:
options lnet networks=tcp
[root@mds /]# mkfs.lustre --fsname=test –reformat --mgs --mdt
/dev/sda3
This command generates this output:
Permanent disk data:
test-MDTffff
unassigned
Target:
Index:
Lustre FS: test
Mount type: ldiskfs
Flags:
0x75
(MDT MGS needs_index first_time update )
Persistent mount opts: iopen_nopriv,user_xattr,errors=remount-ro
Parameters: mdt.group_upcall=/usr/sbin/l_getgroups
device size = 19085MB
2 6 18
formatting backing filesystem ldiskfs on /dev/sda3
target name test-MDTffff
4k blocks
options
4885768
-J size=400 -i 4096 -I 512 -q -O dir_index,extents,uninit_groups
-F
mkfs_cmd = mke2fs -j -b 4096 -L test-MDTffff -J size=400 -i 4096 -I 512 -q -O
dir_index,extents,uninit_groups -F /dev/sda3 4885768
Writing CONFIGS/mountdata
[root@mds /]# mount -t lustre /dev/sda3 /mnt/mdt
[root@oss1 /]# mkfs.lustre --ost --fsname=test –reformat
--mgsnode=10.53.11.143@tcp0 /dev/sda3
Permanent disk data:
test-OSTffff
unassigned
Target:
Index:
Lustre FS: test
Mount type: ldiskfs
Flags:
0x72
(OST needs_index first_time update )
Persistent mount opts: errors=remount-ro,extents,mballoc
Parameters: mgsnode=10.53.11.143@tcp
device size = 19085MB
2 6 18
formatting backing filesystem ldiskfs on /dev/sda3
target name test-OSTffff
4k blocks
options
4885768
-J size=400 -i 16384 -I 256 -q -O
dir_index,extents,uninit_groups -F
mkfs_cmd = mke2fs -j -b 4096 -L test-OSTffff -J size=400 -i 16384 -I 256 -q -O
dir_index,extents,uninit_groups -F /dev/sda3 4885768
Writing CONFIGS/mountdata
root@oss1 /] mount -t lustre /dev/sda3 /mnt/ost
root@client1 /] mount -t lustre 10.2.0.1@tcp0:/test /lustrefs
This command generates this output:
Lustre: Client temp-client has started
7. Verify that the file system started and is working by running the df, dd and
lscommands on the client node.
a. Run the df command:
[root@client1 /] lfs df -h
This command generates output similar to this:
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/VolGroup00-LogVol00
7.2G 2.4G 4.5G 35% /
dev/sda1 99M 29M 65M 31% /boot
tmpfs 62M 0 62M 0% /dev/shm
10.2.0.1@tcp0:/temp 30M 8.5M 20M 30% /lustre
b. Run the dd command:
[root@client1 /] cd /lustre
[root@client1 /lustre] dd if=/dev/zero of=/lustre/zero.dat
bs=4M
count=2
This command generates output similar to this:
2+0 records in
2+0 records out
8388608 bytes (8.4 MB) copied, 0.159628 seconds, 52.6 MB/s
c. Run the ls command:
[root@client1 /lustre ls -lsah
This command generates output similar to this:
total 8.0M
4.0K drwxr-xr-x 2 root root 4.0K Oct 16 15:27 .
8.0K drwxr-xr-x 25 root root 4.0K Oct 16 15:27 ..
8.0M -rw-r--r-- 1 root root 8.0M Oct 16 15:27 zero.dat
测试:
[root@csmds ~]# cat /proc/fs/lustre/mgs/MGS/live/*
fsname: test
flags: 0x0
test-MDT0000
test-OST0000
[root@csmds ~]# cat /proc/fs/lustre/lov/test-mdtlov/target_obd
0: test-OST0000_UUID ACTIVE
gen: 8