我们组的云平台后端使用分布式文件系统
采用的就是gluster,要说这个分布式文件系统确实比较智能
平时重启gluster也不会导致数据丢失和影响服务
如果一个gluster的brick无法使用,还可以自动同步数据
不过总会有特殊情况发生
我们组运维的某云平台就出现了问题,gluster数据不同步
情况是这样的,该gluster有两个brick
其中有07、08这两台存储
08这台存储大概停了一两个月
gluster在这一点上还算健壮,一个存储挂掉了,还能正常使用
后来把08这台存储启动起来,然后数据就可以自动同步
但是问题又出现了,大部分数据都可以同步
只有两个disk文件无法同步,导致了两台虚机不可用
如果把08停掉,这两台虚机照样可用,启动08就不可用
这个可纠结了,虽然不可用虚机比较少,但也导致了无法启动两台存储
后来我发现07的disk比较大,08 的比较小
然后把08的disk删除,把07的disk复制到08的相同位置上
结果启动起来后还是不行
虚机还是不能够启动
后来我发现了问题所在,那就是时间戳
两个disk的时间戳相差太大,所以gluster内部认为文件不可用
据我观察,两台存储时间戳相差2分钟内还是可以用的
后来改了一下两个disk的时间戳,重启gluster
果然一切都正常了
==========================================================
下面再写一点其他的原理
gluster做到文件同步,也是因为每个文件都是有隐藏状态的
查看隐藏状态使用getfattr -m . -d -e hex 这样的命令
会看到状态如下:
file: disk
trusted.afr.eccp-instances-client-0=0x000000780000000000000000
trusted.afr.eccp-instances-client-1=0x000000000000000000000000
trusted.gfid=0xda22c205e6d147b299951f374f09a942
像我这个文件就出现了问题
client0的修改次数是0x78,而且没有同步到client1上
这里就说client0是明智的,以client0 的文件为主
正常的文件都会是0
如果出现两个文件都不是0的情况的话,要人工来做