haizdl
作者haizdl2016-11-17 11:58
技术经理, 大连

基于IBM-GPFS技术的具体应用研究

字数 4911阅读 6680评论 1赞 4

1.GPFS文件系统概述

GPFS (General Parallel File System) 是 IBM 公司第一个共享文件系统,起源于 IBM SP 系统上使用的虚拟共享磁盘技术 ( VSD )。作为这项技术的核心, GPFS 是一个并行的磁盘文件系统,它保证在资源组内的所有节点可以并行访问整个文件系统。 GPFS 提供的文件系统操作服务可以支持并行应用和串行应用,它允许任何节点(这些节点属于同一个节点组)上的并行应用同时访问同一个文件或者不同的文件。

2.GPFS文件系统特点

IBM GPFS文件系统是一个自由可扩展的高性能并行文件系统。它具备以下几个特点:

1)基于高可用的集群架构。

2)磁盘并行访问方式,提供统一命名接口。

3)针对并行负载优化,极高的IO吞吐能力。

接下来本文会从架构特点、配置特点以及具体的测试案例等方面来分析其这几个特点。

3.GPFS文件系统典型架构

典型的GPFS物理架构会分为三个层面:存储层、GPFS服务器层以及客户端层。存储层将存储通过SAN环境划分给服务器节点,服务器节点将这些存储磁盘进行配置并格式化形成最终的GPFS并行文件系统格式,客户端通过以太网与所有的服务器节点联通,他们通过私有文件系统协议来共享这个并行文件系统,实现IO的并发读写。具体架构参考图2.1。

图3.1 GPFS物理架构

如图所示,最下层是GPFS的物理磁盘层,存储设备通过SAN环境将存储LUN划分给GPFS的服务提供层,也就是NSD服务器,它是一个集群式的服务提供组件。服务层将其识别到的磁盘格式化为NSD磁盘,这些NSD磁盘再经过GPFS服务层创建为GPFS文件系统,这个文件系统通过网络层的私有协议共享给所有的GPFS客户端,客户端就可以将其作为一个普通文件系统挂载到某一个目录下来存储文件。

当然,GPFS的架构设计并非一种。我们也可以将GPFS的服务层和客户端层整合为一层,也就是每一个NSD服务器既是服务提供者,同时也是客户端。这样做的好处在于整个架构趋于扁平化,IO深度会浅一些,性能会好。但是它需要更多的SAN资源来支持整个扁而长的集群架构。

4.GPFS文件系统逻辑架构

4.1 GPFS文件系统工作原理

关于GPFS文件系统如何实现并行读写,具体原理如下图所示,GPFS的核心Deamon是mmfsd,它会通过子进程调用方式实现对GPFS配置、文件系统以及文件系统头信息的管理。应用程序的读写,通过层层调用实现最终的数据落盘。

图4.1 GPFS工作原理图

其中,应用程序不需要任何定制操作,只需要正常调用操作系统文件读写就可以,操作系统在后台调用文件读写的时候会跟GPFS所管理的文件系统I节点进行映射最终实现GPFS文件系统读写的调用。每一个GPFS客户端有自己的局部I节点MAP,GPFS有一个统一的全局I节点MAP表。最终可以实现文件系统读写的一致性。也就是说,普通文件系统的I节点管理,在GPFS架构中是经过了操作系统和GPFS内核配合的虚拟映射之后形成的文件系统管理体系。

4.2 GPFS文件系统所涉及到的逻辑对象

Ø 网络共享磁盘(NSD)

所谓NSD,就是GPFS将存储设备划给服务器的物理磁盘转化为具备GPFS自己的物理磁盘。GPFS文件系统就是要在其基础之上来实现。每一个NSD磁盘需要共享给所有的NSD服务集群节点。

Ø GPFS文件系统

GPFS文件系统就是在NSD磁盘基础之上创建的共享文件系统。文件系统创建会像其他文件系统一样创建文件系统管理信息及文件系统的地址空间表。

Ø GPFS服务集群节点及客户端节点

所谓GPFS服务集群节点,就是要提供GPFS文件系统服务的集群节点。服务节点和客户端节点在软件的安装上没有任何区别,他们的区别需要在集群配置时来具体定义。

