Lustre介绍

来自Lustre文件系统
跳转至: 导航搜索

概述

Lustre*是一个开源的、全局单个命名空间的、符合POSIX标准的分布式并行文件系统,旨在实现系统的可扩展性、高性能和高可用性。Lustre在基于Linux的操作系统上运行,并采用客户端-服务器模式的网络架构。Lustre的存储由一组服务器提供,这些服务器可以扩展到多达数百台的数量。运行着单个文件系统实例的Lustre服务器总共可以向数千个计算客户端提供高达几十PB的存储容量,总吞吐量超过1TB/s。

Lustre是一个文件系统,可扩展以满足从小型HPC环境到超级计算机等不同规模的系统上运行的各种应用程序的需求,而且Lustre是使用基于对象的存储构建块创建的,这样可以最大限度地提高系统扩展性。

当元数据和数据存储在独立的服务器上时,冗余服务器可以支持存储故障转移功能,这样每个文件系统可以针对不同的工作负载进行优化。Lustre可以通过高速网络结构(如英特尔全路径架构( OPA )、InfiniBand*和以太网)向应用程序提供快速的IO。

Lustre架构

图1. Lustre文件系统体系结构


Lustre文件系统架构被设计为建立在计算机网络上的可扩展存储平台,它是基于分布式的、基于对象的存储。其中的命名空间层级结构与文件内容分开存储。Lustre中的服务分为支持元数据操作的服务和支持文件内容操作的服务。

Lustre中有两种类型的对象。数据对象是用于存储与文件内容相关联的大量数据的简单数组,而索引对象用于存储键值信息,如POSIX目录。后端存储服务器负责管理数据块存储,所有应用程序级文件系统的访问都通过客户端和存储服务器之间的网络结构来进行。

Lustre文件系统的构建块有元数据服务器和对象存储服务器,它们分别提供对命名空间的操作和大数据量的IO服务。构件块还包括一台管理服务器,它是配置信息的全局注册表,功能上独立于任何一个Lustre实例。Lustre客户端负责为应用程序和Lustre服务之间的交互提供接口。客户端上的软件为最终用户应用程序提供一致POSIX接口。Lustre的网络协议LNet提供了将服务绑定在一起的通信框架。

元数据服务器( MDS ) : MDS管理Lustre文件系统上所有的命名空间操作。文件系统的目录层级结构和文件信息包含在称为元数据目标( MDT )的存储设备上,MDS为此存储提供逻辑接口。Lustre文件系统通常具有至少一个MDS和相应的MDT,并且可以添加更多MDT来满足特定环境下的扩展需求。在创建文件时,MDS可以为文件内容控制对象存储服务器上文件内容的存储对象分配,并管理文件的打开和关闭、删除、重命名以及其他命名空间上的操作。

MDT中存储的是命名空间的元数据信息,如文件名、目录、访问权限和文件布局,这些信息有效地为文件系统上的数据提供索引。在单个文件系统中包含多个MDT的能力使目录子树可以存储在次级MDT上,这有助于将那些元数据特别密集的工作负载隔离到专用硬件上(例如可以为一组特定的项目分配一个MDT )。单个的大型目录也可以跨多个MDT存储,这样可以为在扁平化目录结构中生成的大量文件的应用程序提供可扩展性。

对象存储服务器( OSS ) : OSS为Lustre文件系统中的文件内容提供大容量存储。一个或多个对象存储服务器( OSS )将文件数据存储在一个或多个对象存储目标( OST )上,单个Lustre文件系统可以扩展到包含数百个OSS的规模。单个OSS通常为2至8个OST (还有可能更多) 提供服务,OST存储在直连存储上。Lustre文件系统的容量等于所有OSS主机上的所有OST的容量总和。

OSS通常成对配置,每两台OSS连接到一个存放了OST的共享外部存储机架中。在主动-被动高可用性故障转移的配置下,机架中的OST可被两台服务器访问,以在服务器或组件出现故障时提供服务的连续性。OST一次只能挂载在一台服务器上,通常均匀分布在OSS主机上,以平衡性能和最大化吞吐量。

管理服务器( MGS ) : MGS存储了集群中所有Lustre文件系统的配置信息,并将这些信息提供给其他Lustre主机。服务器和客户端在启动时都会连接到MGS,以便获得文件系统的配置日志。如果文件系统的配置进行了更改,包括服务器重启等,MGS负责分发该通知。

MGS会将所有Lustre节点的持久化配置信息记录在名为管理目标( MGT )的存储设备上。在高可用性配置中,MGS可以成对的与一台MDS相连,每个服务器都连接到共享的存储上。多个Lustre文件系统可以由单个MGS管理。

