您的位置:首页 > 其它

Gluster升级遇到的问题

2016-12-21 15:16 218 查看

一、问题重现

我们已有9台部署有
glusterfs3.7.2
的服务器(
qserver0
,
qserver1
, …
qserver8
),现在想新加入3台服务器(
qserver9
,
qserver0
,
qserver11
)。11台机器的ip分别是:
192.168.0.130
,
192.168.0.131
, …,
192.168.0.141
。我们一直都通过以下方式来安装
glusterfs
:

step1:将以下内容新建到文件
/etc/yum.repos.d/glusterfs-epel.repo


Place this file in your /etc/yum.repos.d/ directory

[glusterfs-epel]

name=GlusterFS is a clustered file-system capable of scaling to several petabytes.

baseurl=http://download.gluster.org/pub/gluster/glusterfs/3.7/LATEST/EPEL.repo/epel-releasever/basearch/

enabled=1

skip_if_unavailable=1

gpgcheck=1

gpgkey=http://download.gluster.org/pub/gluster/glusterfs/3.7/LATEST/rsa.pub

[glusterfs-noarch-epel]

name=GlusterFS is a clustered file-system capable of scaling to several petabytes.

baseurl=http://download.gluster.org/pub/gluster/glusterfs/3.7/LATEST/EPEL.repo/epel-$releasever/noarch

enabled=1

skip_if_unavailable=1

gpgcheck=1

gpgkey=http://download.gluster.org/pub/gluster/glusterfs/3.7/LATEST/rsa.pub

[glusterfs-source-epel]

name=GlusterFS is a clustered file-system capable of scaling to several petabytes. - Source

baseurl=http://download.gluster.org/pub/gluster/glusterfs/3.7/LATEST/EPEL.repo/epel-$releasever/SRPMS

enabled=0

skip_if_unavailable=1

gpgcheck=1

gpgkey=http://download.gluster.org/pub/gluster/glusterfs/3.7/LATEST/rsa.pub

step2:用以下命令安装
glusterfs


sudo yum install glusterfs-server


但此时的
LATEST
版本已经是
glusterfs3.7.18
了。

为保持一致性,我们直接将旧的9台机器update到gluster3.7.18。然后再从qserver8中添加qserver11节点:

sudo gluster peer probe 192.168.0.141


此时查看peer状态

sudo gluster peer status


qserver8
机器上如下:



qserver11
机器上如下:

[当时没有截图,汗。。。]也是State: Peer Rejected (Connected)的状态

二、问题探索

发现1:

通过对比
qserver0
~
qserver8
qserver11
中的
/var/lib/glusterfs
中的内容,我们发现
qserver0
~
qserer8
中的
/var/lib/glusterfs/vols/{vol_name}/cksum
的值都相同,但
qserver11
中的
cksum
值和他们不同。

怀疑1
cksum
的不同是问题的根源,考虑手动修改
cksum


发现2:

我在
qserver11
上手动将
cksum
修改为和
qserver8
一致,再重新启动
glusterd


sudo systemctl restart glusterd


发现重启服务失败,
/var/log/glusterfs/etc-glusterfs-glusterd.vol.log
中记录错误如下:



初步发现此时只能将
/var/lib/glusterfs
整个文件夹删除再重新启动

结论1:一旦通过
qserver8
qserver11
porbe之后,
qserver11
上的
glusterd
就无法重启了。所以不能手动修改
qserver11
cksum
,考虑曲线救国,修改
qserver0
~
qserver8
上的
cksum


发现3:

先对
qserver8
进行尝试

修改
qserver8
cksum
qserver11
上的一致,再重启
qserver8
上的
glusterd
,发现
qserver8
上的
cksum
又恢复了原来的值。由此可知,
glusterd
在重启时会计算并重写
cksum


进一步阅读
glusterfs-3.7.18
源码,发现
cksum
是对
/var/lib/glusterfs/vols/{vol_name}/info
的内容进行计算。

对比
qserver8
qserver11
/var/lib/glusterfs/vols/{vol_name}/info
内容,发现
qserver11
中缺少一行
quota-version=0


怀疑2
glusterfs-3.7.2
info
内容会存在
quota-version=0
,但
glusterfs-3.7.18
info
内容并不会存在
quota-version=0
。而
glusterfs
在从
3.7.2
升级到
3.7.18
时,并不会更新已存在的
info
的内容,从而导致了这种不一致。

发现4:

qserver8
中的
info
中的
quota-version=0
全部删去,再重新probe
qserver11
。发现

qserver8
qserver11
正常连接:Status: Peer in Cluster(Connected)

qserver8
qserver0
~
qserver7
连接异常: State: Peer Rejected (Connected)

结论2:由此我们可以印证,确实是因为
info
不一致导致
cksum
不一致,再导致rejected(connected)

发现5:

就在我考虑将
qserver0
~
qserver7
也都像
qserver8
那样修改时,发现一个问题:

sudo gluster volume status {vol_name}


qserver8
上的
volume
信息出错了,也就是说
qserver8
其实是脱离了
qserver0
~
qserver7
了。如果将
qserver0
~
qserver7
也都修改了,虽然
qserver0
~
qserver8
qserver11
互相peer in cluster了,但他们原来的volume都异常了

结论3:我们只能再次回归到
qserver11
上,看看为什么怀疑1中发现的
qserver11
就无法重启了。只要解决了
qserver11
重启, 问题也就解决了

发现6:

通过修改
glusterfs
的日志打印级别至
DEBUG


sudo vim /usr/lib/systemd/system/glusterd.service


对照
/var/log/glusterfs/etc-glusterfs-glusterd.vol.log
glustetfs-3.7.18
的源代码,
log
中提示是因为无法找到
qserver2
。找到
glusterfs-3.7.18
中对应的源码,知道
glusterd
在启动的时候,会将
/var/lib/glusterd/vols/{vol_name}/
中的
brick
信息的
hostname
,用
peers
来解析。

因为
peers
中只有probe失败之后的
qserver8
信息,自然无法解析
qserver2


结论4:只要补全
qserver11
/var/lib/glusterd/peers
中的信息即可

三、问题解决

step1:

qserver8
:

sudo gluster peer probe 192.168.0.141


step2:

qserver11
:

根据
qserver8
上的内容将
qserver8
上的
/var/lib/glusterd/peers
信息补全

step3:

qserver11
:

/var/lib/glusterd/vols/{vol_name}/info
中的
quota-version=0
去掉

step4:

qserver11
:

sudo systemctl restart glusterd
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  glusterfs gluster