大话存储笔记

【大话存储II】学习笔记(15章),文件级集群系统

2018-02-14  本文已影响15人  dy2903

【大话存储II】学习笔记(15章),块级集群存储系统里面分析的主要是块集群系统,同样文件级存储也可以集群化。

因为NAS系统的前端网络是以太网,速度比较低,导致NAS主要用于一些非关键业务中,比如文件共享。但是一些特殊应用也需要多主机同时访问某个大文件,比如3D渲染集群等。如果我们使用块集群存储系统,则会存在一个问题,需要在应用程序上引入文件锁,而NAS的文件系统一般都自带有文件锁机制,所以还不如把NAS存储系统进行集群化。

在谈怎么样把NAS系统进行集群化之前,我们说说集群文件系统的架构。集群文件系统是个很宽泛的概念,分布式文件系统、并行文件系统、共享文件系统统都可以称为集群文件系统

集群文件系统

集群文件系统,顾名思义,就是把提供文件存储的设备进行集群化。一般来说,我们可以使用一堆服务器来提供文件服务。

本章中,我们首先对集群文件系统架构进行分类,主要有如下几种

是否共享LUN

我们可以按照集群是否有共享LUN将架构分为共享存储集群和非共享存储集群

image.png

同样我们也可以单独剥离出元数据服务器,然后把后端主机并行化。
这样的好处在于,客户端从存储节点读取数据的时候,完全可以并行访问。可以大大提升访问效率。

image.png

共享与非共享存储集群对比如下:

非共享存储型文件系统又可称为“分布式文件系统”,即数据分布存放在集群中多个节点上。

image.png

是否引入IO节点

上一小节中讲的架构中,客户端可以直接访问到共享存储。

实际上可以在插入一个中间层,可以对后端文件以另一种形式进行输出。

比如

image.png

终上所述,集群文件系统最后演化成了两种:

这两种方式各有其优劣

image.png

角色是否对等

可以根据每个节点的角色是否对等分为对称式和非对称式文件系统。

所谓对称式集群文件系统指的是集群中所有节点的角色和任务都相同,完全等价。

在对称式集群中,所有节点都很聪明,每时每刻都能保持精确沟通与合作,共同掌管全局文件系统的元数据。每个节点要更新某元数据的时候,需要先将其锁住,其他节点就必须等待,这样节点之间的沟通量就很大。

image.png

所有节点在同一时刻均看到同一片景像。

那么非对称式集群呢?

在非对称集群中,只有少数节点(主备节点)是聪明的,他们掌管着系统内全局文件系统信息,其他节点不清楚。

当其他节点要访问某文件的时候,需要首先联系这个聪明节点,得到要访问文件的具体信息(比如存放在哪个节点中的哪的LUN的什么地址里面。)

每个傻节点上需要安装一个代理客户端来于聪明节点通信,它获得了文件的具体信息之后,才能让主机从后端的LUN中拉取数据。

我们把聪明的节点叫Metadata Server, MDS或者MDC,是系统中唯一掌握文件系统元数据的角色。

image.png

那么对称集群文件系统与非对称的典型代表是哪些?

显然这两种架构各有优劣势。

image.png

是否对外提供服务

按照是否对外提供服务分为自助型和服务型

什么叫自助型集群?就是应用是使用本地磁盘的,比如一个集群中每个节点都安装了某种应用,然后现在有共享系统内所有文件的需求,就可以在应用节点上直接部署集群文件系统。

所以每个节点不但是数据的生产者,还是底层文件的消费者,这就是自助型

image.png

那什么是服务型集群文件系统,如下图。

框内是集群文件系统,框外又增加了一排主机,群外的客户端主机通过某种协议来访问集群中文件数据。

集群中的服务节点不是数据的消费者,只是服务者

image.png

为什么要使用服务型集群呢?自助型不是挺好的吗?主要原因如下

统一路径型与统一文件系统型集群

之前我们讲过,为了实现集群的Single Name Space统一命名空间,有两种方式

image.png image.png

SFI的优点在于可以将一个文件切分到各个节点中,这是SPI无法做到。

但是SFI的扩展性能往往比较有限,SPI则可以整合大量的节点。这是因为SFI的集群FS的节点之间需要同步复杂的状态,每个节点所维护的状态机非常复杂,当节点数量增加的时候,节点状态机的协同加上网络延迟,性能自然上不去。
而SPI模式下,节点相互独立,同步的信息很少。。