Ø Quarum Node &TiebreakerDisk

它是GPFS集群为了避免在发生集群节点发生通讯故障,而通过本身资源数目无法判断集群状态,从而辅助判断集群状态的逻辑对象。节点本身可以作为仲裁资源,另外NSD也可以作为仲裁资源。

4.3 GPFS集群仲裁机制

GPFS的所有服务节点组成一个GPFS服务集群,集群节点之间发生通讯故障时,一定会有一种集群仲裁机制来保障集群状态是否继续维持以保持数据的一致性。GPFS通过仲裁节点以及TiebreakerDisk来保障其仲裁策略的正确性。Quarum Node和TiebreakerDisk的概念在前一节已经阐述。

1)仲裁节点机制:

通过主机状态的来判断系统可用性的机制。GPFS 文件系统集群中,可以设置多个主机节点为仲裁节点。当超过半数的中袋节点在线时,判断系统为正常,反之,将关闭文件系统。仲裁节点数目最多可以128个。如果采用这种机制,而我们的仲裁节点为2N+1,意味着我们只能容忍N台机器宕机。所以当机器数目越少,这种机制的故障容忍程度就越差。

2)仲裁磁盘机制:

通过磁盘的状态来判断系统的可用性。我们可以设置系统通过监视指定的一些磁盘作为仲裁磁盘。当超过半数的 Tiebreaker Disk 掉线时,则判断系统故障,将自动关闭文件系统。Tiebreaker最多只能配置两个用来监控磁盘状态的仲裁主机,当 2 台 仲裁主机都宕机的话,GPFS 系统也将会关闭。比如我们有5个服务节点,那么任取两个节点作为仲裁主机,取2N+1个磁盘来作为仲裁盘,那么系统可以容忍的故障就是N个仲裁盘离线和1个仲裁节点离线。其优势在于节点数较少时可用性较高,但节点数较多的情况建议采用仲裁节点模式。

4.4 GPFS Failure Group

一系列具有相同物理路径的网络共享磁盘组成一个Failure Group,Failure Group之间可以实施数据复制也可以实施日志复制来保证同一份数据可以有多分数据或者日志拷贝,以保证物理磁盘故障不会导致数据丢失。比如,在做NSD设计的时候,我们可以将来自同一个物理存储的卷作为一个Failure Group。这样每一份数据相当于在不同的存储设备上都可以做数据副本或者是日志的副本。

5.GPFS文件系统伸缩性分析

首先,GPFS集群中的节点具备很好的伸缩性。我们可以在线增加或者删除GPFS节点,而其中的并发任务并不会受到影响。其次,GPFS文件系统具备很好的伸缩性,我们可以在线对文件系统扩容或者缩减,都不会影响到并发业务。

6.GPFS文件系统负载均衡性分析

所谓负载均衡也就是说我们在设计GPFS集群的时候,希望所有的客户端能将IO负载近似平均地分担到每一个集群服务节点。我们不希望看到集群节点之间出现严重的负载不均衡。那么如何设计呢?如下图,每一个NSD磁盘会有相应配置来决定服务节点服务的先后顺序,比如NSD1&NSD2会定义为“节点1:节点2:节点3:节点4”的顺序;而NSD3&NSD4会定义为“节点4:节点3:节点2:节点1”的顺序。那么客户端发起IO写入的时候,要写入NSD1&NSD2的数据就会从服务节点1写入,而要写入NSD3&NSD4的数据就会从服务节点2写入。也就是说NSD配置的服务节点顺序决定了正常情况下的服务层节点的IO流向及负载。所以我们定义这个NSD服务节点顺序的时候就需要考虑到系统的整体负载均衡性。图6.1的设计基本从节点负载上达到了负载均衡性的目的。实际场合下还要根据服务器的具体配置及性能差异等条件来综合考虑其整体均衡性。

图6.1 GPFS负载分布图

7.GPFS具体设计案例

7.1 具体需求简单描述

Ø 2个服务节点:2 NSDServer

Ø 4个存储LUN:Lun1&Lun2&Lun3 来自于HP 3Par,Lun4&Lun5来自于EMC VNX。

