Glusterfs全局统一命名空间

全局统一命名空间
Glusterfs采用了全局统一命名空间设计,将磁盘和内存资源聚集成一个单一的虚拟存储池进行管理,并在此命名空间中使用NFS/CIFS等标准协议来访问应用数据。与其他分布式文件系统有所不同的是,GlusterFS中没有专用的元数据服务器,而是独特地采用无元数据服务的设计,取而代之使用算法来定位文件,元数据和数据没有分离而是一起存储。这使得数据访问完全并行化,从而实现真正的线性性能扩展。无数据服务器极大提高了GlusterFS的性能、可靠性和稳定性。

GlusterFS是模块化堆栈式的架构设计,模块称为Translator。Translators是GlusterFS提供的一种强大文件系统功能扩展机制,这一设计思想借鉴于GNU/Hurd微内核操作系统。GlusterFS中所有的功能都通过Translator机制实现,借助这种良好定义的接口可以高效简便地扩展文件系统的功能。在Glusterfs中,每个translator都有自己的全局命名空间,并且使用自己的机制进行独立的维护和管理。

相关阅读:

Glusterfs是集群文件系统,主要有三种基本的集群模式,即分布式集群(Distributed cluster)、条带集群(Stripe cluster)、复制集群(Replica cluster)。这三种基本集群还可以采用类似堆积木的方式,构成更加复杂的复合集群,比如分布式条带集群(Distributed stripe cluster)、分布式复制集群(Distributed replica cluster)、RAID10集群(Stripe replica cluster)、分布式RAID10集群(Distributed stripe replica cluster)。

Glusterfs全局统一命名空间

三种基本集群各由一个translator来实现,分别由自己独立的命名空间,如上图所示。对于分布式集群,文件通过HASH算法分散到集群节点上,每个节点上的命名空间均不重叠,所有集群共同构成完整的命名空间,访问时使用HASH算法进行查找定位。复制集群类似RAID1,所有节点命名空间均完全相同,每一个节点都可以表示完整的命名空间,访问时可以选择任意个节点。条带集群与RAID0相似,所有节点具有相同的命名空间,但对象属性会有所不同,文件被分成数据块以Round Robin方式分布到所有节点上,访问时需要联动所有节点来获得完整的名字信息。对于VFS的lookup, stat, readdir三个名字空间相关操作,三种集群处理方式如下。

(1)Distribued集群
.lookup:采用hash算法选择节点,如果未命中且为目录则查询卷下所有节点,还未找到且设置search_unhashed则遍历所有节点;
.stat:请求发向所有节点,如果是目录需要对属性进行聚合;
.readdir:查询所有节点,并对文件目录信息及属性进行聚合;

(2)Stripe集群
.lookup:所有节点都要被查询,进行属性聚合,检查gfid并进行自修复;
.stat:查询所有节点,进行信息聚合;
.readdir:查询首节点,属性信息需要聚合所有节点信息;

(3)Replica集群

.lookup:请求发送到所有节点,首个成功响应即返回;
.stat:查询选择的一个UP节点,如果失败则依次查询下一个节点;
.readdir:与stat相同,选择一个UP节点进行查询,如果失败则依次查询下一个UP节点;

相关推荐