串行与并行集群

对于服务型集群,可以提供两种方式的对外访问:

image.png

集群文件系统中的关键问题

集群本质是一堆服务器合作处理任务,这一点集群块存储系统与集群文件存储系统没有区别。但是当我们面对的不是单一节点以后,会多出很多的问题, 比如说能不能用统一的目录对后端的文件进行访问,比如说多主机对某个文件访问的时候会不会有冲突,还有就是每台设备都会缓存数据,会不会有缓存不一致的情况。

下面我们将一一讲解

统一命名空间(Single Name Space)

如果我们要访问某个文件,则需要知道文件的路径,也就是说文件是在哪个目录里面,比如windows下面的路径"D:\data\file.txt",或者Linux下面的"/usr/someone/file.txt"。windows和Linux文件系统的设计方式不同,所以路径看上去也不同。

如果我们把一个目录挂载到另一个目录下面,这个被挂载的目录就可以称为虚拟目录。也就是说通过虚拟目录访问到的不是原本属于此目录下的文件,而是挂载在其上的目录树。

所以虚拟目录更应该理解为一个路径,它只是提供一个路牌,路牌上的路名不等于路的本身,只是一个名字而已。

现在我们来看一个集群环境下的情况。

每个节点都有各自的路径,但是既然多节点组成了集群,对外应该呈现为一套路径。

比如说客户端看到路径/cluster/data1,而这个路径真实应该在节点A上。不管向集群中哪个节点发出请求,所有的请求都应该重定向到节点A来,收到请求的节点就相当于一个代理而已。也就是说已经被某节点使用的路径,不能再被其他节点所使用了。

这就是统一命名空间(Single Name Space):集群中的所有节点上供客户端挂载的路径不重复,对外呈现为单一的NAS服务器。

这就是与非集群环境下最大区别。非集群下,两台NAS设备有同一个路径,而且对外可见,那么客户端可以挂在两个不同的独立存储空间,这样当然管理起来很麻烦。

那么怎么实现统一命名空间呢?有两种形式

总之单一路径影像属于松耦合,更利于节点的扩充。而单一文件系统影像是把文件系统都融合了起来,属于紧耦合,扩展性不好,实现难度大。

集群中的分布式锁机制

在单节点的的单一操作系统内,可能有多个应用程序对同一个文件进行修改,这样极有可能出现数据不一致的情况,于是我们引入了,这样一个文件在同一时刻只允许这个应用程序修改,其他应用程序只能等待。

这样又会出现一个问题,若干某个文件加锁了,却迟迟未被处理,其他应用程序就只能等待,时间自然就白白浪费了。

锁也不是,不锁也不是,那么有没有两全其美的方法呢?

当然有,比如

缓存一致性

我们知道集群的节点会维护一个读缓存,所以一个节点有可能缓存其他节点的某些内容。那么就存在一种情况,某一时刻节点存储的内容被应用修改了,但是这段内容的读缓存有可能在其他的节点上,如果此时有终端读到了缓存里面的内容,则出现与实际数据不一致的情况。

那么怎么办?可以把读缓存的数据作废或者读入新数据以更新,这就是写即作废机制,可以保证全局缓存一致性。

那写缓存呢?

image.png

集群、并行、分布式、共享文件系统辨析

大家平时可能听到多种叫法:集群文件系统、SAN共享文件系统、分布式文件系统、并行文件系统。这些概念之间是否有什么联系呢?

集群NAS

【大话存储】学习笔记(10~13章),NAS、IP SAN这一章中,我们讲到了NFS/CIFS协议,它们是网络文件访问系统,主要的作用是让主机可以通过网络的访问NFS服务器上的文件,所以它其实不是管理文件与扇区的对应关系的。

而FAT、NTFS是实实在在的文件系统,是管理文件与块的对应关系的,我们称为文件管理系统

那么现在我们要构建一个集群NAS,希望他能对外提供文件访问服务。

如下图所示


image.png

可以看出一个集群NAS系统其实可以分为三层架构

总结一下,将集群文件系统中的文件用NAS协议输出,就是集群NAS。它可以对外提供统一的命名空间,以及统一管理,若是出现了故障,还可以进行故障的切换,在线平稳的迁移等。

所以集群NAS不是简单的NAS设备的堆砌,它可以更加的灵活,比如

上一篇 下一篇

猜你喜欢

热点阅读