Lustre文件系统介绍

一、什么是Lustre文件系统

Lustre架构是用于集群的存储架构。Lustre架构的核心组件是Lustre文件系统,它在Linux操作系统上得到支持,并提供了一个符合POSIX *标准的UNIX文件系统接口。

Lustre存储架构用于许多不同类型的集群。它以支持世界上许多最大的拥有数万个客户端系统、pb (PiB)存储和每秒数百GB (GB/sec)的I/O吞吐量的高性能计算(HPC)集群而闻名,许多HPC站点使用Lustre文件系统作为站点范围的全局文件系统,为几十个集群提供服务。

Lustre文件系统能够根据任何需要扩展容量和性能,从而减少了部署许多独立文件系统的需要,例如为每个计算集群部署一个文件系统。通过避免在计算集群之间复制数据,简化了存储管理。除了聚合许多服务器的存储容量外,I/O吞吐量还可以通过额外的服务器进行聚合和扩展。此外,通过动态添加服务器,可以很容易地增加吞吐量和/或容量。

虽然Lustre文件系统可以在许多工作环境中运行,但它不一定是所有应用程序的最佳选择。它最适合于超过单个服务器所能提供的容量的使用,尽管在某些用例中,Lustre文件系统在单个服务器上比其他文件系统执行得更好,因为它具有强锁和数据一致性。

一个Lustre文件系统目前不是特别适合于“点对点”的使用模型,其中客户端和服务器运行在同一个节点上,每个共享少量的存储,因为Lustre软件级别缺乏数据复制。在这种情况下,如果一个客户机/服务器出现故障,那么存储在该节点上的数据将无法访问,直到该节点重新启动。

Lustre特征

Lustre安装可以根据客户端节点、磁盘存储和带宽的数量进行扩展或缩小。可伸缩性和性能取决于可用磁盘和网络带宽以及系统中服务器的处理能力。Lustre文件系统可以部署在各种各样的配置中,这些配置的规模和性能远远超过了迄今为止在生产系统中观察到的。下表显示了Lustre文件系统的一些可伸缩性和性能特征。

特征当前实用范围已知的产品使用情况
客户端可伸缩性100-10000050000+客户端,多在10000 - 20000范围内
客户端性能单客户端:
I/O 90%的网络带宽
聚合:
50 TB/sec I/O,50M IOPS
单客户端:
15 GB/sec I/O (HDR IB), 50000 IOPS
聚合:
10 TB/sec I/O,10M IOPS
OSS可伸缩性单个OSS:
每个OSS1-32个ost
单个OST:
500M个对象,每个OST1024TiB
OSS数量:
1000 OSSs,4000 OSTs
单个OSS:
每个OSS4个ost
单个OST:
1024TiB OSTs
OSS数量:
450个OSSs,900个750TiB HDD OSTs + 450个25TiB NVMe OSTs
1024个OSSs和1024个72TiBOSTs
OSS性能单个OSS:
15 GB/sec,1.5M IOPS
聚合:
50 TB/sec,50M IOPS
单个OSS:
10 GB/sec,1.5M IOPS
聚合:
20 TB/sec,20M IOPS
MDS可伸缩性单个MDS:
每个MDS1-4个MDTs
单个MDT:
40亿个文件,每个MDT16TiB(ldiskfs)
640亿个文件,每个MDT64TiB(ZFS)
MDS数量:
256个MDSs,最多256个MDTs
单个MDS:
40亿个文件
MDS数量:
生产中有40个MDS和40个4TiBMDT
正在测试256个MDS和256个64GiBMDT
MDS性能1M/s的创建操作
2M/s的统计操作
100k/s的创建操作
200k/s的元数据统计操作
文件系统可伸缩性单个文件:
32PiB最大文件大小(ldiskfs)
263字节(ZFS)
聚合:
512PiB空间,一万亿个文件
单个文件:
multi-TiB最大文件大小
聚合:
700PiB空间,250亿个文件

其他Lustre软件特征有:
性能增强的ext4文件系统: Lustre文件系统使用ext4日志文件系统的改进版本来存储数据和元数据。这个名为ldiskfs的版本已经得到了增强,以提高性能并提供Lustre文件系统所需的其他功能。对于MDT、OST和MGS存储,也可以使用ZFS作为Lustre的后备文件系统。这允许Lustre为各个存储目标利用ZFS的可伸缩性和数据完整性特性。

