通过监控、检测、动作三步闭环,把故障响应从“人工介入”变成“策略驱动”,让系统自己发现异常、自己执行恢复动作,同时联动资源池做弹性调度。这套机制不是单一功能,而是监控工具、高可用策略、资源调度策略、自动化脚本的组合拳,下面从运维场景出发,拆解每一步具体怎么做。
虚拟化环境里,故障自愈的第一道防线是“心跳检测”和“健康检查”
虚拟机“假死”或“真死”,系统怎么区分?靠的是心跳信号和VMware Tools的实时上报,当虚拟机的操作系统失去响应,vCenter会先等待一个可配置的时间窗口,比如默认的VMware HA心跳超时时间,如果在这个窗口内没有恢复心跳,系统判定为故障,自动执行下一步动作。
健康检查不能只看心跳,还要看应用层状态,比如Web服务器进程还在,但端口不响应了,这就是“假活”,这种场景下,单纯靠虚拟化平台的HA是发现不了的,需要引入应用级健康检查脚本,比如在客户机内部署一个Agent,定时探测本地服务的端口或进程,一旦异常就主动发起“故障宣告”,或者重置服务。
行业共识认为,一套完整的自愈检测机制应该包含三个层面:宿主机层面的硬件故障检测、虚拟机层面的操作系统心跳检测、应用层面的业务探活,三层叠加,才能把“宕机”“卡死”“应用无响应”区分开。
自动修复策略的设计,核心是“动作分级”:先软后硬,先局部再全局
不是所有故障都需要重启虚拟机,一台只跑批处理任务的虚拟机,跟一台承载核心数据库的虚拟机,恢复策略完全不一样,巡检判断、自动执行、结果验证,这条链路要清晰。
一级动作:服务级自愈,最轻量
应用进程挂了,但操作系统正常,此时直接重启应用服务,或者调用系统自带的守护进程拉起服务,这是成本最低的恢复方式,具体操作上,可以在虚拟机内部配置systemd服务单元,加上Restart=always参数,这种方式恢复时间以秒计,对业务影响最小。
二级动作:客户机操作系统级修复
服务重启无效,或者系统内核出现异常,第二级动作是重置虚拟机操作系统,vCenter的“重置”操作相当于按物理机的Reset键,速度比重启快,但存在数据丢失风险,这一级动作适合对数据一致性要求不高的场景,重要应用建议配合应用程序一致性快照,在重置前先打一个快照保底。
三级动作:虚拟机重建或迁移
宿主机硬件故障、虚拟机配置文件损坏,这类底层问题,前两级动作都救不回来,此时需要自动重建虚拟机
,或者依靠vSphere HA在其他健康的宿主机上重新启动虚拟机,这里有个关键参数叫“虚拟机重新启动优先级”,建议把核心业务设为“高”,避免资源竞争时核心业务排在后面。
四级动作:跨可用区容灾切换
单站点整体故障,比如机房断电、网络分区,自愈动作要上升到容灾层级,借助Site Recovery Manager,可以把恢复计划自动化,实现一键切换或故障自动切换,这个动作最重,但也是最后一道保险。
资源动态调配不是单纯的“加内存”,而是“感知压力、自动伸缩、回收空闲”的闭环
故障自愈和资源调配经常被分开谈,但实际运维中,资源瓶颈本身就是触发故障的原因之一,内存耗尽、磁盘I/O饱和,都会让虚拟机“假死”,所以自动修复链路里,必须有资源动态调配这一环。
基于阈值的动态扩缩容怎么落地
vSphere DRS是资源调度的基础能力,当集群内某台宿主机的CPU或内存使用率超过阈值线上限(比如持续5分钟超过80%),DRS会自动把虚拟机迁移到负载更低的宿主机,这个动作是热迁移,业务无感知。
但DRS只管宿主机之间的负载均衡,不管虚拟机规格大小,真正意义上的垂直伸缩,在VMware环境里需要靠vRealize Automation或者云管理平台配合Hot Add功能,比如监控到某台虚拟机CPU使用率持续15分钟超过85%,自动化平台调用API,给这台虚拟机动态添加vCPU,这个动作要谨慎,因为CPU热添加有guest OS兼容性要求,Linux部分内核版本不支持。
资源池的“回收策略”往往被忽略
动态调配不只是“加”,还要会“减”,业务低峰期,比如凌晨的批量任务结束后,CPU使用率降到10%以下,就应该触发缩容动作,把多余资源还给资源池,实操中,可以设定持续观察窗口,比如连续7天利用率低于某一水平,才触发回收,避免频繁变配引起业务抖动。
存储和网络的动态调配同样关键
资源调配不只CPU和内存。存储厚置备转精简置备、存储DRS自动迁移数据,解决的是“磁盘快满了”这类问题,网络层面,结合vRealize Network Insight做流量分析,动态调整分布式交换机上的带宽策略,应对突发的流量高峰。
下面用一张表对比两种主流资源调度机制的分工:
| 调度机制 | 主要作用 | 适用场景 | 触发时机 |
|---|---|---|---|
| vSphere DRS | 跨宿主机负载均衡 | CPU/内存资源竞争 | 宿主机负载持续超过阈值 |
| Storage DRS | 跨数据存储空间均衡及I/O负载 | 磁盘空间不足或存储I/O瓶颈 | 数据存储使用率超阈值或I/O延迟过高 |
两者配合,才能达到“计算资源跟着压力走,存储资源跟着容量走”的动态平衡。
一套可落地的自动修复机制,需要哪些组件协同
从纯功能层面说,VMware自家的HA、DRS、SRM已经能完成大部分工作,但故障自愈的精髓在于“可编排”,靠在界面上点几个按钮,不算真正的自愈。
建议的技术栈组合
对于多数中小规模环境,一套开源或轻量方案就够了:用Telegraf+InfluxDB+Grafana做指标采集和可视化,用Prometheus Alertmanager做告警触发,再用Ansible或PowerCLI脚本做动作执行,这套组合比全商业方案便宜很多,灵活性也高。
自动化动作的“安全阀”设计
自动修复最怕“误伤”,一个错误的自动化动作,可能比故障本身破坏性更大,设计上必须加三层安全阀:
- 灰度执行:先在非核心虚机上跑一段时间,观察动作成功率。
- 动作回滚:执行修复动作前,自动创建快照或备份配置文件,一旦修复失败能回退。
- 人工确认闸门:对于重置、重建、迁移这类高风险动作,可以设定为“自动触发+等待确认窗口”,比如系统自动执行完健康检查并生成修复建议后,等待运维人员点击确认才执行。
故障自愈的效果,要用“恢复时长”来度量
衡量这套机制好不好,不看出不出故障,看平均恢复时长(MTTR),人工处理虚拟机宕机,从告警到登录后台再到重启服务,快的二三十分钟,慢的以小时计,自动修复机制跑顺后,常见的应用级故障可以在3-5分钟内自动恢复,宿主机故障导致的虚拟机重启也能压缩到10-15分钟内,这些数据来自多数生产环境的实测反馈,具体表现取决于存储性能和应用启动速度。
实际运维中的几个“坑”和应对建议
坑一:虚拟机自动启动顺序错乱导致业务起不来
一套业务系统往往由多个虚拟机组成,比如数据库、应用服务器、前端负载均衡,如果宿主机宕机后,所有虚拟机同时自动启动,应用服务器会先于数据库启动,连不上数据库,直接启动失败。
应对办法是设定虚拟机启动顺序和延迟时间,在vCenter集群设置里,可以配置“虚拟机启动/关闭”的依赖关系,让数据库先启动,延迟120秒后,再启动应用服务器,这个延迟时间要测试确定,给足数据库完全初始化并接受连接的时间。
坑二:快照积压把磁盘占满
自动修复动作如果频繁创建快照,比如每一次修复前都打快照,但事后没及时删除,虚拟机的VMDK文件会不断膨胀,最终导致存储空间告警,甚至虚拟机挂起。
处理方式是在自动化脚本里加上快照生命周期管理,创建快照后24小时内自动删除”,或者在修复动作成功执行后立即删除临时快照。
坑三:DRS自动迁移打断了正在执行的备份任务
资源动态调配引发的热迁移,会让虚拟机在迁移过程中短暂阻塞I/O,如果此时正在执行备份任务,可能导致备份失败。
建议给备份操作加上应用一致性快照配合,同时将DRS迁移阈值调低,或者在备份窗口内暂停DRS的主动迁移动作,行业共识是备份脚本里显式调用vCenter API,查询当前迁移状态,避免并发冲突。
组合实践:一套完整的“自动修复+资源调配”触发逻辑
以一个典型的Web应用集群为例,梳理完整的自愈链路:
- 应用侧Agent每分钟探活,发现某个节点接口响应超过5秒无返回。
- 触发一级动作:执行服务重启脚本。
- 3分钟后再次探活,依然无响应。
- 触发二级动作:该节点打快照,执行虚拟机重置。
- 重置开机后,等待心跳恢复,再次探活确认。
- 集群内的DRS感知到该宿主机负载升高,将其他负载转移至还宿主机资源的其他节点。
- 如果该业务整体压力仍在上升,自动化平台触发垂直伸缩动作,给应用服务器集群增加一台实例接入负载均衡。
- 故障节点恢复正常后,负载均衡自动摘除旧节点并纳入新节点。
这条链路中,每个动作都有触发条件、执行动作、验证结果三步,避免“修了但没修好”的尴尬。
Q&A
问:虚拟机自愈机制最低配置需要哪些环境?
一台vCenter Server,一个包含至少两台宿主机的集群,所有虚拟机安装VMware Tools,软件层面需要开启vSphere HA,并配置至少一台节点作为故障域控制器,如果要做资源自动调配,需要开启DRS,并配置自动化级别,这套基础环境不依赖额外付费功能,标准版许可即可覆盖。
问:如何避免自动重置操作导致的数据丢失?
在重置动作前强制做两件事:一是向客户机操作系统发送一条静默命令,通知应用层执行数据刷盘(比如调用数据库的CHECKPOINT命令);二是创建应用程序一致性快照,确保磁盘状态和内存状态一致,执行这两个动作后仍失败,再考虑重置,数据极端重要的场景,建议在同级动作之间插入人工确认步骤。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/627392.html





