英文原文: http://hekafs.org/index.php/2011/04/glusterfs-extended-attributes/
天马行空的意译,对正确性负责,不一定全和准确。
扩展属性是现代文件系统普遍支持,而又不容易被用户发现的特性。
Glusterfs中DHT,AFT, stripe都广泛使用了扩展属性即xattr。
xattr是一个key-value结构, 包括一个字符串key, 和一个二进制的value。我们有get/set/list xattr方法来操作它们。
在glusterfs中广泛使用了这样一个小伎俩: 当set/get xattr的时候,会触发gluster server的相关操作。例如:DHT中的 reblance代码使用了一个特定的attr来触发重新计算DHT layout的操作。
下面着重讨论 DHT中的trusted.glusterfs.dht xattr和 AFR中的trusted.glusterfs.afr.* xattr
DHT功能的核心是一致性哈希(consistent hashing)。文件存放的地点取决于文件名的哈希值, 每个brick都有一个哈希值区间,文件名的哈希值的落在某brick的哈希值区间,文件就存放在该birck上。
而目录有点不一样,目录在每个brick上都有。但是每个目录的xattr trusted.glusterfs.dht都不一样。因为它们所具有的哈希区间不同。
当lookup目录的时候,我们需要收集这些xattr, 组成一个table。同时需要注意区间之间存在的空隙和重叠的问题。
不难发现,这种方法有严重的扩展性(scalability)问题, 每当添加/删除一个brick的时候,我们就要重新计算xattr中存放的哈希区间。
然而, AFR在使用attr方面,比DHT更加复杂。
比如一个叫test1的afr卷,由test1-client-0和test1-client-1两个brick组成。 那么test1-client-0上的文件就会具有名为 trusted.afr.test1-client-1的xattr.
这是因为AFR的目的就是为了从failure中恢复。所以在一个brick上的操作会在其他所有brick上的xattr中记录,这样当副本数目多余2个时候很浪费。:-/
在xattr中存放的是“等待操作的counter”,
操作分为三种类型:
- 数据操作– mostly writes but also e.g. truncates
- 元数据操作– e.g. chmod/chown/chgrp, and xattrs (yes, this gets recursive)
- 文件操作 – create, delete, rename, etc.
每次文件系统操作执行前,都会首先对counter加1。
执行完成后,再对counter 减一。
正常情况下,counter应该回到0。入如果有节点中途出了问题,counter不是0,那么我们就可以知道这个节点out of date, 并启动self-heal修复它。
那么可想而知,最严重的情况是 AFR两个副本节点的counter都不是0, 我们将这种特殊情况称为 "split brain"。 这时系统很难或者说几乎不可能自己恢复正常。
相关推荐
这种算法以目录为基本单位进行哈希分布,并利用扩展属性记录子卷映射信息。在创建GlusterFS分布式哈希表(dht)卷时,服务端的brick挂载目录会为brick节点分配一定的区间(如2^32次方),并且可以根据brick节点的...
在代码规范和设计模式方面,glusterfs的模块化设计体现了面向对象的编程思想,每个`xlator`可以视为一个独立的对象,具有自己的属性和行为。通过接口定义和回调函数,实现了模块间的解耦合,提高了系统的可扩展性...
在深入探讨GlusterFS的核心概念之前,我们先了解下GlusterFS如何通过扩展属性来实现无中心架构。在Linux系统中,每个文件除了基本的元数据(如文件名、大小、权限等)之外,还可以拥有扩展属性。GlusterFS巧妙地利用...
glusterfs 使用一些扩展属性来维护元数据信息,包括 `loc_t` 和 `inode_t` 结构。这些数据结构在内存中存储,使得glusterfs能够快速访问和操作文件。 3. **loc_t 结构** `loc_t` 结构是 glusterfs 中用于查找文件...
**GlusterFS** 是另一种开源的分布式文件系统,它使用分布式哈希表(DHT)来组织元数据和扩展属性,可以在多种硬件平台上运行,无需特殊内核模块或补丁。GlusterFS提供了分布式和分布式复制功能,还支持地理复制,适用...
总的来说,glusterfs的客户端工具gfcli提供了对GlusterFS卷的基本操作,满足日常管理需求,而glustereventsd服务则扩展了系统的监控和通知能力,使得开发者和管理员能够更有效地管理和响应GlusterFS集群的变化。...
GlusterFS是一款开源的分布式文件系统,其设计目标是提供高度可扩展、高性能且具有高可用性的存储解决方案。本研究文档将深入探讨GlusterFS的关键特性和设计原理,以帮助理解其在现代数据中心和云计算环境中的应用。...
GlusterFS是一个分布式文件系统,它允许用户在多个服务器之间扩展存储容量,提供高可用性和容错性。在本文中,我们将深入探讨GlusterFS的一些关键参数及其对性能优化的影响。 首先,`rebalance`是一个重要的操作,...
GlusterFS 是一款开源的分布式文件系统,它允许在多台服务器上构建大规模的存储池,提供高可用性和可扩展性。在这个主题中,我们将深入探讨 GlusterFS 的一些核心概念,以及它如何与 Linux 的虚拟文件系统(VFS)...
Ceph以其统一的存储模型和强大的弹性扩展性著称,GlusterFS则以其模块化设计和无中心元数据服务器的特性受到青睐,而Lustre则以其高性能和大规模并行处理能力闻名。这些系统在一定程度上为分布式元数据管理提供了...
这些信息包括文件名、文件属性、文件位置等,帮助系统快速定位和管理存储在不同节点上的实际文件数据。下面将详细讨论分布式存储系统中不同类型的元数据设计方法、优缺点及应用场景。 ### 无中心存储设计:...
这些产品各有特点,适用于不同的应用场景,如Ceph拥有良好的横向扩展能力,HDFS适合处理大规模数据集,GlusterFS适用于成本敏感型的部署等。 对于电信运营商而言,如联通集团,面临着海量小文件存储的挑战,例如...
另外,GlusterFS在提供高可用性和易于扩展性方面表现出色。 #### 五、案例分析 - **Facebook的实时Hadoop系统**:Facebook采用了Hadoop分布式文件系统来处理大量的用户数据,这不仅提高了数据处理效率,也增强了...
3. GlusterFS驱动:GlusterFS是一种分布式文件系统,其驱动程序允许Cinder使用GlusterFS作为后端存储。 4. HP 3PAR FC和iSCSI驱动:这些驱动程序使Cinder能够与HP 3PAR系列的FC和iSCSI存储设备通信。 5. HP/Left...
Scala 语言融合了面向对象和函数式编程,是可扩展的且支持静态类型。MyBatis 是一个开源的对象关系映射框架,用于简化Java开发中的数据库操作。Web的主要功能是处理浏览器与服务器之间的动态HTML信息请求。JSP(Java...
24. 开源分布式存储:Hadoop HDFS、OpenStack Swift和GlusterFS是常见的分布式存储解决方案。 25. 数据库缓存:Redis在处理复杂数据结构时表现更优,而Memcached适用于简单键值对存储。 26. Linux与POSIX:Linux...
14. Scala语言特点:Scala是面向对象和函数式的编程语言,具有可扩展性,并且是静态类型的。选项ABC正确。 15. MyBatis:MyBatis是一个开源的对象关系映射框架。选项A正确。 16. Web主要功能:Web的主要功能是使...
- Hadoop HDFS、OpenStack Swift和GlusterFS是常见的开源分布式存储系统。 20. **缓存选择**: - 对于复杂数据结构,通常优先选择Redis,因为它支持更丰富的数据结构。 21. **Linux兼容性**: - Linux遵循POSIX...
6. Swift 属性:Swift 语言中的属性包括存储属性、计算属性和类型属性。 - 问题:“不属于 Swift 属性的是?”答案是D.以上都不是,因为这些选项都是 Swift 属性。 7. CSS3:CSS3 提供了更多样式和布局功能,如...
14. **Scala**:Scala是同时支持面向对象和函数式编程的语言,它是可扩展的,也支持静态类型。 15. **MyBatis**:MyBatis是一个开源的对象关系映射框架,简化了Java数据库编程。 16. **Web 主要功能**:Web的主要...