关于Gluster稳定性的一个BUG

38 篇文章 2 订阅
25 篇文章 1 订阅

这一段时间一直在研究Gluster集群文件系统,其技术架构和原理请参考前面的一篇文章“Gluster集群文件系统研究”。为了验证其所声称的高扩展、高可用、高性能的特点,我部署了一个较大规模的测试环境,4个I/O节点(即brick servers,DELL R510, 8GB内存,4块1TB SATA磁盘)和两个客户端节点(DELL R510, 16GB内存,2块SAS 300GB磁盘),进行了大量的系统测试工作,并开始着手源码深入阅读和分析。测试的结果总体上是令人满意的,能够达到官方所称的高扩展、高可用和高性能指标,可管理性、易用性也很好。但是Gluster(测试版本为3.2.1)当前的系统稳定性不足,测试中多次遇到文件目录无法创建、删除和读写的问题。

在自己尝试解决未果的情况下,我通过邮件列表向Gluster团队报告了该BUG(bugid=3132),没想到他们反应非常快,一个星期不到就给解决了,赞一个!

BUG描述

采用distributed + stripe卷,volume配置信息如下,

Volume Name: dhtstp
Type: Distributed-Stripe
Status: Started
Number of Bricks: 3 x 4 = 12
Transport-type: tcp
Bricks:
Brick1: 192.168.8.200:/mnt/sdb/dhtstp
Brick2: 192.168.8.201:/mnt/sdb/dhtstp
Brick3: 192.168.8.202:/mnt/sdb/dhtstp
Brick4: 192.168.8.203:/mnt/sdb/dhtstp
Brick5: 192.168.8.200:/mnt/sdc/dhtstp
Brick6: 192.168.8.201:/mnt/sdc/dhtstp
Brick7: 192.168.8.202:/mnt/sdc/dhtstp
Brick8: 192.168.8.203:/mnt/sdc/dhtstp
Brick9: 192.168.8.200:/mnt/sdd/dhtstp
Brick10: 192.168.8.201:/mnt/sdd/dhtstp
Brick11: 192.168.8.202:/mnt/sdd/dhtstp
Brick12: 192.168.8.203:/mnt/sdd/dhtstp
Options Reconfigured:
nfs.disable: off
nfs.addr-namelookup: off

客户端mount -t glusterfs 192.168.8.200:/dhtstp /mnt/dhtstp后,创建文件时出现“Invalid argument”错误,删除文件出现“No such file or directory”,客户端部分日志太多暂不提供。

BUG原因

stripe default setxattr works on first child. If the first cbk is not the first child, then we were loosing the xattrs. 

Stripe卷缺省情况下扩展属性工作在第一个节点,如果回调不是第一个节点的话,扩展属性会丢失,从而丢失了文件的布局信息。因此,导致文件不可访问的情况发生。

解决方法

应用Patch 7573, 其实代码只增加了4行,如下,

diff --git a/xlators/cluster/stripe/src/stripe.c b/xlators/cluster/stripe/src/stripe.c
index 4da0495..0d075e4 100644
--- a/xlators/cluster/stripe/src/stripe.c
+++ b/xlators/cluster/stripe/src/stripe.c
@@ -254,6 +254,10 @@  stripe_aggregate (dict_t *this, char *key, data_t *value, void *data)
                 }
 
                 *size = hton64 (ntoh64 (*size) + ntoh64 (*ptr));
+        } else {
+                ret = dict_set (dst, key, value);
+                if (ret)
+                        gf_log ("stripe", GF_LOG_WARNING, "xattr dict set failed");
         }
 
         return;

这个Patch我已经验证并向Gluster开发者进行了确认,相信在下一个版本中就会得到修正,暂时可以自己进行patch修复。

Gluster开始与2007年,终究还是时间短了一点,实现方面有些地方不是很好,稳定性和成熟必性方面还是有所欠缺。诸如StorNext, GPFS, Lustre, PVFS这些文件系统都是1999年左右开始的,经历了10多年考验都很成熟稳定了。还是那句话,生产环境应用Gluster还得谨慎,但是它确实是个架构良好的集群文件系统,未来发展空间很大,尤其是在云计算和云存储领域。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 20
    评论
引用\[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 ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值