glusterfs mount rdma failed

问题描述

集群有两个io节点,各挂载一块盘(于/data),将二者放入一个存储池(在io1执行):

gluster peer probe io2

在其上建立卷(在两个io节点的/data目录下个建立一个share文件夹),指定传输方式为rdma(远程直接内存访问Remote Direct Memory Access):

gluster volume create share transport rdma io1:/data/share io2:/data/share
gluster volume start share    #启用该卷

了客户端挂载卷到指定目录(这里时/share):

mount -t glusterfs -o transport=rdma io1:/share /share

执行后,提示Mount failed. Please check the log file for more details

解决

借问搜索引擎,有类似情况,未能找到解决方案。

在客户端上检查日志/var/log/glusterfs/share.log发现挂载时连接io1存在问题,有类似语句:Transport endpoint is not connected,也就是连接在问题,不过在客户端上ping测试io1节点上的IB卡的地址却正常,使用默认传输方式(TCP)建立的卷能正常挂载。

其实原因很简单,属于疏忽级问题:
该集群中各个节点的/etc/hosts文件中仅添加了ip和hostname对应的解析,以本文为例,主机名io1其实是对应的该节点上某个以太网卡的地址,而非“无限带宽”(Infinband)网卡的地址。在挂载时指定传输类型(transport)为rdma时,系统却无法通过io这个主机地址进行IB方式的传输。

因此在创建卷的时候应该使用各个io节点的IB地址(IPoIB)(或者在hosts文件中为IB地址单独创建解析,如io1上命名为ib.io1),挂载卷的时候也如此。
删除先前的卷

gluster volume stop share
gluster volume delete share

重新创建卷

gluster volume create share transport rdma ib.io1:/data/share ib.io2:/data/share
gluster volume start share    #启用该卷

提示,重新创建的卷和先前创建的卷同名(即使该卷已经删除过),可能会提示类似:volume create: share: failed: parent directory /data is already part of a volume,这种情况可按以下方法解决:

setfattr -x trusted.glusterfs.volume-id /data/share  #这里/data/share换成你实际的路径
setfattr -x trusted.gfid /data/share   #同上 可能会提示not attributes 无妨
rm /data/share/.glusterfs -rf

然后重新创建卷。
如果还遇到问题,可以直接删除/var/lib/glusterd文件夹,卸载glusterfs-server,删掉卷文件夹(本文中是/data/share),然后重装来过。

客户端挂载

mount -t glusterfs -o transport=rdma ib.io1:/share /share

如果要自动挂载,在/etc/fstab添加:

ib.io1:/share.rdma /share glusterfs default 0 0

一切顺利。

    原文作者:levinit
    原文地址: https://segmentfault.com/a/1190000014730951
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