IBM Spectrum Scale概述
IBM Spectrum Scale是一个集群文件系统,可以从多个节点提供对单个文件系统或一组文件系统的并发访问。 节点可以是SAN连接,网络连接,SAN连接和网络连接的混合,或无共享群集配置。 这样可以高性能地访问这一通用数据集,以支持横向扩展解决方案或提供高可用性平台。
IBM Spectrum Scale具有许多通用数据访问以外的功能,包括数据复制,基于策略的存储管理和多站点操作。 您可以创建AIX节点,Linux节点,Windows服务器节点或三者的混合集群。 IBM Spectrum Scale可以在虚拟化实例上运行,在环境中提供通用数据访问,利用逻辑分区或其他虚拟机管理程序。多个IBM Spectrum Scale集群可以在一个位置内或跨广域网(WAN)连接共享数据。
IBM Spectrum Scale的优势
IBM Spectrum Scale提供全局命名空间,IBM Spectrum Scale集群之间的共享文件系统访问,来自多个节点的同时文件访问,通过复制实现高可恢复性和数据可用性,在安装文件系统时进行更改的能力,以及即使在大环境也可以简化的管理。
IBM Spectrum Scale集群之间的共享文件系统访问
IBM Spectrum Scale允许您在一个位置内或跨广域网的不同集群之间共享数据。
尽管IBM Spectrum Scale集群是独立管理的,但IBM Spectrum Scale还通过远程集群挂载共享数据访问。 这被称为多集群环境。 当将多个集群配置为访问同一IBM Spectrum Scale文件系统时,可以使用IBM Global Security Kit(GSKit)对所有网络连接进行身份验证和检查授权。
GSKit可用于身份验证和加密群集之间传递的数据。 如果使用GSKit密码,则会对数据进行加密以进行传输。
多集群环境具有以下功能:
-
托管文件系统的集群可以为授权挂载特定文件系统的每个集群指定不同的安全级别。
-
更改安全密钥时,本地群集可以保持活动状态。 由于各种原因,定期更换密钥是必要的:
-
密钥的数量应保持很小,以促进良好的性能。
-
密钥更改阻止使用或继续使用已损坏的密钥。
-
作为一项政策,一些机构要求定期更改安全密钥。
-
IBM Spectrum Scale以类似于OpenSSH的基于主机的身份验证机制的方式使用公钥身份验证。 每个集群都有一对用于标识集群的密钥。 此外,每个群集还有一个authorized_keys列表。 authorized_keys列表中的每一行都包含一个远程集群的公钥以及该集群有权挂载的文件系统列表。 有关多集群(远程挂载)文件系统访问的详细信息,请参阅"I_BM Spectrum Scale:管理指南_"中的"访问远程GPFS文件系统"。
有关相关信息,请参阅"IBM Spectrum Scale:管理指南"中的"活动文件管理"。
改进的系统性能
使用GPFS文件系统可以通过多种方式提高系统性能。
-
允许集群中所有节点上的多个进程或应用程序同时访问相同的文件。 也就是说,它允许来自多个节点的并发读写。
-
通过在多个磁盘上分散读和写来增加文件系统的聚合带宽。
-
均衡所有磁盘的负载,以最大限度地提高其综合吞吐量,从而消除存储热点。
-
支持非常大的文件和文件系统大小。
-
允许从多个节点并发读写。
-
提供复杂的令牌管理,可以处理对集群,文件系统和文件资源的快速细粒度访问。
-
允许为GPFS守护程序通信指定多个网络,并允许在集群中使用GPFS管理命令。
要实现单个大文件的高吞吐量,需要跨多个磁盘和多个磁盘控制器对数据进行条带化处理。GPFS不是依赖于单独的卷管理层中的条带化,而是在文件系统中实现条带化。管理自己的条带为GPFS提供了实现容错和跨适配器、存储控制器和磁盘平衡负载所需的控制。GPFS中的大文件被分成大小相等的块,连续的块以循环的方式放置在不同的磁盘上。
GPFS会自动检测常见的数据访问模式,并相应地自动开始预取数据。这种预取和缓存提供了高吞吐量和快速响应时间。一些公认的I/O模式包括顺序访问模式、反向顺序访问模式和各种形式的跨步访问模式。
文件一致性
IBM Spectrum Scale通过利用复杂的令牌管理,提供对集群中客户端的并发访问。 这提供了对IBM Spectrum Scale功能,文件系统和文件资源的并发和详细访问。
有关更多信息,请参见"GPFS体系结构"。
增强的数据可用性
? GPFS提供多种功能,可提高文件系统的可靠性。 这包括自动功能如文件系统日志记录,和可配置功能如启动时智能安装文件系统,以提供灵活的同步复制工具。
GPFS允许您将存储硬件组织到 失效组 中。 失效组被定义为一组磁盘,这些磁盘共享一个共同的故障点,可能导致它们全部同时不可用。 失效组由系统管理员定义,因此在定义磁盘时需要小心,以确保正确的故障组隔离。 与GPFS的复制功能结合使用时,如果一组磁盘发生故障,则创建多个失效组可提高文件可用性。 GPFS中的复制可确保在不同失效组的磁盘上存在每个复制数据块和元数据的副本。 在这种情况下,如果一组磁盘不可用,GPFS将转移到另一个失效组中的复制副本。
在配置期间,您可以分配复制系数以指示要存储的数据和元数据的总份数。 目前,最大复制系数为3.复制允许您为每个文件设置不同级别的保护,或为整个文件系统设置一个级别。 由于复制使用额外的磁盘空间并需要额外的写入时间,因此应考虑复制对应用程序的影响,尤其是在通过WAN进行复制时。 为了减少数据复制所涉及的开销,您还可以选择仅复制元数据,以提供额外的文件系统保护。 有关GPFS复制的详细信息,请参阅"文件系统复制参数"。
GPFS是一个日志文件系统。 它为每个文件系统创建单独的日志。 如果有多个失效组,GPFS会自动复制恢复日志。 与基于地理的复制结合使用时,可提供灾难恢复功能。 有关失效组的更多信息,请参见"网络共享磁盘(NSD)创建注意事项"。有关使用GPFS进行灾难恢复的详细信息,请参阅"IBM Spectrum Scale:管理指南"中的"数据镜像和复制"。
创建文件系统后,可以将其配置为在启动GPFS守护程序时进行挂载。此功能可确保只要系统和磁盘启动,文件系统就可用。在GPFS群集之间使用共享文件系统访问时,为了减少总体GPFS控制流量,您可能决定在首次访问时挂载文件系统。这可以通过使用具有 -A automount 选项的 mmremotefs 命令或 mmchfs 命令完成。通过使用自动挂载而不是在GPFS启动时挂载,可以减少GPFS挂载流量。自动挂载仅在应用程序或用户首次使用文件系统时产生额外的控制流量。另一方面,在GPFS启动时挂载会在每次GPFS启动时产生额外的控制流量。因此,通过使用自动挂载可以更好地一次启动数百个节点。但是,通过网络文件系统(NFS)挂载导出文件系统时,在启动GPFS时挂载文件系统可能很有用。
增强的系统灵活性
使用GPFS,您的系统资源不会被冻结。 您可以在挂载文件系统时添加或删除磁盘。
当时机成熟且系统需求较低时,您可以在当前配置的所有磁盘上重新平衡文件系统。
通过QoS功能,您可以防止I/O密集型,长时间运行的管理命令控制文件系统性能,并显著延迟其它任务。
您还可以添加或删除节点,而不必在所有节点上停止并重新启动GPFS守护进程。
注意 :GPFS允许大量仲裁节点,以便于维护仲裁和继续集群操作。 GPFS还允许使用仲裁磁盘配置来进一步增强群集可用性。 有关其他信息,请参阅"仲裁"。
如果与磁盘的物理连接中断,GPFS将动态切换对服务器节点的磁盘访问,并继续通过NSD服务器节点提供数据。当GPFS发现路径已修复时,它会返回到本地磁盘访问。
根据您的应用程序、硬件和工作负载,为您的系统配置了GPFS之后,您可以重新配置GPFS以提高吞吐量。您可以为当前的应用程序和用户设置GPFS环境,确保将来可以在不危害数据的情况下进行扩展。GPFS的容量可以随着硬件的扩展而增长。
简化的存储管理
? IBM Spectrum Scale可以通过强大的策略驱动、自动分层存储管理帮助您实现信息生命周期管理(ILM)。
IBM Spectrum Scale基于以下定义和用法提供存储管理:
- 存储池
- 策略
- 文件集
存储池
存储池 是具有类似属性的磁盘或RAID的集合,这些磁盘或RAID作为一个组一起管理。 存储池提供了一种在文件系统中对存储进行分区的方法。 在规划如何配置存储时,请考虑以下因素:
-
通过将存储成本与数据值相匹配来提高性价比
-
通过以下方式提高性能:
– 减少高级存储的争用
– 减少较慢设备的影响 -
通过以下方式提高可靠性:
– 基于需要的复制
– 更好的失效遏制
策略
? 根据定义的 策略 将文件分配给存储池。 策略规定:
? 放置策略
创建文件时将文件放在特定存储池中
? 文件管理策略
- 将文件从一个存储池迁移到另一个存储池
- 根据文件特征删除文件
- 更改文件的复制状态
- 对元数据扫描和文件列表创建做快照
- 压缩静态文件
文件集
文件集 提供了一种分区文件系统的方法,并允许以比整个文件系统更精细的粒度进行管理操作。 例如,文件集允许您:
-
在文件集级别定义数据块和inode配额
-
将策略规则应用于特定文件集
-
在文件集级别创建快照
有关存储池,文件集和策略的更多信息,请参阅_"IBM Spectrum Scale:管理指南"_中的"IBM Spectrum Scale的信息生命周期管理"。
简化的管理
GPFS提供了许多标准文件系统接口,允许大多数应用程序无需修改即可执行。
操作系统实用程序补充了GPFS实用程序。 也就是说,您可以继续使用常用于普通文件操作的命令。 有关更多信息,请参阅"GPFS应用程序的注意事项"。
GPFS管理命令在名称和功能上与UNIX和Linux文件系统命令相似,但有一个重要区别:GPFS命令在多个节点上操作。一个GPFS命令可以在整个集群中执行管理功能。请参阅"I_BM Spectrum Scale:命令和编程参考"_中记录的各个命令。
GPFS命令将配置和文件系统信息保存在一个或多个文件中。这些文件统称为GPFS集群配置数据文件。GPFS在整个集群中保持其配置文件的一致性,这提供了准确和一致的确认信息(参见"集群配置数据文件")。
基本的IBM Spectrum Scale结构
IBM Spectrum Scale是在一个或多个节点上定义的集群文件系统。 在集群中的每个节点上,IBM Spectrum Scale包含三个基本组件:管理命令,内核扩展和多线程守护程序。
有关更多信息,请参见下列主题:
-
"GPFS管理命令"
-
"GPFS内核扩展
-
"GPFS守护进程"
-
对于使用Linux操作系统运行的集群中的节点,"GPFS开源可移植性层"。
有关IBM Spectrum Scale的详细讨论,请参阅"GPFS体系结构"。
GPFS管理命令
GPFS管理命令是控制GPFS操作和配置的脚本和程序。
默认情况下,GPFS命令可以从集群中的任何节点执行。如果需要在集群中的另一个节点上执行任务,该命令会自动将请求重定向到适当的节点以执行。为了使管理命令能够操作,需要在节点之间进行无密码的远程Shell通信。
有关更多信息,请参阅_"IBM Spectrum Scale:管理指南_"中的"管理GPFS文件系统的要求"主题。
GPFS内核扩展
GPFS内核扩展提供了与操作系统vode和虚拟文件系统(VFS)层的接口,以便将GPFS注册为本机文件系统。
从结构上讲,应用程序对操作系统进行文件系统调用,而操作系统则将它们呈现给GPFS文件系统内核扩展。GPFS使用操作系统的标准机制。通过这种方式,GPFS在应用程序中似乎只是另一个文件系统。GPFS内核扩展将使用系统中已经可用的资源来满足这些请求,或者向GPFS守护进程发送消息以完成请求。
GPFS守护进程
GPFS守护程序为GPFS执行所有I/O操作和缓冲区管理。 这包括顺序读的预读和未指定为同步的所有写入的回写。 I/O操作受GPFS令牌管理保护,可确保集群中所有节点之间的数据一致性。
守护进程是一个多线程进程,具有一些专用于特定功能的线程。需要优先关注的服务的专用线程不会被日常工作使用或阻塞。除了管理本地I/O之外,守护进程还与其他节点上的守护进程实例通信,以协调相同数据结构的配置更改、恢复和并行更新。在守护进程中执行的特定功能包括:
-
将磁盘空间分配给新文件和新扩展文件。 这是与文件系统管理器协调完成的。
-
目录管理包括创建新目录,在现有目录中插入和删除条目,以及搜索需要I/O的目录。
-
分配适当的锁以保护数据和元数据的完整性。 影响可从多个节点访问的数据的锁需要与令牌管理功能进行交互。
-
在守护进程的线程上启动实际的磁盘I/O。
-
与文件系统管理器一起管理用户安全性和配额。
GPFS网络共享磁盘(NSD)组件为在不能直接访问磁盘的节点上运行的应用程序提供了一种命名集群磁盘和高速访问数据的方法。
集群中的NSD可以物理地连接到所有节点,或者通过提供虚拟连接的NSD服务器提供数据。您可以为每个NSD指定最多八个NSD服务器。如果一台服务器发生故障,列表中的下一台服务器将从失败的节点中接管控制权。
对于给定的NSD,它的每个NSD服务器必须具有对同一NSD的物理访问权限。但是,不同的服务器可以为不同的非交叉客户端集提供I/O服务。GPFS中的现有子网功能确定哪个NSD服务器应该为特定的GPFS客户端提供服务。
注意: GPFS假设子网中的节点是使用高速网络连接的.。有关子网配置的其他信息,请参阅"为GPFS节点使用公共和私有IP地址"。
GPFS通过从GPFS守护进程调用的一系列命令来确定节点是否具有到底层NSD的物理或虚拟连接。这种确定(称为NSD_发现_)发生在GPFS初始启动时和挂载文件系统时。
注意: 要手动引发此_发现_操作,请使用 mmnsddiscover 命令。 有关更多信息,请参阅"IBM Spectrum Scale:命令和编程参考"中的"mmnsddiscover命令"。
这是NSD发现期间使用的默认访问顺序:
-
用于SAN、SCSI、IDE或DASD磁盘的本地块设备接口
-
NSD服务器
可以使用 useNSDserver 挂载选项更改此顺序。
建议您始终为磁盘定义NSD服务器。 在已定义NSD服务器的SAN配置中,如果物理连接断开,GPFS将动态切换到服务器节点并继续提供数据。 当GPFS发现路径已修复时,它将回退到本地磁盘访问。 这是默认行为,可以使用 useNSDserver 文件系统挂载选项进行更改。
有关详细信息,请参阅"磁盘注意事项"和"NSD磁盘发现"
GPFS开源可移植层
在Linux平台上,GPFS使用一个可加载的内核模块,使GPFS守护进程能够与Linux内核交互。
源代码是为可移植层提供的,因此GPFS可移植性可以构建并安装在各种Linux内核版本和配置上。
在Linux上安装GPFS时,可以基于特定的硬件平台和Linux发行版构建可移植性模块,以实现Linux内核与GPFS之间的通信。 有关更多信息,请参阅"在Linux节点上构建GPFS可移植层"。
IBM Spectrum Scale集群配置
? 可以通过多种方式配置IBM Spectrum Scale集群。 群集可以是硬件平台和操作系统的异构混合。
? IBM Spectrum Scale集群可以包含所有支持的节点类型的混合,包括Linux,AIX和Windows Server,这些操作系统可以在各种硬件平台上运行,例如IBMPOWER?,基于x86的服务器和IBM Z.这些节点都可以 连接到一组通用的SAN存储或通过SAN和网络连接节点的混合。 节点可以都在一个集群中,也可以跨多个集群共享数据。 群集可以包含在单个数据中心中,也可以分布在不同的地理位置。 要确定哪种群集配置最适合您的应用程序,请首先确定以下内容:
-
应用I/O性能和可靠性要求
-
底层存储硬件的属性
-
管理、安全性和所有权考虑
了解这些要求可帮助您确定哪些节点需要直接访问磁盘,哪些节点应通过NSD服务器通过网络连接访问磁盘。
有四种基本的IBM Spectrum Scale配置:
- 所有节点都连接到一组公共LUN
- 一些节点是NSD客户端
- 集群分布在多个站点上
- 数据在集群之间共享
所有节点都连接到一组公共LUN
在这种类型的配置中,集群中的所有节点都连接到一组公共LUN(例如,通过SAN)。以下是此配置需要考虑的方面:
- 希望支持最大多少节点访问LUN
- 事实上,您不能将不同的操作系统与IBM Spectrum Scale混合,以直接访问SAN上的同一组LUN
有关示例,请参见图1。
图1 具有与所有节点连接的SAN磁盘的集群
一些节点是NSD客户端
在此类配置中,只有一些节点连接到磁盘。 其它节点使用NSD路径访问磁盘。
有关示例,请参见图2。
图2 只有一些节点连接到磁盘的集群
IBM Spectrum Scale服务器和客户端
您可以配置IBM Spectrum Scale集群,其中某些节点与磁盘直接连接,而其它节点通过其它IBM Spectrum Scale节点访问磁盘。 此配置通常用于大型集群或提供经济高效的高性能解决方案。
当IBM Spectrum Scale节点为另一个IBM Spectrum Scale节点提供对磁盘的访问时,提供访问的节点称为NSD Server。 通过NSD服务器访问数据的节点称为IBM Spectrum Scale客户端。
跨多个IBM Spectrum Scale集群共享数据
IBM Spectrum Scale允许您跨多个IBM Spectrum Scale集群共享数据。当一个文件系统挂载到另一个IBM Spectrum Scale集群中之后,对数据的所有访问就像您在主机集群中一样。您可以在同一数据中心内连接多个群集,也可以通过广域网连接多个群集。在多集群配置中,每个集群可以放在单独的管理组中,以简化管理或提供跨多个组织的数据的公共视图。
图3 多集群配置
注意: 有关更多信息,请参阅"IBM Spectrum Scale:管理指南"中的"访问远程GPFS文件系统"。
GPFS体系结构
? 使用此信息可以了解GPFS的体系结构。
? 文件系统级别的节点之间的交互仅限于在并行环境中维护数据和元数据完整性所需的锁和控制流。
? GPFS体系结构的讨论包括:
- "特殊管理功能"
- "在GPFS文件系统中使用磁盘存储和文件结构"
- "GPFS和内存"
- "GPFS和网络通信"
- "应用程序和用户与GPFS的交互"
- "NSD磁盘发现"
- "故障恢复处理"
- "集群配置数据文件"
- "GPFS备份数据"
特殊管理功能
通常,GPFS在所有节点上执行相同的功能。 它在应用程序所在的节点上处理应用程序请求。 这提供了数据与应用程序的最大亲和力。
在以下情况中,一个节点提供影响多个节点操作的更全局的功能。 这些节点充当:
- "GPFS集群管理器"
- "文件系统管理器"
- "元节点"
GPFS集群管理器
每个集群有一个GPFS集群管理器。 通过在为集群指定的一组仲裁节点间进行选举来选择集群管理器。
有关详细信息,请参阅_"仲裁_"。
集群管理器执行以下任务:
- 监视磁盘租赁。
- 检测故障并管理集群中节点故障的恢复。
集群管理器确定是否存在仲裁节点以允许GPFS守护进程启动并继续使用文件系统。
- 分发远程集群中的节点必须知道的某些配置更改。
- 选择_文件系统管理器_节点。
集群管理器可防止多个节点承担文件系统管理器的角色,以避免数据损坏。 令牌管理服务驻留在文件系统管理器节点和您指定的任何其他节点上。 有关更多信息,请参阅_"IBM Spectrum Scale:管理指南"中的"使用多个令牌服务器"_。
-
处理来自远程集群节点的UID映射请求。
-
聚合集群中所有节点的健康信息。
要标识集群管理器,请发出 mmlsmgr -c 命令。 有关更多信息,请参阅"_IBM Spectrum Scale:命令和编程参考"_中的"mmlsmgr命令"。
要更改集群管理器,请发出 mmchmgr -c 命令。 有关更多信息,请参阅"_IBM Spectrum Scale:命令和编程参考"_中的"mmchmgr命令"。
文件系统管理器
每个文件系统有一个文件系统管理器(它处理使用文件系统的所有节点)。
文件系统管理器提供的服务包括:
- 文件系统配置
处理以下文件系统更改:
-
添加磁盘
-
更改磁盘可用性
-
修复文件系统
在文件系统管理器和请求服务的节点上执行挂载和卸载处理。
-
管理磁盘空间分配
控制将磁盘的哪些区域分配给每个节点,从而允许有效地并行分配空间。
-
令牌管理
文件系统管理器节点还可以执行令牌管理器服务器的职责。如果您已经显式地将集群中的一些节点指定为文件系统管理器节点,那么令牌服务器负载将分配给所有指定的管理器节点。有关更多信息,请参阅"IBM Spectrum Scale:管理指南"中的"使用多个令牌服务器"。
令牌管理服务器通过授予传递 读 或 写 文件数据或元数据的权限的令牌来协调对共享磁盘上文件的访问。当不同节点访问同一文件时,此服务确保文件系统数据和元数据的一致性。每个令牌的状态在两个地方保存:
a.在令牌管理服务器上
b.在持有令牌的令牌管理客户端上
节点第一次访问文件时,必须向令牌管理服务器发送请求,以获得相应的读或写令牌。
在授予令牌之后,节点可以继续读取或写入文件,而不需要与令牌管理服务器进行额外的交互。
这将一直持续到另一个节点上的应用程序尝试读取或写入文件中的相同区域为止。
令牌的正常流程为:
- 发给令牌管理服务器的消息。
令牌管理服务器然后返回一个授予令牌或持有冲突令牌的节点列表。
-
然后,请求节点上的令牌管理功能负责与持有冲突令牌的所有节点通信,并让它们放弃令牌。
这减轻了令牌服务器必须处理持有冲突令牌的所有节点。 为了让节点放弃令牌,守护进程必须放弃它。 首先,守护进程必须释放使用此令牌持有的任何锁。 这可能涉及等待I / O完成。
附:使用多个令牌服务器
使用基于令牌的锁管理实现分布式锁,允许GPFS维护文件系统的一致视图。 与每个可锁对象相关联的是令牌。
在可以将对象的锁授予特定节点上的线程之前,该节点上的锁管理器必须从令牌服务器获取令牌。 令牌管理器节点的总数取决于群集中定义的管理器节点的数量。
首次挂载文件系统时,文件系统管理器是文件系统的唯一令牌服务器,一旦外部挂载次数超过一个,文件系统管理器指定集群中定义的所有其他管理器节点来共享令牌服务器负载。
一旦令牌状态被分发,它就会一直被分发,直到所有外部挂载都消失为止。唯一有资格成为令牌管理器节点的节点是那些指定为管理器节点的节点。
可以在管理器节点上保留令牌的文件数受 mmchconfig 命令的 maxFilesToCache 和 maxStatCache 配置参数的值的限制。 跨多个令牌管理器节点分发令牌允许同时管理或保留更多令牌,从而在同时访问许多可锁定对象的情况下提高性能。
- 配额管理
在启用配额的文件系统中,每当挂载GPFS文件系统时,文件系统管理器节点都会自动承担配额管理职责。配额管理包括:
- 将磁盘块分配给写入文件系统的节点
- 定期将分配的空间与配额限制进行比较
注意:
a.要减少写入文件系统的节点的空间请求数,配额管理器会分配比请求的磁盘块更多的磁盘块(请参阅"启用配额")。 这允许节点写入文件系统,而无需每次写入文件系统时都转到配额管理器并检查配额限制。
b.启用配额且超过100,000用户或组的文件系统应避免将内存较低的节点指定为管理器,或由于配额管理器操作对内存的高需求而负载过重的节点。
文件系统管理器由集群管理器选择。 如果文件系统管理器因任何原因而失败,则集群管理器会选择新的文件系统管理器,除了完成接管所需的时间外,所有功能都会继续运行而不会中断。
根据应用程序工作负载,文件系统管理器提供的服务的内存和CPU要求可能使在与文件系统管理器相同的节点上运行资源密集型应用程序变得不可取。 GPFS允许您通过以下方式控制从中选择文件系统管理器的节点池:
-
在创建群集时,使用 mmcrcluster 命令
-
将节点添加到群集时的 mmaddode 命令
-
mmchode 命令,用于在任何时候更改节点的指定
除了在发生多个故障的某些故障情况下外,这些首选项都是正确的。 有关更多信息,请参阅"IBM Spectrum Scale:问题确定指南"中的"多个文件系统管理器故障"。您可以通过发出 mmlsmgr 命令列出当前分配给哪个节点为文件系统管理器,或者通过 mmchmgr 命令更改已分配给该任务的节点。
元节点
每个打开的文件有一个元节点。 元节点负责维护文件元数据的完整性。
在几乎所有情况下,打开文件最长连续时间段的节点是元节点。 访问文件的所有节点都可以直接读取和写入数据,但元数据的更新只能由元节点写入。 每个文件的元节点独立于任何其它文件的元节点,并且可以移动到任何节点以满足应用程序要求。
在GPFS文件系统中使用磁盘存储和文件结构
文件系统(或条带组)由一组磁盘组成,这些磁盘存储文件数据、文件元数据和支持实体(如配额文件和恢复日志)。
将磁盘分配给文件系统时,会在每个磁盘上写入文件系统描述符。 _文件系统描述符_写在文件系统中每个磁盘上的固定位置,GPFS使用它来识别该磁盘及其在文件系统中的位置。 文件系统描述符包含文件系统规范和有关文件系统状态的信息。
? 在每个文件系统中,就像在其它UNIX文件系统中一样,使用inode、间接块和数据块将文件写入磁盘。 Inode和间接块被视为元数据,与数据或实际文件内容不同。 使用 mmcrfs 命令创建文件系统或使用 mmchdisk 命令修改文件系统时,可以控制GPFS用于存储元数据的磁盘。
每个文件的元数据存储在inode中,包含文件大小和上次修改时间等信息。 inode还留出空间来跟踪文件数据的位置。在IBM Spectrum Scale v3.5或更高版本中创建的文件系统上,如果文件足够小以至于其数据可以适合此空间,则数据可以存储在inode本身中。此方法称为inode中的数据,可提高使用许多小文件的工作负载的性能和空间利用率。否则,文件的数据必须放在数据块中,并且inode用于查找这些块的位置。然后使用inode的位置跟踪空间来存储这些数据块的地址。如果文件足够大,则其所有数据块的地址都不能存储在inode本身中,而inode则指向一个或多个级别的间接块。这些文件的附加元数据空间树可以容纳非常大的文件的所有数据块地址。存储数据块地址所需的级别数称为文件的_间接级别_。
总而言之,在3.5或更高版本中创建的文件系统上,文件通常以inode中的数据开始。当它超出这个阶段时,或者如果文件系统是在V3.5之前创建的,inode就会存储指向数据块的直接指针;这种安排被认为是零水平的间接性。当需要更多的数据块时,通过添加一个间接块并将直接指针移到那里来增加间接级别;inode然后指向这个间接块。随着文件的增长,间接块的后续级别也会增加。间接块结构的动态特性允许文件大小增长到文件系统的大小。
出于安全考虑,加密文件将跳过inode中的数据阶段。它们总是从零级间接开始。
图4 GPFS文件具有典型的UNIX结构
文件系统限制:
-
GPFS集群中挂载的文件系统的最大数量是256。
-
支持的文件系统大小取决于安装的GPFS的版本。
-
文件系统中的最大文件数不能超过体系结构限制。
有关这些文件系统限制的最新信息,请参阅IBM知识中心的IBM Spectrum Scale FAQ。
GPFS使用文件系统描述符查找构成文件系统条带组的所有磁盘,包括它们的大小和顺序。一旦处理了文件系统描述符,就可以对文件系统中的任何块进行寻址。特别是,可以找到描述_inode文件_的第一个inode和少量包含其余文件系统信息的inode。inode文件是表示单个文件、目录或链接的固定长度记录的集合。锁定的单位是单个inode。具体来说,在inode文件中有针对以下组件的固定inode:
-
文件系统的根目录
-
_ _块分配图,它是位的集合,表示文件系统磁盘中磁盘空间的可用性。分配图中的一个单元表示子块。子块是可分配给文件的最小连续磁盘空间单位。子块的大小和块中子块的数目取决于块的大小。分配图被细分为驻留在磁盘扇区边界上的区域。区域数在文件系统创建时由参数设置,该参数指定将访问该文件系统的节点数。区域被单独锁定,因此,不同的节点可以独立和并发地分配或取消分配由不同区域表示的空间。
-
_ _inode分配图,表示inode文件中inode的可用性。_inode分配图_位于_inode分配文件_中,表示可以创建的所有文件、目录和链接。 mmchfs 命令可用于更改文件系统中可创建的最大文件数,最高可达体系结构限制。
这些文件中的每个文件的数据内容都是从磁盘上的数据空间中提取的。这些文件被认为是元数据,只在允许元数据的磁盘上分配。
配额文件
对于启用配额的文件系统,配额文件是在文件系统创建时创建的。
注意 :从GPFS 4.1开始,配额文件在外部不再存在,或者从文件系统的根目录中不再可见;因此,使用 mmbackupconfig 备份GPFS配额信息。
文件系统有三个配额文件:
-
用户配额文件 user.quota
-
组配额文件 group.quota
-
文件集配额文件 fileset.quota
对于在文件系统中工作的每个用户, user.quota 文件包含单个用户在文件系统中的限制和当前使用情况的记录。 如果已建立文件系统的新用户的默认配额限制,则此文件还包含该值的记录。
对于其用户在文件系统中工作的每个组, group.quota 文件包含组中所有用户在文件系统中的公共限制和当前使用情况的记录。 如果已建立文件系统的新组的默认配额限制,则此文件还包含该值的记录。
对于每个文件集, fileset.quota 文件都包含文件集中的限制和当前使用情况的记录。 如果已建立文件集的默认配额限制,则此文件还包含该值的记录。 文件集中块和inode的配额限制与特定用户或用户组的限制无关。 在分配期间,将检查相应的用户,组和文件集限制,并应用最低阈值。
GPFS恢复日志
GPFS恢复日志是在创建文件系统时创建的。根据需要自动创建其他恢复日志。文件系统管理器将恢复日志分配给访问文件系统的每个节点。
GPFS通过严格的操作顺序和日志记录的组合来维护文件的磁盘结构的原子性。维护的数据结构是inode、间接块、分配图和数据块。在任何引用数据的控制结构写入磁盘之前,数据块都被写入磁盘。这将确保在新文件中永远看不到数据块的以前内容。以这样的方式写入和记录分配块、inode和间接块,这样就永远不会有指向标记为未分配且不可从日志恢复的块的指针。
只有在打开默认元数据复制( -m 2 )或显式启用日志( –log-replicas 2 )时,才会复制恢复日志。 您可以使用 mmlsfs 命令查看是否为文件系统启用了日志复制,并查看了该值 -m 和 –log-replicas 参数。 如果两者都已设置,则 –log-replicas 值优先于日志复制的 -m 值。
在某些故障情况下,块被标记为已分配但尚未分配给文件,这些可以通过在线或离线模式下运行 mmfsck 来恢复。 日志恢复作为以下部分运行:
- 节点故障会影响失败节点可能已锁定的对象,恢复此类节点故障。
- 在到处卸载文件系统之后的 mount 。
注意 :元数据,配额文件和恢复日志未使用的空间用于用户数据和目录,并根据需要从块分配图中分配。
GPFS和内存
GPFS使用三个内存区域:从内核堆分配的内存,在守护进程段中分配的内存,以及从守护进程和内核访问的共享段。
从内核堆分配的内存
GPFS使用内核内存来实现控制结构,如vode和与操作系统建立必要关系的相关结构。
在守护进程段中分配的内存
GPFS使用守护进程段内存来实现文件系统管理器功能。因此,文件系统管理器节点需要更多的守护进程内存,因为整个文件系统的令牌状态最初都存储在那里。需要守护程序内存的文件系统管理器功能包括:
-
持久化执行命令的结构
-
持久用于I/O操作的结构
-
与其它节点相关的状态
文件系统管理器是令牌管理器,其他节点可以承担令牌管理职责; 因此,任何管理器节点都可能消耗额外的内存用于令牌管理 有关更多信息,请参阅_"IBM Spectrum Scale:管理指南_"中的_"使用多个令牌服务器_"。
从守护进程和内核访问的共享段
共享段由在守护进程启动时分配的固定内存和未固定内存组成。初始值是系统默认值。但是,您可以稍后使用 mmchconfig 命令更改这些值。请参见"集群配置文件"。
固定内存称为_页池_,通过设置 pagepool 集群配置属性进行配置。 该固定存储区用于存储文件数据和用于优化各种数据访问模式的性能。 在共享段的非固定区域中,GPFS保存有关打开的和最近打开的文件的信息。 这些信息有两种形式:
- 完整的inode缓存
- 进程的状态缓存
固定内存
GPFS使用固定内存(也称为页池内存)来存储文件数据和元数据,以支持I/O操作。
对于某些访问模式,增加页池内存可以提高I/O性能。增加页池内存在以下情况下很有用:
-
有可能与应用程序执行重叠的频繁写入。
-
可以在页池中容纳的文件数据经常被重用。
-
I/O模式包含各种大量的顺序读,以便预取数据提高性能。
固定的内存区域不能交换到磁盘,这意味着GPFS将始终至少消耗系统内存中的 pagepool 属性的值。因此,在确定 pagepool 属性的值时,请考虑GPFS和在节点上运行的其他应用程序的内存需求。
非固定内存
有两级缓存用于存储文件元数据。
Inode缓存
inode缓存包含打开文件以及一些不再打开的最近使用的文件的inode副本。 maxFilesToCache 参数控制GPFS缓存的inode数。节点上的每个打开文件都会占用inode缓存中的空间。 inode缓存中的额外空间用于存储最近使用的文件的inode,以防另一个应用程序需要该数据 。
打开文件的数量可以超过 maxFilesToCache 参数定义的值,以使应用程序能够运行。 但是,当超过 maxFilesToCache 数时,不再有最近打开文件的缓存,只有打开的文件inode数据保留在缓存中。
Stat缓存
stat缓存包含足够的信息来响应有关文件的查询并打开它,但没有足够的信息来读取或写入文件。 stat缓存中的inode有足够的数据来响应**stat()**调用(例如,在UNIX节点上发出 ls -l 命令时)。 与完整inode相比,stat缓存条目消耗的内存要少得多。Stat缓存条目为以下内容保留:
- 最近访问的文件
- 最近由多个**stat()**调用访问的目录
要设置stat缓存的值,请使用 mmchconfig 命令的 maxStatCache 属性。
注意:
-
如果使用模式表明这将是高效的(例如,如果为大型目录发出多个ls -l命令),GPFS将为stat缓存条目预取数据。
在Linux上,不使用 maxStatCache 。所有节点缓存都在由 maxFilesToCache 控制的池中完成。因此,在Linux上,如果您没有使用本地只读缓存(LROC),请将 maxStatCache 设置为0,以便inode不会通过stat缓存访问 maxFilesToCache 池。直通是处理inode的一个额外步骤。如果使用LROC,则使用 maxStatCache 所使用的池,并且必须对其进行优化。GPFS共享段的大小可以限制 maxStatCache 的最大设置。
-
inode缓存和stat缓存中的每个条目都需要适当的令牌:
a.以确保缓存的信息保持正确
b.用于在文件系统管理器节点上存储令牌
- 根据使用模式,当信息更新需要撤消令牌时,系统性能可能会降低。 当两个或多个节点共享相同的信息并将最新信息移动到其他位置时,会发生这种情况。 当前节点需要访问更新的信息时,令牌管理器必须从该节点撤销该令牌,然后该节点才能访问新位置中的信息。
GPFS和网络通信
? 在GPFS集群中,您可以为GPFS守护进程通信和GPFS命令的使用指定不同的网络。
? 您可以使用 mmaddode 、 mmchode 和 mmcrcluster 命令来进行这些选择。在这些命令中,节点描述符允许您为每个节点上的那些功能指定单独的节点接口。GPFS的正确操作直接依赖于这些选择。
? 如果集群中的节点上启用了防火墙,GPFS可能无法正常工作。 要确保正常运行,必须将防火墙配置为允许相应的端口或禁用防火墙。 有关更多信息,请参阅"IBM Spectrum Scale:管理指南"中的"GPFS端口使用情况"和"IBM Spectrum Scale:命令和编程参考"中的_"mmnetverify命令_"。
GPFS守护进程通信
在集群环境中,GPFS守护进程依赖于TCP/IP的正确操作。
这些依赖关系之所以存在,是因为:
- 节点之间的通信路径必须在第一次尝试通信时建立。
- 集群中的每个节点都需要在启动和挂载过程中与集群管理器和文件系统管理器通信。
- 一旦建立了连接,它就必须保持活动状态,直到GPFS守护进程在节点上关闭为止。
注意 :建立其它通信路径取决于节点之间的应用程序使用情况。
守护进程还使用套接字与其它节点上的文件系统的其它实例通信。具体来说,每个节点上的守护进程与文件系统管理器通信,以分配日志、分配段和配额,以及各种恢复和配置流。GPFS要求集群中所有节点之间存在活动节点间通信路径,用于锁定、元数据协调、管理命令和其他内部功能。这条路径的存在对于GPFS的正确操作是必要的。如果节点上的GPFS守护进程的实例感觉到该通信不可用,它就会关闭。如果通信对另一个节点不可用,则两个节点中的一个将退出GPFS。
为GPFS节点使用公共和私有IP地址:
GPFS允许系统管理员设置集群,以便使用公共和私有IP地址。例如,如果一个集群有一个内部网络连接它的一些节点,那么使用私有IP地址在这个网络上进行通信,并使用公共IP地址与这个网络之外的资源进行通信,这是非常有利的。
公共IP地址是那些可用于从存在连接的任何其他位置访问节点的地址。私有IP地址只能用于与通信适配器直接连接的节点之间的通信。私有IP地址在硬件设置时分配给每个节点,并且必须在特定的地址范围内(IP地址在10.0.0.0、172.16.0.0或192.168.0.0子网上)。有关私有IP地址的更多信息,请参考RFC 1597-专用互联网地址分配。
? mmchconfig 命令上的 subnets 操作数指定GPFS可用于专用TCP/IP通信的有序子网列表。 列出的每个子网都可能有一个集群名称列表(允许shell样式的通配符),用于指定可直接访问同一子网的其它GPFS集群。
当GPFS守护进程在节点上启动时,它从本地IP配置获取它自己的IP地址和相关子网掩码的列表。对于每个IP地址,GPFS检查该地址是否位于 subnets 配置参数中指定的子网之一。它记录匹配的IP地址和子网掩码的列表,然后侦听任何这些地址上的连接。如果节点的任何IP地址(在创建群集时或节点添加到群集时指定)未使用 subnets 配置参数指定,GPFS将自动将其添加到节点IP地址列表的末尾。
因此,当您为节点使用公共IP地址时,无需使用 subnets 配置参数明确列出公共IP子网。 例如,配置系统的常规方法是使用在mmcrcluster命令中解析为外部以太网IP地址的主机名,然后,如果系统管理员希望GPFS在群集中使用高性能交换机,则添加一个 HPS子网的 subnets 配置参数。 可以添加两个 subnets 配置参数,一个用于HPS,另一个用于外部以太网,确保它们按顺序排列。 在这种情况下,在创建集群或将节点添加到集群时,指定每个节点的两个地址中的哪一个无关紧要。 例如,要添加对仅使用交换机地址的现有集群的远程访问,只需添加两个 subnets 配置参数即可。
当一个节点加入集群(自己的集群启动时,或者在挂载另一个集群拥有的文件系统的另一个集群启动时),该节点将它的IP地址列表(根据 subnets 配置参数的顺序排序)发送给集群管理器节点,集群管理器节点将该列表作为连接协议的一部分转发给所有其它节点。不需要传播其它附加信息。
当节点尝试与另一个节点建立连接时,GPFS会根据以下过程确定要使用的目标IP地址:
-
对于每个自己的IP地址,它会在另一个节点的IP地址列表中搜索同一子网上的地址。
-
对于普通的公共IP地址,这是通过比较IP地址值和节点的IP地址的子网掩码"与运算"的结果来完成的。
-
对于私有IP地址,GPFS假设两个IP地址位于同一子网中,但前提是两个节点位于同一集群中,或者另一个节点位于subnets配置参数中显式列出的一个集群中。
-
如果两个节点在公共子网上具有多个IP地址对,则GPFS将根据在初始化节点的配置参数中指定的 subnets 顺序使用找到的第一个IP地址对。
-
如果给定的节点对不共享由 subnets 配置参数定义的公共子网,则IBM Spectrum Scale将基于节点的守护进程地址使用网络,该地址将作为每个节点的网络地址列表中的最后一个条目自动添加。
注意: 当您使用子网时,与守护进程地址相对应的接口和与子网设置相匹配的接口都必须是可操作的。
有关更多信息和示例,请参阅"IBM Spectrum Scale:管理指南"中的_"使用公共和私有IP地址进行远程访问_"。
网络通信和GPFS管理命令
套接字通信用于处理GPFS管理命令。 根据命令的性质,GPFS可以在发出命令的节点上或在文件系统管理器上处理命令。 实际的命令处理器只是组装输入参数,并使用套接字将它们发送到本地节点上的守护进程。
某些GPFS命令允许您指定单独的管理网络名称。 您可以使用节点描述符的 AdminNodeName 字段来制定此规范。 有关其他信息,请参阅"IBM Spectrum Scale:命令和编程参考"以获取这些命令的描述:
-
mmaddnode
-
mmchnode
-
mmcrcluster
如果命令更改文件系统的状态或其配置,则在文件系统管理器中处理该命令。更改的结果被发送到所有节点,命令处理的状态返回给节点,并最终返回给发出命令的进程。例如,将磁盘添加到文件系统的命令来源于用户进程,并且:
-
发送到守护进程并进行验证。
-
如果可以接受,则将其转发给文件系统管理器,该管理器更新文件系统描述符。
-
所有具有此文件系统的节点都会被通知需要刷新其缓存的文件系统描述符副本。
-
返回码先转发给原始守护进程,然后再转发给原始用户进程。
请注意,这种通信链可能允许与命令处理相关的故障发生在发出命令的节点以外的节点上。
应用程序和用户与GPFS的交互
有四种方法可以与GPFS文件系统进行交互。
您可以使用以下方法与GPFS文件系统进行交互:
- "IBM Spectrum Scale GUI简介"中描述的IBM Spectrum Scale管理GUI
- 在GPFS守护程序初始化时或文件系统挂载时运行的操作系统命令(请参阅"操作系统命令")
- 从需要访问GPFS控制的文件的应用程序(请参阅"操作系统调用")发出的操作系统调用(如Open()
- _"IBM Spectrum Scale:命令和编程参考"_中描述的GPFS命令
- _"IBM Spectrum Scale:命令和编程参考"_中描述的GPFS编程接口
- "IBM Spectrum Scale管理API"中描述的IBM Spectrum Scale管理API
操作系统命令
在以下场景中,操作系统命令对GPFS数据进行操作。
- GPFS守护进程的初始化
- 文件系统的挂载
GPFS守护进程的初始化:
GPFS守护进程的初始化可以作为节点启动顺序的一部分自动完成,也可以使用 mmstartup 命令手动完成。
? 守护进程启动进程加载必要的内核扩展(如果它们以前没有被其他进程加载)。然后,守护进程等待集群管理器声明仲裁存在。当达到仲裁时,群集管理器将组的状态从_initializing_更改为_active_。 当GPFS中出现"mmfsd ready"消息时,您可以在日志文件中( /var/adm/ras/mmfs.log.latest )或运行 mmgetstate 命令时看到转换为活动状态。当此状态从_initializing_更改为_active_时,守护进程已准备好接受挂载请求。
文件系统的挂载:
GPFS文件系统是使用GPFS mmmount 命令挂载的。
在AIX或Linux上,还可以使用操作系统的 mount 命令。GPFS挂载处理构建了提供数据路径所需的结构,并在请求挂载的节点和文件系统管理器节点上执行。如果没有文件系统管理器,则调用集群管理器,由集群管理器指定一个。文件系统管理器确保文件系统已准备好挂载。文件系统管理器确保以下每一项都是正确的:
-
mmfsck 命令(该命令检查和修复文件系统)运行的实用程序没有冲突。
-
mmcheckquota 命令(该命令检查文件系统用户、组和文件集配额)运行的实用程序没有冲突。
-
所有磁盘都可用。
-
完成任何必要的文件系统日志处理,以确保文件系统上的元数据是一致的。
在本地节点上,初始化已安装文件系统所需的控制结构,并创建令牌管理功能域。 此外,还会打开组成文件系统的每个磁盘的路径。 部分挂载处理涉及解除磁盘隔离,如果此节点先前已失败,则可能需要这些磁盘。 无需用户干预即可自动完成。 如果磁盘不足,则挂载将失败。 也就是说,在复制系统中,如果两个磁盘在不同的故障组中关闭,则挂载将失败。 在非复制系统中,一个磁盘关闭将导致挂载失败。
操作系统调用
驻留在GPFS文件系统中的文件的最常见接口是通过对操作系统的正常文件系统调用。
当文件被访问时,操作系统将请求提交给GPFS内核扩展,该扩展试图使用内存中的数据满足应用程序请求。如果可以做到这一点,则通过操作系统接口将控制返回给应用程序。如果数据在内存中不可用,则请求由守护进程线程传输以执行。守护进程线程在内核中的系统调用中等待工作,并根据需要进行调度。守护进程级别的可用服务包括令牌的获取和磁盘I/O。
操作系统调用在以下期间对GPFS数据进行操作:
- 打开文件
- 读取数据
- 写入数据
打开GPFS文件:
打开 驻留在GPFS文件系统中的文件涉及应用程序调用指定文件名的操作系统。
处理文件 打开 涉及两个阶段:
-
标识应用程序指定的文件
-
基于inode构建所需的数据结构
内核扩展代码处理目录搜索。如果所需的信息不在内存中,则调用守护进程来获取解析查找所需的目录或目录的一部分所需的令牌,然后将目录从磁盘读入内存。
查找过程一次出现一个目录,以响应来自操作系统的调用。在打开的最后阶段,从磁盘读取文件的inode并连接到操作系统vode结构。这需要获取inode上的锁和指示metanode的存在的锁。无论何时打开文件,都会发现或创建metanode。
-
如果没有其它节点打开此文件,则此节点将成为元节点。
-
如果另一个节点有先前的打开,那么该节点就是metanode,这个节点直接与metanode进行元数据操作。
如果 open 涉及创建新文件,则在父目录和inode分配文件块上获得适当的锁。创建目录条目,选择并初始化inode,然后完成 open 处理。
读取文件数据:
调用GPFS read 函数以响应 read 系统调用。
根据系统活动和状态,文件 read 处理分为三个级别的复杂程度:
-
缓冲区在内存中可用
-
令牌在内存中可用,但必须读取数据
-
必须获取数据和令牌
在完成 read 时,确定预取的需要。GPFS根据磁盘的性能、数据访问模式和应用程序读取数据的速率,为每个打开的文件计算所需的预读。如果需要额外的预取,则会向守护进程发送消息,该守护进程在当前 read 完成后异步处理该消息。
缓冲区和锁在内存中可用:
_ _ 最简单的 read 操作发生在数据已在内存中可用时,这可能是因为数据是预取的,也可能是因为它最近已被另一个 read 调用读取。
在任何一种情况下,缓冲区都是本地锁定的,并且数据被复制到应用程序数据区域。当拷贝完成时,锁被释放。请注意,不需要令牌通信,因为对缓冲区的占有意味着节点至少具有包含缓冲区的读令牌。拷贝之后,如果合适的话,启动预取。
令牌在本地可用,但必须读取数据:
__当数据不在内存中时,第二种更复杂的 read 操作类型是必需的。
这发生在三种情况下:
- 该令牌已在未发现争用的先前的 read 中获得。
- 缓冲区已被窃取用于其它用途。
- 一些随机 read 操作。
在一系列读取中的第一次读取中,令牌在本地不可用,但在第二次读取中,令牌可能是可用的。
在这种情况下,找不到缓冲区,必须从磁盘读取到缓冲区。没有令牌活动发生,因为节点具有足够强的令牌,可以在本地锁定文件的所需区域。消息被发送到守护进程,该守护进程由一个等待的守护进程线程处理。守护进程分配缓冲区,锁定所需的文件范围,以便令牌在I/O期间不会被窃取,并对保存数据的设备启动I/O。起始线程等待此操作完成,并在完成后由守护进程发布。
必须获取数据和令牌:
第三种也是最复杂的 read 操作要求在应用程序节点上获取令牌和数据。
内核代码确定数据在本地不可用,并在发送消息后向等待的守护进程发送消息。守护进程线程确定它没有执行操作所需的令牌。在这种情况下,令牌获取请求被发送到令牌管理服务器。请求的令牌指定该文件范围的所需长度,这是此缓冲区所需的长度。如果按顺序访问该文件,则指定所需的数据范围,从这个读取点开始,一直扩展到文件的末尾。在不存在冲突的情况下,将授予所需的范围,从而无需在后续读取时进行额外的令牌调用。在获得所需的最小令牌之后,流继续进行"文件系统管理器"中描述的令牌管理过程。
写文件数据:
? write 处理是由对操作系统的系统调用发起的,当写涉及GPFS文件系统中的数据时,系统调用GPFS。
GPFS将数据从用户缓冲区同步地移动到与应用程序写入调用的文件系统缓冲区,但是实际将延迟写入至磁盘。 这种异步I/O技术可以更好地调度磁盘I/O操作并提高性能。 文件系统缓冲区来自根据 mmchconfig 命令中的 pagepool 参数分配的内存。 增加页池的大小可以允许延迟更多写入,这可以提高某些工作负载的性能。
计划在下列情况下将数据块写入磁盘:
-
应用程序指定了 同步写 。
-
系统需要用于缓冲写入数据的内存。
-
文件令牌已被撤销。
-
按顺序写入的文件块的最后一个字节被写入。
-
运行系统 sync 命令。
在其中一个发生之前,数据仍保留在GPFS内存中。
根据系统活动和状态, write 处理分为三个级别的复杂程度:
-
缓冲区在内存中可用
-
令牌在内存中可用,但必须读取数据
-
必须获取数据和令牌
在相同条件的子集下刷新元数据更改。如果该节点是metanode,则可以直接写入,也可以通过metanode来写入,metanode合并来自多个节点的更改。如果多个节点上的进程正在文件的同一区域中创建新的数据块,则最经常发生最后一种情况。
缓冲区在内存中可用:
最简单的路径涉及这样一种情况,即该文件块已存在缓冲区,但可能没有足够强的令牌。
如果先前的写调用访问了该块,并且该块仍然驻留在内存中,则会发生这种情况。先前的调用中的写令牌已经存在。在这种情况下,数据将从应用程序缓冲区复制到GPFS缓冲区。如果这是顺序写入,并且最后一个字节已写入,则将异步消息发送到守护进程,以调度缓冲区写入磁盘。此操作发生在与应用程序执行重叠的守护进程线程上。
令牌在内存中可用,但必须读取数据:
在两种情况下,令牌可能存在,但缓冲区不存在。
-
缓冲区最近被窃取,以满足对缓冲区空间的其它需求。
-
先前的 write 获得了超出其需要的期望范围令牌。
在这两种情况下,内核扩展都会确定缓冲区不可用,挂起应用程序线程,并向请求缓冲区的守护进程服务线程发送消息。如果写调用针对的是一个完整的文件系统块,则将分配一个空缓冲区,因为整个块将被替换。如果写调用小于一个完整块,并且块的其余部分存在,则必须读取和覆盖该块的现有版本。如果 write 调用在文件中创建了一个新块,守护进程将在分配图中搜索空闲的块,并将其分配给该文件。当缓冲区和磁盘上的块都与缓冲区相关联时, write 就像在"缓冲区在内存中可用"中一样进行。
必须获取数据和令牌:
__ 第三种,也是最复杂的 write 路径,发生在本地节点上既不存在缓冲区也不存在令牌的情况下。
在分配缓冲区之前,为所需的文件区域获取令牌。与 read 一样,如果正在发生顺序操作,如果不存在冲突,则将获得覆盖比所需范围更大范围的令牌。如果需要,令牌管理功能将从持有令牌的另一个节点撤销所需的令牌。获得并锁定了必要的令牌后, write 将像"本地可用的令牌,但必须读取数据"一样继续。
stat()系统调用:
**stat()**系统调用返回与文件关联的大小和参数的数据。该调用由 ls-l 命令和其它类似函数发出。
满足**stat()系统调用所需的数据包含在inode中。GPFS对stat()系统调用的处理与其它文件系统的不同之处在于,它支持处理所有节点上的stat()**调用,而无需通过服务器传递调用。
这要求GPFS获取保护元数据准确性的令牌。为了最大限度地提高并行性,GPFS单独锁定inode并获取单个inode。在可以检测到模式的情况下,例如试图在较大的目录中使用**stat()**所有文件时,将并行地获取inode,以便使用它们。
Inode以两种形式缓存在GPFS中:
-
完整的inode
-
有限的stat缓存形式
需要完整的inode来对文件执行数据I/O。
stat缓存形式比完整的inode小,但足以打开文件并满足**stat()**调用,它用于辅助 ls-l 、 du 和某些备份程序,这些程序扫描整个目录,查找修改时间和文件大小。
这些缓存和对inode上单个令牌的要求是第二次调用目录扫描应用程序的速度可能比第一次更快的原因。
GPFS命令处理
GPFS命令分为两类:本地处理的命令和涉及文件系统的需在文件系统管理器处理的命令。
文件系统管理器用于处理任何更改文件系统状态的命令。当发出命令并且没有挂载文件系统时,将为该任务指定一个文件系统管理器。 mmchdisk 命令和 mmfsck 命令代表在文件系统管理器中处理的两种典型类型的命令。
mmchdisk命令:
当更正导致一个或多个磁盘不可用的故障时,将发出 mmchdisk 命令。该命令的需求可以由 mmlsdisk 命令的输出来确定。
** mmchdisk** 执行四项主要功能:
-
它将磁盘的可用性更改为 recovering ,并在所有处理完成后变为 up 。所有GPFS实用程序都遵循availability为 down 时不使用磁盘。 recovering 意味着恢复尚未完成,但用户已授权使用磁盘。
-
它将数据和元数据的任何副本还原为正确的值。这包括扫描系统中的所有元数据,并将最新的元数据复制到正在恢复的磁盘上。请注意,这涉及到扫描大量数据,并可能重写磁盘上的所有数据。对于需要扫描大量元数据的大型文件系统,这可能需要很长时间。
-
它停止或暂停磁盘的使用。这只涉及更新磁盘状态,并且应该快速运行。
-
更改磁盘属性的元数据。
随后对 mmchdisk 的调用将尝试恢复具有availability为" recovering
"的剩余任何磁盘上的复制数据,并具有恢复的可用性。
有关更多信息,请参阅_"IBM Spectrum Scale:命令和编程参考_"中的"mmchdisk命令"。
mmfsck命令:
mmfsck 命令修复文件系统结构。
mmfsck 命令以两种模式运行:
-
在线
-
离线
出于性能原因,GPFS日志允许在节点故障后标记磁盘块为 used, 但实际上不是文件的一部分的情况。在线版本的 mmfsck 将清除该条件,运行 mmfsck-o-n 将扫描文件系统,以确定更正是否有用。 mmfsck 的在线版本在文件系统管理器上运行,并扫描所有inode和间接块,查找已分配但未使用的磁盘块。如果被授权修复文件系统,它将释放这些块。如果未被授权修复文件系统,它将向调用节点上的标准输出报告条件。
** mmfsck** 的脱机版本是无法使用的文件系统的最后一道防线。在GPFS恢复日志因磁盘媒体故障而不可用的情况下,通常需要使用 mmfsck 。 mmfsck 命令在文件系统管理器上运行,并向调用节点报告状态。它与文件系统的任何其他用途互不兼容,并检查任何正在运行的命令或挂载文件系统的任何节点。如果发现任何情况,它就会退出。如果任何磁盘出现 down 并需要使用 mmchdisk 将其更改为 up 或 recovering ,它也会退出。 mmfsck 命令执行一次完整的文件系统扫描,以查找元数据的不一致。在大型文件系统上,此过程可能会很长。它请求用户允许修复发现的任何问题,这些问题可能导致删除损坏的文件或目录。此命令的处理类似于其它文件系统的处理。
有关更多信息,请参阅_"IBM Spectrum Scale:命令和编程参考_"中的"mmfsck命令"。
NSD磁盘发现
当GPFS守护进程在节点上启动时,它通过读取写在GPFS拥有的每个磁盘上的磁盘描述符来发现定义为NSD的磁盘。无论分配给磁盘的当前操作系统设备名称是什么,都可以找到NSD。
在UNIX上,NSD发现由GPFS shell脚本 /usr/lpp/mmfs/bin/mmdevdiscover 完成,该脚本生成出现在节点的本地 /dev 文件系统中的可用磁盘设备列表。 要覆盖或增强NSD发现,可以创建脚本并将其命名为 /var/mmfs/etc/nsddevices 。 用户创建的 nsddevices 脚本(如果存在)将在默认发现过程之前执行。
在Windows上,NSD具有带有单个GPFS分区的GUID分区表(GPT)。 通过在系统中扫描包含GPFS分区的磁盘列表来完成NSD发现。
在所有平台上,GPFS守护进程然后使用磁盘设备列表来确定本地节点上的设备接口是否映射到配置数据库中记录的NSD名称。将设备接口映射到NSD的过程涉及到GPFS依次打开每个设备并读取在磁盘的第二扇区可能记录的任何NSD卷标识符。
如果GPFS发现从磁盘设备读取的NSD卷标识符与GPFS配置数据库中用NSD名称记录的卷标识符匹配,则本地节点的I/O将通过本地设备接口进行。
如果本地节点上没有针对特定NSD的设备映射,则I/O将通过IP网络到达该NSD的服务器列表中指定的第一个NSD服务器。如果服务器列表中的第一个NSD服务器不可用,I/O将依次遍历服务器列表,直到找到可用的NSD服务器。
请参阅 /usr/lpp/mmfs/samples/nsddevices.sample 文件,以了解如何为您的配置提供特有额外磁盘发现功能的配置指南。
故障恢复处理
通常,不需要了解GPFS故障恢复处理的内部原理,因为它是自动完成的。但是,在观察到故障时,对这些概念的一些熟悉可能是有用的。
应该注意的是,一次只能处理一个状态更改,例如节点的丢失或初始化,随后的更改将排队。这意味着在故障节点可以再次加入组之前,整个故障处理必须完成。所有故障都是首先处理的,这意味着GPFS在完成任何恢复之前处理所有故障。
GPFS使用由集群管理器节点显式发送的连接或离开处理消息从节点故障中恢复。 集群管理器节点在不再接收来自节点的心跳消息时观察到节点已故障。 加入或离开处理消息被广播到运行GPFS的整个节点组,并且每个节点针对正在故障或正在加入节点的更新自己的当前状态。 集群管理器节点失败会导致集群选择新的集群管理器。然后,新选择的集群配置管理器节点将处理已故障的集群管理器的故障消息。
当通知某个节点已故障或某个节点上的GPFS守护进程已故障时,GPFS将为在故障节点上挂载的每个文件系统调用恢复。如果需要,将为任何不再具有文件系统管理器的文件系统选择新的文件系统管理器。
每个文件系统的文件系统管理器确保故障节点不再能够访问组成文件系统的磁盘。如果文件系统管理器是由于此故障而新指定的,则它将通过查询组中的其它节点来重新生成令牌状态。完成此操作后,将继续对故障节点的日志进行实际恢复。此恢复会将在故障时正在修改的元数据重新构建为一致状态。在某些情况下,可能存在分配的块不是任何文件的一部分,并且在 mmfsck 在线或离线运行之前都会丢失。日志恢复完成后,由故障节点持有的锁将为该文件系统释放。完成所有文件系统的此活动后,就会完成故障处理。此过程的最后一步允许故障的节点重新加入集群。
集群配置数据文件
GPFS命令将配置和文件系统信息存储在一个或多个文件(统称为GPFS集群配置数据文件)中。
这些文件不打算手动修改。
GPFS管理命令旨在使这些文件彼此保持同步,并与集群中每个节点上的GPFS系统文件保持同步。GPFS命令不断更新GPFS集群配置数据文件,用户对此信息所做的任何修改都可能丢失,而没有任何警告。在AIX节点上,这包括/etc/filesystems中的GPFS文件系统stanza,而在Linux节点上,则包括 /etc/fstab 中的列表。
GPFS集群配置数据存储在 /var/mmfs/gen/mmsdrfs 文件中。 此文件存储在指定为主GPFS集群配置服务器的节点上,如果已指定,则存储在辅助GPFS集群配置服务器上。 请参阅"IBM Spectrum Scale集群配置信息"。 mmsdrfs 文件中的第一条记录包含世代号。 每当GPFS命令导致集群或任何文件系统中的某些内容发生变化时,此更改都会反映在 mmsdrfs 文件中,并且世代号会增加1。 最新世代号始终记录在主GPFS群集和辅助GPFS群集配置服务器节点上的 mmsdrfs 文件中。
运行GPFS管理命令时,运行命令的节点必须能够访问GPFS集群配置数据。更新 mmsdrfs 文件的命令要求主GPFS集群配置服务器节点和(如果指定的话)从GPFS集群配置服务器节点都可以访问。如果无法访问其中一个集群配置服务器节点,则可以使用 mmchcluster 命令指定新的主或从集群配置服务器。类似地,当GPFS守护进程启动时,必须至少访问两个服务器节点中的一个。
? 从GPFS 4.1开始,配置数据文件的主副本可以冗余存储在所有仲裁节点上,而不是单独指定的主/备用配置服务器节点上。 这种存储配置数据的方法称为集群配置存储库(CCR),是GPFS 4.1或更高版本上创建的新集群的默认设置。 可以使用 mmchcluster 命令的 -ccr-enable 选项将现有集群转换为新的存储库类型。
使用CCR具有以下优点:只要大多数仲裁节点可访问,就可以对配置数据进行完全读/写访问。 例如,在具有五个仲裁节点的集群中,即使五个仲裁节点中的任何两个故障,更新 mmsdrfs 文件的命令仍将继续正常工作。 在具有仲裁磁盘的双节点集群中,如果其中一个节点发生故障,只要幸存的节点可以访问仲裁磁盘,仍可以运行更改 mmsdrfs 文件的命令。 通常,只要有足够的节点和(如果指定的化)仲裁磁盘能够访问,GPFS就可达到仲裁,也就可以使用完整配置命令功能。 CCR还具有以下优点:它允许更改仲裁磁盘配置,包括在基于节点的仲裁和使用仲裁磁盘的节点仲裁之间切换,而无需首先关闭所有节点上的GPFS。
基于GPFS集群配置数据中的信息,GPFS命令在GPFS集群中的每个节点上生成和维护许多系统文件。
Linux /etc/fstab
在Linux节点上,包含集群中存在的所有GPFS文件系统的列表。
AIX /etc/filesystems
在AIX节点上,包含群集中存在的所有GPFS文件系统的列表。
所有GPFS节点
/var/mmfs/gen/mmfsNodeData
包含与节点相关的GPFS群集配置数据。
/var/mmfs/gen/mmsdrfs
包含在主和从GPFS集群配置服务器节点上找到的 mmsdrfs 文件的本地副本。
/var/mmfs/gen/mmfs.cfg
包含GPFS守护进程启动参数。
GPFS备份数据
GPFS mmbackup 命令在命令执行期间创建多个文件。 某些文件是临时文件,在备份操作结束时被删除。 在文件集或文件系统的根目录中还保留不能删除的其它文件。
** mmbackup** 命令创建以 .mmbackupShadow.* 开头的其它文件。这些文件与 mmBackup 命令相关联,并且是完成正确备份所必需的,因此不要手动删除或更改它们。
有关更多信息,请参阅"IBM Spectrum Scale:命令和编程参考"中的"mmbackup命令"。
IBM Spectrum Scale产品版本
IBM Spectrum Scale有两个基于功能级别的不同版本。 每个版本都可以通过IBM Spectrum Scale Client许可证,IBM Spectrum Scale Server许可证和IBM Spectrum Scale FPO许可证进行许可。
有关更多信息,请参阅"IBM Spectrum Scale许可证指定"。
IBM Spectrum Scale标准版
可在AIX、Linux和Windows上使用。这个版本除了提供基本的GPFS功能外,还提供了扩展功能。在AIX和Linux上,扩展特性包括信息生命周期管理(ILM)、活动文件管理(AFM)和集群NFS(CNFS)。CNFS在Linux Z上不可用。在Windows上,扩展功能包括有限信息生命周期管理(ILM)。
? 在RedHatEnterpriseLinux7.x、SLES 12和Ubuntu16.04LTS上,扩展功能包括启用和使用附加协议功能集成(NFS、SMB和Object)的能力。在SLES 12上,这个版本不支持对象功能。这个版本提供了两个包:一个包含协议和需要附加的(opensource/gpl)许可接受,另一个包不包含协议并要求接受传统的GPFS许可。
IBM Spectrum Scale高级版
? 可在AIX和Linux上使用。 此版本提供标准版的所有功能,还提供基于AFM的异步灾难恢复和使用GPFS加密子系统的高级数据保护。 有关其他信息,请参阅"IBM Spectrum Scale:管理指南"中的"加密"主题。
IBM Spectrum Scale数据管理版
此版本在基于容量的许可下提供与IBM Spectrum Scale高级版相同的功能。 有关更多信息,请参阅"基于容量的许可"。
注意: 集群中的所有节点都必须安装相同的版本。
唯一的例外是没有加密的远程群集需要访问带加密的本地群集。 有关更多信息,请参阅"IBM Spectrum Scale许可证指定"中的"使用Multicluster进行加密"。
注意: 从版本4.2.3开始,IBM Spectrum Scale精简版不再可用。 有关从IBM Spectrum Scale 精简版 4.2.2.x或更早版本升级到IBM Spectrum Scale 标准版 4.2.3.x或更高版本的信息,请参阅"从精简版迁移到标准版"。
表18列出了IBM Spectrum Scale版本中关键功能的可用性。
表18. IBM Spectrum Scale版本中的功能
功能 | 标准版 | 高级或数据管理版 |
---|---|---|
支持最大文件系统大小、文件数量、文件系统和节点数量。 | √ | √ |
节点角色: 收集器节点、管理节点 | 免费 | 免费 |
节点角色:集群配置服务器,Manager,Quorum,tie-breaker,NSD服务器 | √ | √ |
多集群 | √ | √ |
配额(仅限用户和组) | √ | √ |
快照 | √(文件集) | √(文件集) |
管理GUI | √ | √ |
压缩(2:1到5:1的比例) | √ | √ |
服务质量(QoS) | √ | √ |
文件集 | √ | √ |
多协议访问 | √ | √ |
存储池 | √ | √ |
ILM放置和管理策略 | √ | √ |
使用IBM Spectrum Protect或IBM Spectrum Archive的HSM | √ | √ |
AFM缓存 | √ | √ |
透明云分层 | √ | |
基于AFM的异步灾难恢复(网关节点) | √ | |
静态数据加密和安全擦除 | √ |
有关每个版本中包含的最新功能,请参阅IBM知识中心中的IBM Spectrum Scale FAQ。
IBM Spectrum Scale许可证指定
? 根据IBM Spectrum Scale许可协议,集群中的每个服务器都必须被指定为拥有IBM Spectrum Scale Client许可证,IBM Spectrum Scale文件放置优化器(FPO)许可证或IBM Spectrum Scale Server许可证。 从版本4.2.2开始,您还可以使用基于容量的许可,该许可仅适用于IBM Spectrum Scale数据管理版。
存在三种基本存储集群模型:存储区域网络(SAN),网络共享磁盘(NSD)和无共享。 IBM Spectrum Scale支持所有这三个。 对于SAN和NSD集群,除了客户端许可证之外,还需要许多服务器许可证。 对于存储丰富的服务器无共享集群,每个服务器都需要FPO许可证。
与任何一台服务器关联的许可证类型取决于该服务器被指定执行的功能角色。
IBM Spectrum Scale 客户端许可证
IBM Spectrum Scale客户端许可证允许在本地挂载相同IBM Spectrum Scale文件系统的服务器之间交换数据。 不允许其他数据导出。
IBM Spectrum Scale 服务器许可证
IBM Spectrum Scale Server许可证允许许可服务器执行管理功能,例如集群配置管理器,仲裁节点,管理器节点和网络共享磁盘(NSD)服务器。 此外,IBM Spectrum Scale Server许可证允许授权服务器直接通过任何应用程序,服务协议或方法(如网络文件系统(NFS),服务器消息块(SMB),文件传输协议(FTP) ,超文本传输协议(HTTP),对象协议(OpenStack Swift,Amazon S3 API))共享IBM Spectrum Scale数据。因此,协议节点还需要IBM Spectrum Scale Server许可证。
IBM Spectrum Scale FPO许可证
IBM Spectrum Scale FPO许可证允许许可服务器执行NSD服务器功能,以便与具有IBM Spectrum Scale FPO或IBM Spectrum Scale Server许可证的其他服务器共享IBM Spectrum Scale数据。
许可协议的全文随安装介质一起提供,可在IBM软件许可协议网站上找到。
使用图22中的指导决定来为您的需求购买哪个IBM Spectrum Scale许可证。
- CIFS/SMB和NFS客户端不需要client许可证。
- 协议节点需要server许可证。
图22 关于购买许可证的指导
这些许可证均可在IBM Spectrum Scale标准版和IBM Spectrum Scale Advanced Edition高级版中使用。 有关更多信息,请参阅"IBM Spectrum Scale产品版本"。 使用IBM Spectrum Scale数据管理版,您必须使用基于容量的许可。 有关更多信息,请参阅"基于容量的许可"。
-
可以使用 mmlsLicense 命令查看群集当前有效的许可证数量和类型。
-
如果需要,可以使用 mmchlicense 命令更改分配给节点的许可证类型。
有关更多信息,请参阅"IBM Spectrum Scale:命令和编程参考"中的 mmlslicense 命令和 mmchlicense 命令。
基于容量的许可
您可以使用基于容量的许可来根据IBM Spectrum Scale集群中管理的存储容量来许可IBM Spectrum Scale。
要获得许可的存储容量是来自IBM Spectrum Scale集群中的所有NSD的存储容量,单位为千兆字节(TiB)。使用复制或压缩等功能,或执行创建或删除文件、文件系统或快照等任务,都不会影响被授权的容量。
例如,如果IBM Spectrum Scale集群中的所有NSD都有100 TiB的容量,并且您已将复制系数设置为2,则对于50 TiB的应用程序数据,将消耗100 TiB的磁盘容量。 在这种情况下,许可的容量是100 TiB,而不是50 TiB。
只有在IBM Spectrum Scale集群中添加或删除NSD时,才会更改许可容量。
您可以使用以下方法之一查看集群的许可容量:
-
从IBM Spectrum Scale管理GUI右上角的菜单中选择" 关于"选项。
-
发出 mmlslicense --capacity 命令。
基于容量的许可只能与IBM Spectrum Scale数据管理版一起使用。 数据管理版提供与高级版相同的功能。
基于容量的许可也可用于许可Elastic Storage Server(ESS)系统。 对于ESS,获得许可的容量是应用IBM Spectrum Scale RAID后的容量。 获得许可的确切容量取决于所选的RAID code,8+2p或8+3p。
IBM Spectrum存储套件
IBM Spectrum Scale是IBM Spectrum存储套件的一部分。
通过IBM Spectrum存储套件,您可以无限制地访问IBM软件定义存储产品组合,并在单位成本的基础上进行许可,以便在容量增长时使定价易于理解和可预测。
许可证是根据您管理的存储容量而非您使用的软件产品数量计算的。
有关更多信息,请参阅IBM Spectrum存储套件网站。