Description
【问题】
3FS为CRAQ链式读机制,测试读的时候,任意故障一个后端节点,客户端应该能正常读取,但目前测试发现,storage_main进程故障会引起在读的客户端挂载目录挂掉的问题
【环境情况】
2客户端(client1,client2)+2存储节点(storage1,storage2)
【前期环境确认】
在完成环境部署后,确认节点心跳正常,条带chains正常,所有的HEAD都分布在storage1-10001节点上,所有的TAIL都分布在storage2-10002节点上,状态均为正常
【测试前准备】
先在客户端预埋50G数据,fio下发正常,无error
【测试1】
停止stroage2的主进程(TAIL)
在fuseclient1对预埋的50G数据进行校验读,随后在读的过程中停止stroage2上面的主进程(systemctl stop storage_main),服务停止后IO有短暂的断流,随后恢复
查看list-chains,发现storage2的条带全都offline;查看list-targets,发现所有的TAIL状态都变为offline,符合正常预期;最后fuseclient1读校验正常结束,error=0,符合正常预期
随后恢复storage2节点,确认客户端读写正常,恢复至与初始环境状态一致
【测试2】
停止stroage1的主进程(HEAD)
在fuseclient1对预埋的50G数据进行校验读,随后在读的过程中停止stroage1上面的主进程(systemctl stop storage_main),服务停止后IO断流后无法恢复,当前客户端的挂载目录消失,hf3fs_fuse_main进程faild(core down)
查看list-chains,发现storage1的条带全都offline,storage2的状态为serving;查看list-targets,发现10001所在的Role变为TAIL,10002的Role变为HEAD;用fuseclient2客户端用同样的读校验命令,fio可正常读,最终error=0
不恢复storage1节点状态,重启fuseclient1的hf3fs_fuse_main进程,下发同样的fio,可正常读,最终error=0