客户端: 通过Lustre客户端的接口,应用程序可以访问和使用文件系统上的数据。Lustre客户端可以作为主机上的文件系统装载点,它使用标准POSIX语义,为应用程序呈现一个集中化的文件系统中所有文件和数据的统一命名空间。Lustre文件系统挂载在客户端操作系统上,看上去就像任何其他POSIX文件系统一样;每个Lustre实例在客户端的操作系统上显示为独立的挂载点,每个客户端可以同时挂载几个不同的Lustre文件系统实例。

Lustre 网络( Lnet ) : Lnet是一种高速的数据网络协议,用于客户端访问文件系统。Lnet是为满足大规模计算集群的需求而设计的,并针对相当大的节点数量和高吞吐量进行了优化。Lnet支持以太网、InfiniBand*、英特尔全路径架构( OPA )和特定的计算结构,如Cray * Gemini。

Lnet是从文件系统本身中抽象出网络细节,并支持全RDMA吞吐量和零拷贝通信。

Lnet支持路由功能,这为连接不同的网络结构提供了最大的灵活性。Lnet的路由功能为桥接不同的网络或使用不同的网络结构技术(如英特尔OPA和InfiniBand )提供了一种高效的协议。在客户端数量非常大的大型文件系统中,Lnet还可以支持多重网络连接以提高性能和可靠性。有关更多详细信息和指导,请参阅《如何为文件系统配置LNet路由器--基于Lustre*软件的英特尔企业版》文档。

Lustre 扩展性

使用LDISKFS作为后端 使用ZFS作为后端 注意
最大条带数量 2000 2000 如果MDT上未启用“ea_inode”功能,ldiskfs的最高限制为160
最大条带的大小 < 4GB < 4GB
最小条带的大小 64KB 64KB
最大对象的大小 16TB 256TB
最大文件的大小 31.25PB 512PB*
文件系统最大容量 512PB 8EB*
单个目录中文件或子目录的最大数量 48字节长的文件名10M个,128字节长的文件名5M个 2^48
文件系统中的最大文件数 40亿/MDT 256万亿/MDT
文件名的最大长度 255 字节 255 字节
路径名的最大长度 4096 字节 4096 字节 受Linux VFS限制

* 理论值

高可用性与数据存储可靠性

Lustre存储

如果一个组织想要获得成功,必须确保其IT基础设施资源的可靠性和可用性。对于做存储系统的组织来说,这意味着用户必须确信他们的数据被持久地、可靠地存储,信息不会被丢失或损坏,并且数据一旦被存储,就可以根据应用程序的要求被重新调用。

Lustre旨在满足世界上最大的超级计算机上运行的应用程序对数据最密集的工作负载的需求。任何引入到这些环境中的开销都会降低应用程序的可用带宽、降低整体效率,反过来又会增加获得结果所需的时间。因此,Lustre文件系统体系结构没有为存储服务器上的数据对象实现冗余存储模式,这是由于复制和其他数据冗余机制都将引入其固有的延迟和带宽开销。

数据可靠性是在存储子系统中实现的。在存储子系统中,数据可靠性可以在很大程度上与用户应用程序级的I/O和通信隔离开来。这些存储系统通常由多端口机架组成,每个机架包含磁盘阵列或其他持久化存储设备。阵列可以是带有专用控制器的智能数据存储系统,也可以是没有专用控制软件的简单托盘(通常称为JBODs,“磁盘簇”)。

智能存储阵列的优点是通过RAID配置,降低了服务器上管理存储冗余的复杂性,并减少了计算校验和与奇偶校验的开销。专用存储控制器通常配有带电池后备电源的高速缓存,用于缓存数据,从而进一步将与写入附加数据块相关联的IO开销和主机上运行的存储服务隔离开来(如在RAID 6或RAID 10设备中的布局)。

JBOD存储模式比智能存储阵列(通常称为“硬件RAID阵列”)更简单,成本更低。但这种低成本的好处被主机服务器操作系统中更复杂的软件配置所抵消了,因为所有数据管理任务,包括冗余布局配置,都必须由主机执行和监控。Linux内核的存储卷管理标准工具(MDRAID和LVM)为管理JBOD存储提供了基本工具,并允许定义复杂的容错磁盘布局。定义块布局后,可以在软件卷的顶部格式化文件系统。

LVM和MDRAID虽然流行,但有些复杂,在大规模存储平台上难以进行有效的管理。然而近年来,JBOD体系结构由于高级的文件系统技术的发展而受到了极大的欢迎,OpenZFS就是一个例子,它使存储管理变得更容易,同时还提高了可靠性和数据完整性。自从Sun Microsystems公司 (现在被Oracle Solaris 收购)最初将OpenZFS引入Solaris操作系统以来,OpenZFS打破了许多关于存储管理和“软件RAID”的假设。

