|
在一个大规模机群的并行分布文件系统中,一个存储节点的失效会导致相关并行文件无法正常访问,如果是磁介质损坏,还会导致相关并行文件永久性的不可用.因此,可靠性和有效性对于大规模分布式并行文件系统越来越重要。
1.并行文件系统体系结构及文件分布
大多数的机群分布式并行文件系统都采用客户--服务器模型。即系统由两大部分组成:客户端和服务器端,客户端节点和服务器端节点通过计算机网络互连,如图1所示。客户端节点(cN)上运行用户应用程序,在用户应用程序中包含对并行文件系统库函数的调用,从而实现应用程序对并行文件的访问.服务器节点包括一个管理员节点(MN)和多个I/0服务器节点(ION).在管理员节点上运行着管理员节点守护进程,负责管理各并行文件的元信息文件,维护一个系统打开文件表,响应文件打开、关闭等一些操作请求,管理员节点仅与客户端及I/O服务器之间传输少量的请求、应答信息,但不参与读写文件数据的操作.并行文件系统中所有的并行文件存储在I/0服务器节点的磁盘上,每个I/0服务器节点上运行一个I/O服务器守护进程,负责接收来自客户端的I/O请求,执行相应的并行文件数据读写操作,并通过网络与客户端传输数据.并行文件系统中的文件,通常称为并行文件,将按照指定的划分单元分布于系统中若干个I/O节点上,每个节点上的部分称为该并行文件的一个子文件.子文件的数目与存储这个并行文件的所有I/0节点的数目相等.每个子文件是物理上连续的字节流,但在逻辑上由若干个不连续的划分单元组成.一个并行文件分布的例子如图2所示.
在一个并行文件系统中,如果分布在一个I/O节点上的数据无法访问,即数据不可用,包括数据丢失和数据未丢失但无法正常进行读写操作,则称该I/0节点失效.导致一个I/0节点失效的主要原因包括以下几个方面:
(1)磁盘失效.伴随着存储系统的规模越来越大,多设备的应用既增加了容量又增加了带宽,但同时也使得磁盘失效更为普遍.而且,伴随着磁盘空问的增长速度超过了带宽增长的速度,磁盘恢复时间变得越来越长.
导致磁盘失效的主要原因可以分为磁介质损坏和磁盘驱动器失效两种,其中磁介质损坏造成数据丢失最可怕.如果某个I/0节点出现磁介质损坏,所有分布于该节点上的并行文件都可能因为这个局部的失效而遭到破坏.如果数据没有备份,则这种丢失将是不可修复的永久性丢失,其损失巨大且无法挽回.
(2)非磁盘的软、硬件失效.如果一个I/0节点上的操作系统或运行在该节点上的I/0服务器守护进程等软件未能正常工作,或者由于磁盘以外的其他硬件故障导致该节点瘫痪,尽管数据仍可能完好无损地保存在磁盘上,但却无法对该I/0节点上的数据进行访问操作.
并行文件系统中的每个I/0节点都是一个连接在网络上的自治计算机系统,而连网计算机面临一个不安全因素即病毒和恶意攻击.当今计算机病毒种类繁多,随着电子邮件的频繁收发、文件下载,极易传播,影响范围越来越广.它动辄删除、修改系统文件,导致计算机速度下降,程序出错甚至死机,对计算机的软硬件系统均构成极大的威胁.
(3)网络失效.构成并行文件系统的所有客户和服务器节点都通过网络互连起来.计算机网络包含运行于各节点上的网络协议软件、网络互连设备及通信线路.如果这些软件失效或出现设备和通信线路故障,尽管一个I/O节点上的系统及I/O服务器程序仍在正常运转,但由于失去了与外界的联系,所有对该节点上数据进行访问的I/0请求都将无法到达.通常由软硬件及网络故障引起节点失效的恢复时间比磁盘失效的恢复时间要短.在一个大型并行文件系统中,节点失效不可避免,且可能频繁发生.而由于一个或几个节点的局部失效,导致所有与该节点相关的I/O操作都无法正常进行..
2 .子文件循环冗余备份
子文件的循环冗余备份是一种以空间换取有效性和可靠性的并行文件系统容错方法.
子文件循环冗余备份的设计和实现子文件循环冗余备份的原理:并行文件的每个子文件都有一个拷贝,该子文件称为原本,其拷贝称为副本.假设并行文件系统中I/O节点的序号为:1,2,?,v,该顺序在系统建立之初即确定下来.
一个子文件的原本和副本分别保存在系统的节点m和节点n上,则m和n之间的关系如下:当m<N时,n=m+l;当m=N时,n=1.节点n称为节点m的下一个节点.
每次打开一个并行文件,其原本和副本将同时被打开.在正常情况下,并行文件系统只访问子文件的原本,只有当原本无法访问时,才访问副本.当用户应用程序执行并行文件读写操作时,系统库函数负责将用户的I/0请求映射为对多个子文件的I/0请求.通过客户端的库函数与I/0服务器的合作,完成对子文件的读写访问和对副本的同步更新.
首先,客户端并行文件系统库函数向并行文件子文件原本分布的所有I/0节点发送读文件请求.如果每个I/0服务器都给出应答,表明读文件成功,客户端函数负责给应用程序一个肯定的应答.否则,如果某个I/0节点无应答或给出操作失败的应答,则该I/0节点失效.客户端将向其副本所在I/0节点发送读副本请求.在这一过程中,用户感觉不到失效的存在.图3是一个读并行文件的例子.该例中节点n失效,当客户端向3个I/0服务器发送完3个子文件请求后,只得到从节点n—l和节点n+l的应答.过了超时时间,客户端就向节点n+1发送请求读子文件Subf的副本的请求.
3 .并行文件写操作过程与容错
与并行文件读操作相比,并行文件写操作更加复杂.当对一个子文件执行了写操作以后,其副本将被同步更新.如果出现了节点失效,就会出现原副本不一致的情况.
副本的同步更新:客户端发送写请求及要写入子文件的数据给相应的I/0服务器,I/0服务器负责把数据写入子文件的相应位置,并向客户端发送应答信息.然后I/0服务器向下一个I/0节点发送副本更新请求及要写入的数据以更新相应子文件的副本.这样副本的更新就由子文件原本所在的I/O节点上的服务器程序来完成,同时又保证了用户应用程序及时地得到了应答.图4展示了这一过程.
原本、副本一致性:如果每个I/0服务器给客户端一个肯定的应答,客户端就会向用户应用程序返回一个肯定的应答,表明写操作已经被成功执行.否则,如果有一个I/O节点没有应答或者返回一个否定应答,则表明该I/O节点失效.然后客户端会向相应的副本发送写请求及要写入副本的数据,这样就出现了原副本的不一致性.另一种情形是,原本写操作成功执行了,但是在进行副本的同步更新时发现副本所在的节点失效,这样也会出现原副本不一致。
子文件的滞后更新:为保证原、副本的一致性,采用子文件的滞后更新方法,即下次打开时更新.如果对一个子文件的原本、副本之一执行了写操作,而另一个未及时得到更新,更新节点上的I/O服务器将为该子文件建立一个日志文件,并将本次更新信息记录到该日志文件中.之后对该子文件的原本或者副本执行的写操作也依次记录到该日志文件中.
记录到日志文件中的信息包括:存储需要更新的子文件原本或副本的I/O节点的IP地址;I/O服务器进程的服务端口号;写操作的偏移量和长度.偏移量是相对于整个并行文件起始处的偏移.
下面是一个日志文件中一条记录的内容:202.198.16.150:7000 1020 100.
从客户端的请求中,I,/O服务器获得上述IP地址和端1:3号.每当一个I/O服务器打开一个子文件,相应的日志文件也被打开.如果不存在日志文件,表明原本、副本之间是一致的;否则,表明出现了不一致,这样I/O服务器就会读取日志文件中记录的IP地址和端口号, 与该IP上的I/O服务器进程进行SOCKET连接,并依次读取每个记录进行原本、副本的更新.当所有的更新操作完成后,I/O服务器将会删除日志文件.通过该方法,实现了打开时子文件滞后更新,从而保证了原本、副本的一致性.另外,在并行文件系统中,一旦发生了某一磁盘损坏,其上存储的子文件将被损坏,相关的并行文件将无法正常访问甚至不可用.在具有子文件循环冗余备份的系统中,利用子文件在下一节点上备份的副本,子文件可以得到恢复,从而不会因为一个子文件的损坏影响整个并行文件.
如何区分分布式/集群/并行文件系统?
分布式文件系统、集群文件系统、并行文件系统,这三种概念很容易混淆,实际中大家也经常不加区分地使用。总是有人问起这三者的区别和联系,其实它们之间在概念上的确有交叉重叠的地方,但是也存在显著不同之处。
分布式文件系统
自然地,“分布式”是重点,它是相对与本地文件系统而言的。分布式文件系统通常指C/S架构或网络文件系统,用户数据没有直接连接到本地主机,而是存储在远程存储服务器上。NFS/CIFS是最为常见的分布式文件系统,这就是我们说的NAS系统。分布式文件系统中,存储服务器的节点数可能是1个(如传统NAS),也可以有多个(如集群NAS)。对于单个节点的分布式文件系统来说,存在单点故障和性能瓶颈问题。除了NAS以外,典型的分布式文件系统还有AFS,以及下面将要介绍的集群文件系统(如Lustre, GlusterFS, PVFS2等)。
集群文件系统
“集群”主要分为高性能集群HPC(High Performance Cluster)、高可用集群HAC(High Availablity Cluster)和负载均衡集群LBC(Load Balancing Cluster)。集群文件系统是指协同多个节点提供高性能、高可用或负载均衡的文件系统,它是分布式文件系统的一个子集,消除了单点故障和性能瓶问题。对于客户端来说集群是透明的,它看到是一个单一的全局命名空间,用户文件访问请求被分散到所有集群上进行处理。此外,可扩展性(包括Scale-Up和Scale-Out)、可靠性、易管理等也是集群文件系统追求的目标。在元数据管理方面,可以采用专用的服务器,也可以采用服务器集群,或者采用完全对等分布的无专用元数据服务器架构。目前典型的集群文件系统有SONAS, ISILON, IBRIX, NetAPP-GX, Lustre, PVFS2, GlusterFS, Google File System, LoongStore, CZSS等。
并行文件系统
这种文件系统能够支持并行应用,比如MPI。在并行文件系统环境下,所有客户端可以在同一时间并发读写同一个文件。并发读,大部分文件系统都能够实现。并发写实现起来要复杂许多,既要保证数据一致性,又要最大限度提高并行性,因此在锁机制方面需要特别设计,如细粒度的字节锁。通常SAN共享文件系统都是并行文件系统,如GPFS、StorNext、GFS、BWFS,集群文件系统大多也是并行文件系统,如Lustre, Panasas等。
如何区分?
区分这三者的重点是“分布式”、“集群”、“并行”三个前缀关键字。简单来说,非本地直连的、通过网络连接的,这种为分布式文件系统;分布式文件系统中,服务器节点由多个组成的,这种为集群文件系统;支持并行应用(如MPI)的,这种为并行文件系统。在上面所举的例子中也可以看出,这三个概念之间具有重叠之处,比如Lustre,它既是分布式文件系统,也是集群和并行文件系统。但是,它们也有不同之处。集群文件系统是分布式文件系统,但反之则不成立,比如NAS、AFS。SAN文件系统是并行文件系统,但可能不是集群文件系统,如StorNext。GFS、HDFS之类,它们是集群文件系统,但可能不是并行文件系统。实际中,三者概念搞理清后,分析清楚文件系统的特征,应该还是容易正确地为其划分类别的。 |
|