故障描述
位于某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
服务,网站服务也正常了。