手机版
你好,游客 登录 注册
背景:
阅读新闻

Glusterfs全局统一命名空间

[日期:2013-08-20] 来源:Linux社区  作者:刘爱贵 [字体: ]
Distributed集群
这种集群又称弹性哈希卷,它使用算法进行数据定位,这是整个Glusterfs的架构基础和最大特点,集群中的任何服务器和客户端只需根据路径和文件名就可以对数据进行定位和读写访问,因此文件定位可独立并行化进行。Glusterfs中,不需要将元数据与数据进行分离,文件元数据记录在底层文件系统的inode以及扩展属性上。GlusterFS的哈希分布是以目录为基本单位的,文件的父目录利用扩展属性记录了子卷映射信息,子文件在父目录所属存储服务器中进行分布。由于文件目录事先保存了分布信息,因此新增节点不会影响现有文件存储分布,它将从此后的新创建目录开始参与存储分布调度。
.lookup:采用hash算法查找文件
1)如果path为根目录,则选定第一个UP卷(dht_first_up_subvol)为目标卷;
2)否则,以path为输入参数计算hash值(dht_hash_compute),从父目录扩展属性中获取哈希分布信息,然后查找定位目标卷;
3)如果找到目标卷,则在目标卷中查找path;如果没有找到并且设置GF_DHT_LOOKUP_UNHASHED_ON/GF_DHT_LOOKUP_UNHASHED_AUTO,将搜索所有的卷;
4)如果没有找到目标卷,并且path为目录,则在所有子卷中查找;

.mkdir:分布到所有子卷上,新增节点参加分布上,并分配hash range
1)首先在目标卷hashed_subvol创建目录;
2)向其他所有子卷发送请求创建目录;
3)通过selfheal机制(dht_selfheal_new_directory)分配hash范围;

.create:分布到父目录所分布的子卷上,新增节点不参加分布
1)计算文件名hash值,查找目标卷;若未找到则返回;
2)如果目标卷空闲容量在预定水位以下,则创建文件并返回;
3)查找空闲容量在预定水位以下子卷,在其上创建文件,并在目标卷上创建链接指向实际文件;

Stripe集群
名字空间由所有子卷共同组成,lookup时会将请求发送到全部节点上,属性获取需要聚合。若其中任一节点出问题,则namespace和数据将不可访问。
.lookup:请求发送到所有节点,客户端进行聚合。当所有请求成功返回方才向上返回结果;
.create/mkdir:请求发送到所有节点,所有节点namespace相同,但属性稍有不同;
.readdir:向第一个节点请求所有目录项,属性需要查询所有节点进行聚合;
.readv:根据stripe size及Round Robin算法,计算出数据所在的节点,然后并行发送请求,由客户端对数据重新进行组织;
.writev:计算所写数据块所属节点及offset,所有写成功后方才向上返回;

Replica集群
所有节点具有相同的、全完全对等的名字空间,默认第一个节点作为主节点。请求通常发送到所有节点,所有成功返回后才向上作响应。
.lookup:请求发送到所有up节点,有成功返回即响应;并处理是否需要进行sealheal,主要依据是xattr上记录的change log;
.create/mkdir:以afr_transaction事务方式处理,请求发送到所有UP子节点上,所有成功返回后方才向上响应;
.readdir:选择一个UP节点发请求,具有负载均衡作用,失败后则依次请求所有其他节点;
.readv:open时打开所有UP节点,读时选择一个UP节点进行read,若失败则依次偿试所有其他节点;
.writev:以afr_transaction事务方式处理,请求发送到所有UP子节点上,所有成功返回方才向上响应;linux
相关资讯       GlusterFS 
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数

       

评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款