glusterfs部署之后,需要根据生产环境应用的访问特性做一些调优。这时会使用 gluster volume set 指令设置卷属性,但是操作过程中,还是遇到了一些困难。

设置glusterfs的缓存

gluster volume set g_backup performance.cache-size 1GB

遇到以下报错

#gluster volume set g_backup performance.cache-size 1GB
volume set: failed: Staging failed on 192.168.1.191. Error: One or more connected clients cannot support the feature being set. These clients need to be upgraded or disconnected before running this command again
Staging failed on gstore-2.example.com. Error: One or more connected clients cannot support the feature being set. These clients need to be upgraded or disconnected before running this command again
Staging failed on gstore-11.example.com. Error: One or more connected clients cannot support the feature being set. These clients need to be upgraded or disconnected before running this command again

再检查卷信息,发现上述报错导致缓存设置没有成功

gluster volume info g_backup

找不到解决的方法,我登录到报错的 gstore 节点上,tail了glusterfs日志,在 /var/log/glusterfs/etc-glusterfs-glusterd.vol.log 日志中有

[2014-10-28 08:11:15.475423] E [glusterd-op-sm.c:357:glusterd_check_client_op_version_support] 0-management: One or more clients don't support the required op-version
[2014-10-28 08:11:15.475471] E [glusterd-op-sm.c:3886:glusterd_op_ac_stage_op] 0-management: Stage failed on operation 'Volume Set', Status : -1

也没有显示出哪个客户端存在问题

扫描了所有客户端,将客户端版本都升级成相同版本,但是发现仍然报错(不过只报一个节点)

volume set: failed: Staging failed on gstore-11.example.com. Error: One or more connected clients cannot support the feature being set. These clients need to be upgraded or disconnected before running this command again

尝试重启有报错的节点,但是发现如果存储服务器节点启动以后(客户端再次连接了上来),再设置就同样报错。

dirty的解决方法

这个问题我怀疑是glusterfs客户端版本不一致导致的,低版本的glusterfs客户端连接在高版本的glusterfs服务器上(或者还有NFS客户端连接),就会遇到这样设置卷属性不能生效的问题。

最终我使用了一个比较激进的方法来重启glusterfs节点(因为部署使用的是replication模式,三个副本,所以重启某个节点对集群服务无影响),在重启节点尚未启动完毕前(连接有问题的客户端尚不能连接上来),立即设置glusterfs卷属性。这样重启的glusterfs服务器节点恢复服务的时候就会取得这个设置属性,来完成glusterfs卷的设置。

随着规模的不断扩大,开源平台技术需要有更完善的运维之道,这方面还有很多需要探索和总结之处。。。