GFS(Global File System)是Minnesota大学开发的基于SAN的共享存储的集群文件系统,后来Sistina公司将GFS产品化。GFS在很长一段时间都是以源代码开放软件的形式出现的,后来由于Sistina希望通过向用户提供支持和服务的计划未能取得成功,为了要促进自己的财务收入,Sistina在2001年将GFS变成了一种“专有软件”。Red Hat公司收购Sistina之后,在遵循GPL协议(GeneralPublic License)的条件下履行诺言公开了GFS的源代码。现在,GFS的全名被称为“红帽全球文件系统”(Red Hat Global File System ,GFS)的软件,每台服务器每年收取2200美元的费用。
可能是redhat为了更好的收取服务费的缘故,有关GFS的文档真是少之又少,我只能从网上一些零星的资料来看看GFS的概貌。
框架
GFS最初是在IRIX上开发的,后来移植到LINUX上,并开放源码。基本框架如下图所示。
图1 GFS的基本框架图
通过使用GFS,多台服务器可以共用一个文件系统来存储文件。信息既可以存储在服务器上,也可以存储在一个存储局域网络上。
GFS与GPFS结构相似,但它是全对称的机群文件系统,没有服务器,因而没有性能瓶颈和单一故障点。GFS将文件数据缓存于节点的存储设备中,而不是缓存在节点的内存中。并通过设备锁来同步不同节点对文件的访问,保持UNIX文件共享语义。GFS实现了日志,节点失效可以快速恢复。GFS使用SCSI设备锁来进行同步,目前很少设备实现这种设备锁。在没有设备锁的情况下,GFS也是通过唯一的锁服务器来进行同步,因此,锁服务器是其性能的瓶颈。
用户通过GFS可以加快数据访问速度,并进行信息复制。一旦一台服务器出现问题,用户仍可以通过网络内其他的计算机访问有关的数据。GFS对于以以下两种方式连接而成的计算机集群尤其有用:1、计算机集群中任何一台机器都可以在另一台机器发生故障时接管这台计算机的工作,2、计算机集群中的所有机器联合起来组成一台超级计算机。
GFS允许多个Linux机器通过网络共享存储设备。每一台机器都可以将网络共享磁盘看作是本地磁盘,而且GFS自己也以本地文件系统的形式出现。如果某台机器对某个文件执行了些操作,则后来访问此文件的机器就会读到写以后的结果。
图2 GFS通过NFS和HTTP的扩展
如上图所示,GFS设计时就考虑到了可以通过NFS或者HTTP协议进行扩展。但是数据控制和数据传输的开销显然要小于NFS。
图3 NFS的控制和数据传输路径
上图是NFS的控制和数据传输路径。控制路径从用户应用通过VFS传递到NFS客户端。NFS通过TCP/IP协议执行远程调用。NFS服务器端响应调用请求,通过VFS访问本地文件系统,然后由本地文件系统来访问本地的存储设备。数据传输路径包括:用户内存和NFS客户端缓存之间的内存拷贝,NFS客户端与网络缓存之间的拷贝,缓存网络缓存和NFS服务器端缓存之间的拷贝。这些拷贝通过系统总线和网络连接进行。
图4 GFS的数据传输路径
GFS的控制和数据传输路径由上图所示。控制路径从用户应用通过VFS到达GFS。GFS向网络存储池(network storage pool,NSP)中的存储设备发出请求。块对齐数据(Block aligned data)在用户内存和存储设备间传输,非对齐数据则临时的通过系统内存传递。
GFS中有一个很重要的概念,叫网络存储池(The network storagepool,NSP)。NSP为每台机器提供了一个统一的存储地址空间。GFS通过NSP实现了存储设备的网络共享。这些存储设备可以是共享SCSI(SharedSCSI)和共享通道(Fibre Channel - FC)。NSP包装这些存储设备使得它们好像节点本地的文件系统。
NSP还可以根据存储设备的类型分为多个子存储池(subpools)。NSP同时也对锁进行管理。GFS发送“锁”和“解锁”命令给NSP,NSP收到后把逻辑锁号转成对应的物理设备的锁号进行锁定。
GFS把文件系统组织成数个资源组(resourcegroups,RG)。通过RG,GFS把文件系统的资源分布在整个NSP上。一个存储设备上可以存在多个RG。RG实际上是各微型的文件系统(minifile system)。
图5文件到存储池和资源组的映射
上图演示了从文件到RG,以及从RG到NSP子池的映射。文件可能被存放在数个RG和多重存储池中。
优点:
GFS的主要优点在于:
l 高可用性:如果一个GFS客户失效,数据还可以通过其他GFS客户访问;
l 扩展性:因为不需要中心服务器,所有很容易扩展存储容量和访问带宽;
缺点:
l 和现在流行的SAN型文件系统相比,设计思想似乎有点落后了;
l 费用较高;