GlusterFS之文件系统扩展属性

扩展属性是现代文件系统最不为人知的属性之一,可以采用一种完全的特性将扩展属性添加到文件。其表现形式是key-value对,可以通过操作get/set扩展属性。GlusterFS就大量使用了扩展属性--xattrs,来完成集群工作(复制、条带、分布式),所以说,扩展属性对GlusterFS至关重要。

这里有个关键,get/set扩展属性会触发与之关联的所有服务器,这样的话,就可以通过setxattr或者getxattr来向服务器传递信息。这种伎俩实际上就是一种RPC机制,在GlusterFS中被大量使用。例如,rebalance代码会通过一个magic xattr触发layout的重新计算,layout决定了文件被存储到哪个服务器。Quick-read Translagtor使用一个magic xattr来模拟open/read/close序列,对小文件这将节省2/3的开销。在GlusterFS中,还有很多这样的xattr,接下来重点集中在两个xattr:trusted.glusterfs.dht xattr(DHT Translator使用)和trusted.afr.* xattr(AFS Translator使用)

DHT

DHT,指分布式集群,采用一致性哈希。文件被哈希后获取到一个哈希值,然后在一个哈希表中进行查找。哈希表描述了每个存储节点(brick)分配到的hash range,hash range被唯一的分配给某个存储节点。这种对应关系,或者说分配关系,是在每个目录被创建时建立的。新创建的目录会在当前集群的所有可用存储节点上被同时创建,也就是说,每个存储节点上都会有新建目录的一份拷贝。其中,每份拷贝有不同的扩展属性:trusted.glusterfs.dht xattr,描述了当前拷贝负责的hash range. 当目录被创建后,在此目录下新建的文件和/或目录,就会根据当前目录的哈希表进行哗然分布。

可以看出,这是目录级别的哈希。

当目录被查找时,要做的工作是:收集这些xattrs,并根据它们的hash range生成一张哈希表(描述存储节点和其对应hash range的映射关系)。

而当存储节点被添加或移除时,xattrs需要重新计算。这些都会影响到系统的扩展性,需要更好的解决。但在当前的系统中,这些机制暂时运行的很好。

 

AFR

也就是raid1,指复制集群。AFR中xattr的使用,要比DHT中复杂的多。这里主要是指trusted.aft.* xattrs, *是复制集群中除了xattr所在的当前存储节点之外的所有其它存储节点,,也就是说,在一个replica组内,某存储节点中当前目录的扩展属性,记录了此复制组内其它存储节点中相同目录的操作信息,相互记录。

这样做的原因,是为了错误恢复。因此,操作的状态不能只记录在一个地方,一次失败可能会同时清除操作和状态记录。所以,可靠的方法是,操作在一个节点执行,同时将此操作记录在多个节点。

Xattr记录中的计数可以看作是等待中的操作的数目,是一个32位整数,记录了3种操作类型:

1)数据操作。主要是写,也包括截断

2)元数据操作。像chmod/chown/chgrp,还有xattrs

3)名字空间操作。create/delete/rename

 

对文件系统修改时,首先更新所有节点中保存的对应目录的扩展属性中的计数器。事实上,为了支持AFR,GlusterFS还额外定义了几个xattr操作(像原子增加计数等)。只有当所有的计数器都被增加,实际操作都会发送到所有副本。当每个节点完成操作时,分布到其它副本节点的对应于此操作的计数器会被递减。最终,所有的计数器都会归0. 如果节点X在操作中失效,或者没有办法开始,其它所有节点对应此操作的计数器就会保持非零。在下一次获取此计数器时,通过比较,此非零状态能容易地被检测出来。根据所有计数器的关系,通常能指示哪个节点失效了,自我修复就能正确、及时的恢复集群状态。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
引用\[1\]:在使用GlusterFS时,可以通过mount命令将服务端挂载为客户端。例如,可以使用以下命令将fk1服务器挂载到/mnt目录,并在该目录下生成多个文件: ``` mount -t glusterfs fk1:/gv0 /mnt for i in `seq -w 1 100`; do cp -rp /var/log/messages /mnt/copy-test-$i; done ``` 通过执行`ls -lA /mnt/copy* | wc -l`命令,可以检查客户端挂载点,如果返回100,则表示挂载成功。同样,在任意服务端主机上执行`ls -lA /data/brick1/gv0/copy*`命令,如果也返回100,则表示挂载成功。\[1\] 引用\[2\]:在两台服务端上,可以执行以下命令设置GlusterFS服务器: ``` mkfs.xfs -i size=512 /dev/sdb1 mkdir -p /data/brick1 echo '/dev/sdb1 /data/brick1 xfs defaults 1 2' >> /etc/fstab mount -a && mount ``` 这些命令的作用是创建文件系统、创建目录、将文件系统添加到/etc/fstab中并挂载。\[2\] 至于gluster.mount问题,根据提供的引用内容,没有找到与gluster.mount相关的信息。请提供更多详细信息,以便我能够更好地回答您的问题。 #### 引用[.reference_title] - *1* *2* *3* [gluster安装完全指南](https://blog.csdn.net/wbin233/article/details/81156068)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值