OpenZFS文件系统将文件系统和存储管理当作整体看待,从而降低了维护基于软件的存储的管理复杂性。ZFS将卷管理功能与高级文件系统集成在一起,该文件系统可高效地扩展并添加一些增强功能,包括端到端校验和以防止数据损坏、存储配置的多样性、在线数据完整性验证,以及无需执行离线修复的写入时复制体系架构。此外,ZFS中没有文件系统校验(fsck)。

基于软件的存储架构的发展也影响着存储硬件的设计,创造出了混合服务器和存储机架,将存储托盘和标准服务器组合成一个高密度机架。这些集成系统可以提供更高的机架密度和更少的物理集成复杂度(包括减少布线)。

针对Lusre服务连续性的高可用性

Lustre服务器负责处理运行在计算机网络上的应用程序的I/O请求,并管理用于维护数据持久化记录的块存储。Lustre客户端不直接与数据块存储连接,通常是完全无盘的,即没有本地数据持久化单元。因为Lustre服务器之间不进行数据复制,所以不能访问服务器意味着不能访问该服务器上管理的数据,这反过来意味着Lustre文件系统管理的数据中的一部分将不可被客户端使用。

为了防止服务出现故障,Lustre数据通常保存在与两个或更多服务器相连的多端口的专用存储上。存储被细分为卷或LUN,每个LUN代表一个Lustre存储目标( MGT、MDT或OST )。连接到存储目标的每台服务器对存储目标具有同等的访问权限,并且可以被配置为将存储模块呈现给网络,尽管在任一给定时间,只允许一台服务器访问存储模块中的单个存储目标。Lustre使用节点间故障转移模型来保持服务的可用性,这意味着如果服务器出现故障,则故障服务器管理的任何Lustre存储目标都可以转移到连接到同一存储阵列的正常服务器上。

这种配置通常被称为高可用(HA)集群。单个Lustre文件系统安装将由几个这样的HA集群组成,每个集群提供一组独立的服务,这些服务是整个文件系统服务的子集。这些独立的HA集群是高可用的Lustre并行分布式文件系统的构建模块,可将文件系统扩展到数十PB的容量,并达到超过1tb/s的联合吞吐量。

构建块模式可能会有所不同,这反映了Lustre在设计高性能存储基础架构时,就考虑到要为集成商和管理员提供灵活性。最常见的模式是将两台服务器连接到共享存储上,形成一个双HA集群的拓扑结构。虽然HA集群中服务器的数量可以有所不同,但双节点配置提供了最大的整体灵活性,代表了能提供高可靠性的最少构建块。每个构建块都具有确定的容量和可测量的吞吐量,因此可以根据目标容量和目标吞吐量,来设计Lustre文件系统所需的构建块的数量。

Christopher Morrone在LUG 2017上介绍了一种双节点HA构建块的替代方案,该方案在“集成了Pacemaker的Lustre系统及其扩展性和高可靠性”(视频)中有所描述。这是一个值得关注的、非常有趣的设计。

单个Lustre文件系统可以在数量上对构建块进行线性扩展。Lustre的最低HA配置仅需要一个包含元数据和管理服务的构建块,和一个对象存储构建块。前者提供MDS和MGS服务,后者提供OSS服务。使用这些基本的HA构建块,就可以创建出包含数百个OSS和多个MDS的文件系统,提供一个可靠的高性能平台。

图 2 给出了典型的高可用性Lustre服务器构建块的设计图,一个构件块用于元数据和管理服务,另一个用于对象存储。

图2. Lustre服务器高可用性构建模块

不是一定要为Lustre配置高可用性——Lustre文件系统可以在没有HA保护的情况下运行良好,但请注意,服务器基础架构中的故障将导致文件系统服务中断,故障服务器组件中的数据将不可访问,直到组件从故障中恢复。因此,建议将为Lustre配置高可用性,这是绝大多数Lustre文件系统安装的标准。

高可用性与GNU / Linux

每个主要的企业级操作系统都提供了一个遵循这一基本模型的高可用性集群软件框架。在当前的GNU/Linux发行版中,事实上的HA集群框架已经整合了大约两个软件包:用于集群成员和通信的Corosync软件包和用于资源管理的Pacemaker软件包。

操作系统发行版都围绕这些软件包开发了自己的管理工具。例如,红帽子企业版Linux ( RHEL )使用了PCS (Pacemaker/Corosync配置系统),而SuSE Linux企业服务器( SLES )使用了CRMSH (Cluster Resource Management Shell,集群资源管理外壳)。PCS和CRMSH都是开源应用。还有许多其他可用的工具,包括基于web的应用HAWK,它与CRMSH有接口。PCS也有自己基于web的用户界面。

虽然这种工具的多样性会限制创建和维护集群的具体过程中的可移植性,但是底层技术仍然是一样的。