POSIX标准遵从性: 完整的POSIX测试套件以相同的方式传递给本地ext4文件系统,只有在Lustre客户端上有有限的例外。在集群中,大多数操作都是原子的,因此客户端永远不会看到过时的数据或元数据。Lustre软件支持mmap()文件I/O。

高性能异构网络: Lustre软件支持各种高性能,低延迟网络,并允许远程直接内存访问(RDMA) InfiniBand (利用openfabric企业分发(OFED),英特尔OmniPath®,和其他先进的网络,快速和高效的网络传输。多个RDMA网络可以使用Lustre路由桥接,以获得最大的性能。Lustre软件还包括集成的网络诊断。

高可用性: Lustre文件系统支持使用共享存储分区为OSS目标(OSTs)和MDS目标(mdt)进行主/主故障转移。Lustre文件系统可以与各种高可用性(HA)管理器一起工作,以允许自动故障转移,并且没有单点故障(NSPF)。这允许应用程序透明恢复。多重挂载保护(MMP)为高可用性系统中的错误提供了集成的保护,这些错误可能会导致文件系统损坏。

安全: 默认情况下,TCP连接只允许来自特权端口。在MDS上验证UNIX组成员。

访问控制列表(ACL),扩展属性: Lustre安全模型遵循UNIX文件系统,增强了POSIX ACL。值得注意的附加功能包括root squast。

互操作性: Lustre文件系统运行在各种CPU架构和混合端集群上,并且在连续的Lustre主要软件版本之间是可互操作的。

基于对象的架构: 客户端与磁盘上的文件结构隔离,可以在不影响客户端的情况下升级存储架构。

字节粒度文件和细粒度元数据锁定: 许多客户端可以同时读取和修改相同的文件或目录。Lustre分布式锁管理器(LDLM)确保文件系统中所有客户端和服务器之间的文件是一致的。MDT LDLM管理inode权限和路径名上的锁。每个OST对于存储在其上的文件条带上的锁都有自己的LDLM,它会随着文件系统的增长而扩展锁性能。

配额: Lustre文件系统可使用用户和组配额。

容量增长: Lustre文件系统的大小和聚合集群带宽可以通过向集群添加新的ost和mdt来增加,而不会中断。

受控的文件布局: 跨OSTs的文件布局可以在每个文件、每个目录或每个文件系统的基础上配置。这允许根据单个文件系统中的特定应用程序需求对文件I/O进行调优。Lustre文件系统使用RAID-0分条并在ost之间平衡空间使用。

网络数据完整性保护: 客户端发送给OSS的所有数据的校验和可以防止数据传输过程中的损坏。

MPI I/O: Lustre体系结构有一个专用的MPI ADIO层,它优化并行I/O,以匹配底层文件系统体系结构。

NFS和CIFS导出: Lustre文件可以通过NFS协议(通过Linux knfsd或Ganesha协议)或CIFS协议(通过Samba协议)重新导出,以便与非Linux客户端(如Microsoft*Windows、*Apple *Mac OS X *等)共享。

灾难恢复工具: Lustre文件系统提供了在线分布式文件系统检查(LFSCK),在发生重大文件系统错误时可以恢复存储组件之间的一致性。Lustre文件系统甚至可以在存在文件系统不一致的情况下运行,LFSCK可以在使用文件系统时运行,因此在将文件系统返回到生产环境之前不需要完成LFSCK。

性能监视: Lustre文件系统提供了各种机制来检查性能和调优。

开放源码: Lustre软件是根据GPL 2.0许可证授权的,可与Linux操作系统一起使用。

二、Lustre组件

Lustre软件的安装包括一个管理服务器(MGS)和一个或多个Lustre文件系统,这些文件系统通过Lustre网络(LNet)相互连接。Lustre文件系统组件的基本配置如图所示:

在这里插入图片描述

1.管理服务器(MGS)

MGS存储集群中所有Lustre文件系统的配置信息,并将这些信息提供给其他Lustre组件。每个Lustre目标与MGS联系以提供信息,Lustre客户端与MGS联系以检索信息。最好让MGS拥有自己的存储空间,这样就可以独立地管理它。然而,MGS可以与MDS共享存储空间。

2.Lustre文件系统组件

每个Lustre文件系统由以下组成:

  • 元数据服务器(MDS)——MDS使存储在一个或多个MDT中的元数据对Lustre客户端可用。每个MDS管理Lustre文件系统中的名称和目录,并为一个或多个本地MDT提供网络请求处理。
  • 元数据目标(Metadata Targets,MDT)——每个文件系统至少有一个MDT,MDT保存根目录。MDT将元数据(如文件名、目录、权限和文件布局等)存储在MDS的附属存储设备上。每个文件系统有一个MDT。共享存储目标上的MDT可用于多个MDS,但一次只能有一个MDS访问它。当一个主MDS出现故障时,第二个MDS节点可以为该MDT提供服务,并将其提供给客户端使用。这被称为MDS故障转移。DNE (Distributed Namespace Environment)支持多个MDT。除了保存文件系统根的主MDT之外,还可以添加其他MDS节点(每个MDS节点都有自己的MDT)来保存文件系统的子目录树。
  • OSS (Object Storage Servers):为一个或多个本地OSS提供文件I/O服务和网络请求处理。通常,一个OSS服务于2到8个OSS,每个最多16个TiB。典型的配置方式是在一个专用节点上部署一个MDT,每个OSS节点上部署两个或两个以上的OSS,每个计算节点上部署一个客户端。
  • 对象存储目标(OST):用户文件数据存储在一个或多个对象中,每个对象存储在Lustre文件系统中单独的OST上。每个文件的对象数量可以由用户配置,并且可以针对给定的工作负载进行调优以优化性能。
  • Lustre客户端:Lustre客户端是运行Lustre客户端软件的计算、可视化或桌面节点,允许它们挂载Lustre文件系统。Lustre客户端软件提供了Linux虚拟文件系统和Lustre服务器之间的接口。客户端软件包括MGC (management client)、MDC (metadata client)和多个OSCs (object storage client),对应文件系统中的OST。

LOV (logical object volume)将OSC集合起来,提供跨所有OST的透明访问。因此,安装了Lustre文件系统的客户机看到的是单一的、一致的、同步的名称空间。多个客户端可以同时对同一个文件的不同部分进行写操作,而其他客户端可以同时对该文件进行读操作。

逻辑元数据卷(LMV)对MDT进行聚合,以提供跨所有MDT的透明访问,方式与LOV对文件访问的方式类似。这允许客户端将多个MDT上的目录树视为单个一致的名称空间,并且在客户端上合并条带目录,以形成对用户和应用程序来说单个可见的目录。

下表为每个Lustre文件系统组件提供附加存储的要求,并描述所使用的硬件的理想特性:

所需的附加存储理想的硬件特性
MDSs文件系统容量的1-2%足够的CPU功率,充足的内存,fast disk storage
OSSs每个OST1-128TiB,每个OSS1-8个OST良好的总线带宽。建议存储在各个OSS之间均衡分配,并与网络带宽相匹配
Clients不需要本地存储低延迟,高带宽网络

3.Lustre网络(LNet)

Lustre Networking (LNet)是一个自定义的网络API,它提供了为Lustre文件系统服务器和客户端处理元数据和文件I/O数据的通信基础设施。

4.Lustre集群

在规模上,Lustre文件系统集群可以包括数百个OSS和数千个客户端,如下图。在Lustre集群中可以使用多种类型的网络。OSS之间的共享存储支持故障转移功能。

在这里插入图片描述

三、Lustre文件系统存储和I/O

Lustre文件标识符(fid)在内部用于标识文件或对象,类似于本地文件系统中的inode号。FID是一个128位的标识符,包含64位唯一的SEQ (sequence number)、32位的OID (object ID)和32位的版本号。在文件系统(OSTs和mdt)中,所有Lustre目标的序列号都是唯一的。这允许多个MDT和OST唯一地标识对象,而不需要依赖底层文件系统中的标识符(例如inode号),因为这些标识符可能在目标之间重复。FID SEQ号也允许将一个FID映射到一个特定的MDT或OST。

LFSCK文件系统一致性检查工具提供了对现有文件启用FID-in-dirent的功能。它包括以下功能:

  • 验证与每个目录条目一起存储的FID,如果它无效或缺失,则从inode重新生成它。
  • 验证每个inode的linkEA条目,如果无效或缺失,则重新生成它。linkEA存储文件名和父FID。它作为扩展属性存储在每个inode中。因此,可以使用linkEA仅从FID重新构造一个文件的完整路径名。

关于文件数据在OST中的位置的信息被存储为一个扩展属性,称为布局EA,存储在由文件的FID标识的MDT对象中,如下图。如果文件是一个普通文件(不是目录或符号链接),MDT对象指向OST上包含文件数据的1到n个OST对象。如果MDT文件指向一个对象,则所有文件数据都存储在该对象中。如果MDT文件指向多个对象,则文件数据使用RAID 0跨对象进行条带化,每个对象存储在不同的OST上。

在这里插入图片描述

当客户端想要读取或写入文件时,它首先从文件的MDT对象获取布局EA。然后客户端使用这些信息对文件执行I/O,直接与存储对象的OSS节点交互。这个过程如下图所示:

在这里插入图片描述

Lustre文件系统的可用带宽如下所示:

  • 网络带宽为OSS到目标的总计带宽。
  • 磁盘带宽是指网络带宽限制下所有OST的磁盘带宽之和。
  • 总计带宽等于磁盘带宽和网络带宽的最小值。
  • 文件系统可用空间等于所有OST的可用空间之和。

Lustre文件系统和条带化

导致Lustre文件系统高性能的一个主要因素是能够以循环方式将数据分条到多个ost。用户可以为每个文件配置条带数量、条带大小和ost。

当聚合到单个文件的带宽超过单个OST的带宽时,可以使用条带化来提高性能。当单个OST没有足够的空闲空间容纳整个文件时,分条功能也很有用。

条带化允许文件中的数据段或“块”存储在不同的ost上,如下图所示。在Lustre文件系统中,使用了一个RAID0模式,其中数据被“条带化”到一定数量的对象上。单个文件中的对象数量称为stripe_count。

每个对象包含文件中的一个数据块。当写入特定对象的数据块超过stripe_size时,文件中的下一个数据块将存储在下一个对象上。

stripe_count和stripe_size的默认值是为文件系统设置的。stripe_count的默认值是文件的1个条带,stripe_size的默认值是1MB。用户可以在每个目录或文件的基础上更改这些值。

在这里插入图片描述

上图中,文件C的stripe_size比文件a的stripe_size大,允许文件C在一个条带中存储更多的数据。文件a的stripe_count为3,导致数据条带跨三个对象,而文件B和文件C的stripe_count为1。

OST上不存在未写入数据的空间。

最大文件大小不受单个目标的大小限制。在Lustre文件系统中,文件可以跨多个对象(最多2000个)进行条带化,每个对象使用ldiskfs时的大小可达16 TiB,使用ZFS时的大小可达256PiB。这导致ldiskfs的最大文件大小为31.25 PiB, ZFS的最大文件大小为8EiB。请注意,Lustre文件系统可以支持多达263字节(8EiB)的文件,仅受限于OSTs上可用的空间。

尽管一个文件只能条带2000多个对象,Lustre文件系统可以有数千个ost。访问单个文件的I/O带宽是对文件中对象的聚合I/O带宽,最高可达2000个服务器的带宽。在拥有超过2000个ost的系统上,客户端可以使用多个文件来执行I/O,以充分利用整个文件系统带宽。

扩展属性(xattrs)

Lustre使用lov_user_md_v1/lov_user_md_v3数据结构来维护xattrs下的文件条带化信息。扩展属性在创建文件和目录时创建。Lustre使用受信任的扩展属性来存储它的参数,这些参数只能在根目录下访问。参数如下:

  • trusted.lov:保存普通文件的布局,或存储在目录中的默认文件布局(也可以作为lustre.lov对于非root用户)
  • trusted.lma:保存当前文件的FID和额外的状态标志
  • trusted.lmv:保持条带目录(DNE 2)的布局,否则不显示
  • trusted.link:保存父目录FID +每个文件链接的文件名(对于lfs fid2path)

Xattr存储和显示在文件中,可以使用以下方法验证:

getfattr -d -m - /mnt/testfs/file>
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fakerth

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值