glusterfs mount rdma failed

问题描述

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

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日志

解决

借问搜索引擎,有相似状况,未能找到解决方案。code

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

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

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

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,这种状况可按如下方法解决:io

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

一切顺利。