那天下午两点半,我正坐在工位上对着一份没写完的周报发呆,手机突然开始疯了一样地震动。先是工作群里有人艾特我:“财务系统打不开了”,接着旁边同事的声音传过来:“OA也登不上去了”“报表系统全挂了”。我打开vCenter的时候,手心里已经全是汗。屏幕上,9台虚拟机像约好了一样,齐刷刷地亮着红色告警,状态列里写着“无响应”——后来有人用一句话总结这场事故:“9台服务器集体罢工了。”
这里要说明一下,这9台“服务器”,没有一台是真实存在的物理机。它们是跑在VMware虚拟化平台上的9台虚拟服务器,分布在两台物理宿主机上,对外承载着财务、OA、订单、报表等核心业务。当我看到9台机器一起挂掉,脑子里蹦出的第一个念头是:坏了,这次不是虚拟机自己的问题,是它们共同依赖的底层出事了。
这也正是整件事最扎心的地方——服务器是虚拟的,惊魂却是实实在在的。电话里业务部门的语气越来越急,屏幕上告警仍然一片红,而我面前这台所谓“高可用”的虚拟化平台,看起来并没有像架构图里画的那样,在关键时刻帮我们把故障轻松挡掉。
1. 事发经过:9台虚拟服务器“集体掉线”的前30分钟
1.1 先还原现场,再动手“抢救”
事情发生的时间点很尴尬,下午两点半左右,正是业务方开始处理当天单据、订单、报表的时候。第一通电话进来的时候,我还以为是某个系统又出现了老问题,毕竟单个VM偶尔无响应这种事在虚拟化环境里并不罕见。但接下来的两分钟里,电话和消息像连珠炮一样涌进来,涉及的系统从OA到财务到订单查询,覆盖面完全没有规律。
我当时的第一反应是打开vCenter,但页面加载得异常慢。左侧清单栏里的9台VM,有的图标上挂着红色感叹号,有的状态直接显示“无响应”;再看两台物理宿主机,一台显示“已连接”但总览页面飘红,另一台处于“正在响应”和“无响应”之间反复横跳。任务栏里堆着一连串失败的任务记录,大部分是“虚拟机重新配置”“迁移”之类,时间正好卡在故障发生的那一分钟。
故障现场还原到这里,最需要克制的事情出现了:千万不要一上来就对所有VM执行“重启客户机操作系统”或者“强制关闭电源”。我见过太多同行在这种时刻因为顶不住业务压力而选择暴力重启,结果往往让问题更严重——如果底层存储或I/O路径本身处于不稳定状态,重启操作并不会让系统恢复,反而会让VM在启动阶段卡在“正在启动 Windows”或者内核加载的某个环节上。更麻烦的是,重启意味着大量新的SCSI命令被发送到底层,而这些命令本身就在排队、超时、重试,等于在已经堵死的马路上继续塞车。
正确做法是先花两到三分钟观察:vCenter里的告警明细是什么、任务报错的具体原因是什么、宿主机是否可以SSH登录。这些信息能帮你快速判断故障到底发生在计算层、网络层还是存储层,而不是像个无头苍蝇一样到处乱点。
1.2 从“9台同时挂”里读出的潜台词
把所有现象汇总之后,我意识到一个关键点:9台VM并不是集中在一台物理宿主机上。它们分散在两台ESXi主机上,物理机本身都还能ping通、能SSH,说明至少从IP网络角度看,这两台宿主机并没有“死掉”。那么一个合理的推断是——导致大面积故障的“凶手”不在计算层,而在某个共享层。
虚拟化环境里的故障判断有一条很实用的收敛思路:如果你发现多台VM同时出现相同症状,先别一台一台去排查VM内部,而是往上找它们共同依赖的东西。共同的东西无非这么几类:物理宿主机、虚拟交换机、物理网络链路、共享存储、存储网络,甚至机柜供电和机房制冷。这次9台VM分布在两台宿主机上,物理宿主又没宕机,嫌疑范围马上就缩小到了网络和存储。
顺着这个思路,我的排查路径也清晰了:先确认业务网络是否正常,再检查宿主机健康状态,最后把注意力放到存储路径上。这个过程听起来很简单,但实际操作中有很多容易让人误判的细节,尤其是“网络通”和“业务可用”这两个概念,在虚拟化故障里经常把人带进沟里。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 排查链路:排除了网络与宿主机后,把目光锁定在存储路径
2.1 业务网络测试通过了,但VM依然“半死不活”
既然怀疑范围缩小到网络和存储,我先从最容易测的网络开始。核心交换机、业务接入交换机上的日志和端口状态都是正常的,没有发现环路、广播风暴或者端口错误数飙升的迹象;用笔记本ping其中几台VM的IP地址,网关通,某些VM能ping通,但延迟时高时低,有些干脆丢包严重。
这个结果很容易让人误判为“网络有问题”,但我当时多做了一个动作:尝试SSH登录其中一台Linux虚拟机,登录过程卡了很久,提示符出来后敲一个命令要等十几秒才有反应。这个细节非常关键——如果只是单纯网络中断,VM要么完全ping不通,要么连接会被立即拒绝;但现在IP层面勉强能通,系统内部却慢得像要死掉一样,这说明网络链路是通的,问题出在VM“拿到CPU之后干不了活”。
虚拟机干活需要什么?需要能从虚拟磁盘读数据、把结果写回磁
