场景分析
平台目前使用的存储为nfs和gluster网络文件系统,出现的问题一般是C/S端服务异常。nfs服务异常时会导致目录列表(df -h 或者cd)无法输出,主要是因为系统后台一直在尝试挂载,虽然nfs有retry尝试次数选项,但是服务端恢复就没法及时挂载上(目录依旧无法显示)。看来只能自己动手,丰衣足食了。
检测思路
脚本主要包含两个方面,分别对应开机挂载和异常处理两种情形。思路如下:
使用系统定时任务实现,流程:尝试挂载》异常卸载目录并报错》下次检测继续挂载,超时放弃。
nfs存储目录里都会有.nfs标识文件,判断.nfs是否存在即可,当服务异常时则先卸载目录(针对服务无响应目录无法显示情形),下一次则尝试挂载恢复,超时则放弃。
尝试挂载部分,针对目录集合遍历循环开启多线程,每个线程检测.nfs文件是否存在。python不支持kill线程,但是有个setDaemon方法,其作用是只要主线程完成了,不管子线程是否完成,都要和主线程一起退出。在超时时间内,能挂载好的就都挂上了,挂不上的话只要主线程结束就停止挂载了。
测试用例验证
开机启动是否能够自动挂载
本机对外提供存储,存储目录是否被挂载,存储自身重启
挂载好的目录掉线是否能够自动恢复挂载
服务端异常是否能够自动卸载并不影响ls目录
新增挂载目录是否会自