Ø 6个客户端节点:RedhatLinux 6 & Suse Linux 10 & AIX 7.1。

7.2 GPFS集群规划设计

表7.1 GPFS NSD 服务节点规划设计

表7.2GPFS客户端节点规划设计

表7.3 GPFS NSD规划设计

表7.4 GPFS FS规划设计

7.3 安装及准备工作

安装工作主要是GPFS软件在不同版本操作系统上的安装,需要注意的是许可安装不能遗漏。具体安装步骤可以参照官方手册实施即可。对于准备工作主要包括操作系统参数的配置、NTP的配置以及SSH互信的配置等等,这里就不再详述。

7.4 GPFS集群配置

1)配置集群节点

+> nodelist.txt

# mmcrcluster -n/tmp/nodelist.txt -p nsds01 -s nsds02 -C Gpfs-Cluster01 –A

//创建GPFS集群,以nsds01以及nsds02为服务节点及仲裁节点,nsds01为集群主服务节点,集群的名字“Gpfs-Cluster01”,-A表示GPFS集群随系统启动而自动启动。

#mmchcluster -r /usr/bin/ssh -R /usr/bin/scp

//修改GPFS集群配置,分别指明远程命令执行及远程文件拷贝需要依赖的工具。

# mmchlicenseserver --accept -N nsds01
#mmchlicense server --accept -N nsds02

//这一步相当于对两个服务器节点进行许可认证。

2)配置集群NSD磁盘

# mmcrnsd –F /tmp/nsdlist.txt -v no

//将hdisk11-hdisk15创建为GPFS集群的五个NSD磁盘,并且让每个NSD都充当data和meta两种角色。-v no 表示命令执行时不会判断磁盘之前是否已经被创建过NSD,如果是 -v yes,那么命令会判断磁盘是否已经是NSD,如果是的话不会执行创建动作。

3)配置集群仲裁盘

# mmchconfigtiebreakerDisks="gpfs1nsd;gpfs2nsd;gpfs3nsd;gpfs4nsd;gpfs5nsd"

//将五个磁盘全部创建为GPFS的仲裁盘。

4)配置集群文件系统

# mmstartup

# mmcrfs/gpfs01 /dev/gpfs01 –F /tmp/disklist.txt -A yes –B 1M –m 2 –M 2 –R 2 –n 8

//基于之前的NSD创建GPFS文件系统,-A文件系统自动挂载,以1M为块儿大小单位,-m默认Meta数据镜像数,-M最大Meta镜像数,-R数据文件镜像数目,-n挂载文件系统节点数目的估计值。

# mmmount/dev/gpfs01 /gpfs01 -a

5)调整GPFS集群配置参数

# mmchconfigmaxMBpS=600

//每个节点的最大吞吐量。

# mmchconfigworker 1 Treads=550

//每个服务节点可以并行处理的最大NSD线程数目。

# mmchconfigmaxFilestoCache=4000

//每个服务节点可以并行处理的最大I节点数目。

# mmchconfigpagepool=1024M

//GPFS自己的文件系统缓存。

5.总结及展望

本文基于GPFS技术的基础架构及原理进行了一些基础性研究,并由此而总结阐述了关于设计和创建GPFS集群应该注意的一些问题,包括性能方面及架构合理性方面。而GPFS还有一些其他更高级的功能,例如LTM,同时GPFS和其他的一些技术结合起来可以有更具体的解决方案,例如GPFS和数据库集群技术的结合。本人期待IBM能基于此技术推出更多更好的技术点来帮助客户解决更多现实问题。也同时会结合新的业务场景继续探讨其更深入的技术课题。

【参考文献】

[1]IBM Cop.<<General Parallel File System Concepts, Planning, andInstallation Guide>>, 2008.04
[2]IBM Cop.<<IBM Spectrum Scale (formerlyGPFS)>>, 2015.05

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

4

添加新评论1 条评论

DB-TrendSetterDB-TrendSetter数据库架构师, 公司
2016-12-20 15:03
Ctrl+Enter 发表

本文隶属于专栏

最佳实践
不同的领域,都有先行者,实践者,用他们的最佳实践来加速更多企业的建设项目落地。

作者其他文章

相关文章

相关问题

相关资料

X社区推广