故障描述
位于某Proxmox VE超融合集群上的一个网站频频报警,表现的形式是一会儿服务不可用,一会儿又恢复(如下图所示),但同一集群上的其他Web站点未发现异常。
可能的原因
1)出口带宽占满。
2)Proxmox VE集群故障。
3)负载均衡器故障。
4)应用服务器故障。
5)数据库故障。
故障定位
1)通过查看IDC出口带宽,使用率低于50%;
2)查看负载均衡器状态,转发正常。
3)随机抽查其它域名的网站,访问正常。
以上三点排查,说明在整个集群层面不存在故障,问题应该是应用所在的虚拟机本身。由于出故障的主站,由四个虚拟机组成负载均衡集群,因此需要登录每一个虚拟机系统,进行排查和处理。
故障处理
登录到主站所在的所有虚拟机系统,查看系统日志,未发现异常,但PHP慢日志里有很多信息值得怀疑,如下图所示。
不懂开发,先将这些信息截取部分,让人转发给异地的开发人员。几天过去了,还没有动静,但报警依旧,不能听之任之,继续排查。
登录到主站所在的虚拟机,执行指令“netstat -anp| grep -v unix”查看网络状态,从屏幕输出发现大量的“TIME_WAIT”(如下图所示),记录下与之关联的IP地址及端口,通过简单统计,得知IP地址为“172.16.98.124”,端口为“3306”的系统,遗留的信息最多,由此判断,故障应该有数据库“172.16.98.124”关系密切。
根据得出的信息,登录系统“172.16.98.121”,执行命令“dmegs”,从输出可知,磁盘分区“/dev/sdb1”的文件系统有损坏(如下图所示),试着用命令“fsck -n /dev/sdb1”检查一下。
因为系统上的MySQL服务处于运行状态,分区”/dev/sdb1”处于挂接状态,因此运行命令“fsck”时必须加选项“-n”,只检查不修复,避免丢失数据的风险。
在有问题的系统上,关闭MySQL服务,卸载分区“/dev/sdb1”,正式执行”fsck -y /dev/sdb1”进行文件系统修复。花费一些时间后,修复完成。挂接已经被修复的分区,然后启动MySQL服务,网站服务也正常了。