<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>故障群集 on Zero Day Notes</title>
        <link>https://blog.5772447.xyz/tags/%E6%95%85%E9%9A%9C%E7%BE%A4%E9%9B%86/</link>
        <description>Recent content in 故障群集 on Zero Day Notes</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>zh</language>
        <lastBuildDate>Mon, 28 Sep 2026 09:00:00 +0800</lastBuildDate><atom:link href="https://blog.5772447.xyz/tags/%E6%95%85%E9%9A%9C%E7%BE%A4%E9%9B%86/index.xml" rel="self" type="application/rss+xml" /><item>
            <title>Hyper-V 虚拟机实时迁移失败：vSwitch 配置漂移</title>
            <link>https://blog.5772447.xyz/posts/3ac611a9/</link>
            <pubDate>Mon, 28 Sep 2026 09:00:00 +0800</pubDate>
            <guid>https://blog.5772447.xyz/posts/3ac611a9/</guid>
            <description>&lt;h2 id=&#34;问题背景&#34;&gt;&lt;a href=&#34;#%e9%97%ae%e9%a2%98%e8%83%8c%e6%99%af&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;问题背景&#xD;&#xA;&lt;/h2&gt;&lt;p&gt;分公司虚拟化平台是一套两节点 Hyper-V Server 2022 群集，承载 26 台业务虚拟机，日常靠实时迁移（Live Migration）做宿主机维护窗口的滚动重启。9 月以来每次滚动维护，运维都会在迁移记录里看到一两个虚拟机迁移失败并自动回滚，手动重试一次基本能过，因此一直没有立案处理。&lt;/p&gt;&#xA;&lt;p&gt;9 月下旬情况变了：一次维护窗口内连续 5 台虚拟机迁移失败，重试也有两台过不去，其中一台是 ERP 数据库虚拟机，迁移卡在 87% 后回滚，回滚瞬间数据库短暂无响应约 20 秒——实时迁移的&amp;quot;透明维护&amp;quot;承诺被打破了，问题升级。&lt;/p&gt;&#xA;&lt;h2 id=&#34;故障现象&#34;&gt;&lt;a href=&#34;#%e6%95%85%e9%9a%9c%e7%8e%b0%e8%b1%a1&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;故障现象&#xD;&#xA;&lt;/h2&gt;&lt;p&gt;整理 9 月以来的迁移记录，故障呈现清晰的固定模式：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;失败的虚拟机分布在两个节点上，与虚拟机本身的业务类型、内存大小无明显关联。&lt;/li&gt;&#xA;&lt;li&gt;Hyper-V 事件日志（Microsoft-Windows-Hyper-V-VMMS）记录 Event ID 21024：实时迁移失败，原因字段为&amp;quot;目标主机上的网络配置与源主机不匹配&amp;quot;；部分记录伴随 Event ID 21073 回滚完成。&lt;/li&gt;&#xA;&lt;li&gt;迁移失败总发生在传输阶段后半段（80% 上下），回滚后源虚拟机继续运行，但卡顿十几到二十秒。&lt;/li&gt;&#xA;&lt;li&gt;两个节点的 Windows 更新级别一致，群集验证（cluster validation）的网络测试项全部通过——按官方判据，这套群集是&amp;quot;健康&amp;quot;的。&lt;/li&gt;&#xA;&lt;li&gt;失败概率与当天负载相关：白天业务高峰几乎必失败，凌晨维护窗口偶发失败。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;排查过程&#34;&gt;&lt;a href=&#34;#%e6%8e%92%e6%9f%a5%e8%bf%87%e7%a8%8b&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;排查过程&#xD;&#xA;&lt;/h2&gt;&lt;p&gt;先比对两台宿主机的网络配置。实时迁移走的是独立的迁移网络（10.90.2.0/24，专用网卡），两个节点该网卡的 IP、VLAN、MTU 完全一致，带宽足够，这是迁移校验报告没报错的原因——问题不在这张卡上。&lt;/p&gt;&#xA;&lt;p&gt;第二步逐项对比两节点的虚拟交换机。用 PowerShell 导出两侧的 VMSwitch 与 VMNetworkAdapter 完整属性做 diff，差异浮出水面：&lt;strong&gt;两节点外部交换机 &lt;code&gt;vSwitch-Prod&lt;/code&gt; 的 QoS 带宽权重不一致&lt;/strong&gt;——节点 A 上 &lt;code&gt;Set-VMSwitch -DefaultFlowMinimumWeight&lt;/code&gt; 的合计为 80，节点 B 上是 40。进一步查变更记录，8 月底一次固件升级前的&amp;quot;预防性网络重置&amp;quot;巡检脚本，在节点 A 上执行过 &lt;code&gt;New-VMSwitch&lt;/code&gt; 重建，重建脚本里带了当时的 QoS 策略参数，而节点 B 没有跑这次重建，它的交换机还是 7 月的旧参数。此后两台宿主机的 vSwitch 就在事实上漂移了。&lt;/p&gt;&#xA;&lt;p&gt;第三步解释失败机理。实时迁移建立阶段，源节点会把虚拟机网卡的 SR-IOV 与带宽能力快照发给目标节点做兼容校验；QoS 权重不同的两个交换机，对外通告的可用带宽池不一致，目标侧校验&amp;quot;该虚拟机申请的最小带宽在目标交换机上得不到保证&amp;quot;即拒绝迁移。这也解释了负载相关性：高峰期虚拟机的实际流量逼近其 QoS 保证值，校验更容易失败；凌晨流量低，同一校验余量变大，偶尔能过。&lt;/p&gt;&#xA;&lt;p&gt;第四步解释 cluster validation 为何全绿：群集验证测试的是节点间网络连通性、带宽与延迟，不比对 vSwitch 的策略层属性——按官方判据健康、实际不可迁移的&amp;quot;半盲区&amp;quot;正是这么产生的。&lt;/p&gt;&#xA;&lt;p&gt;最后排除其它嫌疑：迁移认证协议（CredSSP/Kerberos）两侧一致；SMB Bandwidth Limit 未配置；CSV 流量与迁移流量已按最佳实践分网卡，无争抢。&lt;/p&gt;&#xA;&lt;h2 id=&#34;解决方案&#34;&gt;&lt;a href=&#34;#%e8%a7%a3%e5%86%b3%e6%96%b9%e6%a1%88&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;解决方案&#xD;&#xA;&lt;/h2&gt;&lt;ol&gt;&#xA;&lt;li&gt;&lt;strong&gt;配置收敛&lt;/strong&gt;：以节点 A 的 vSwitch 参数为准，在节点 B 上补齐相同的 QoS 带宽权重（先导出 &lt;code&gt;Export-VMSwitch&lt;/code&gt; 基线，逐项 &lt;code&gt;Set-VMSwitch&lt;/code&gt; 应用，不重建交换机以免中断业务网络）；随后挑凌晨窗口迁移一台测试虚拟机，一次成功。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;漂移防线&lt;/strong&gt;：把两节点 vSwitch/网卡属性基线导出存入运维知识库，巡检脚本每月做一次&amp;quot;双节点配置 diff&amp;quot;，发现不一致即告警；任何节点上的 &lt;code&gt;New-VMSwitch&lt;/code&gt; 类重建操作，强制要求&amp;quot;跑完必须在另一节点执行同样脚本或显式确认无需同步&amp;quot;。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;迁移窗口纪律&lt;/strong&gt;：群集验证通过不等于可迁移，滚动维护前先用 1 台非关键虚拟机做迁移冒烟，确认通过再滚动全量。&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2 id=&#34;根因分析&#34;&gt;&lt;a href=&#34;#%e6%a0%b9%e5%9b%a0%e5%88%86%e6%9e%90&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;根因分析&#xD;&#xA;&lt;/h2&gt;&lt;p&gt;直接根因是&lt;strong&gt;巡检脚本只在单侧节点重建了 vSwitch 并带入新的 QoS 策略，两节点交换机配置在策略层漂移，实时迁移的兼容校验在目标侧被拒&lt;/strong&gt;。深层根因有两个：其一，巡检脚本按&amp;quot;单机思维&amp;quot;编写，没有把&amp;quot;两节点对称执行&amp;quot;作为约束；其二，群集验证测试的盲区让常规健康检查给了虚假的安全感，配置漂移潜伏了一个月才在业务高峰暴露。&lt;/p&gt;&#xA;&lt;h2 id=&#34;预防措施&#34;&gt;&lt;a href=&#34;#%e9%a2%84%e9%98%b2%e6%8e%aa%e6%96%bd&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;预防措施&#xD;&#xA;&lt;/h2&gt;&lt;ul&gt;&#xA;&lt;li&gt;两节点群集的一切网络层变更（vSwitch、QoS、NIC 高级属性）必须以&amp;quot;成对脚本&amp;quot;交付，脚本内自动检测并同步对端；&lt;/li&gt;&#xA;&lt;li&gt;每月巡检增加 vSwitch 基线 diff 项，输出到运维报表；&lt;/li&gt;&#xA;&lt;li&gt;实时迁移失败 Event 21024 按周统计，非零即立案，不再允许&amp;quot;重试能过就放过&amp;quot;；&lt;/li&gt;&#xA;&lt;li&gt;固件升级、系统变更类巡检上线前，先在测试群集验证脚本副作用。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;总结&#34;&gt;&lt;a href=&#34;#%e6%80%bb%e7%bb%93&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;总结&#xD;&#xA;&lt;/h2&gt;&lt;p&gt;这次的故障链没有一帧是&amp;quot;坏&amp;quot;的：每次单点操作都合理，每项健康检查都通过，但单侧变更加上对称性无人校验，就让两台本该镜像的宿主机悄悄分道扬镳。双节点群集的运维纪律核心只有一句话：&lt;strong&gt;凡是一侧能做的变更，另一侧要么同步做了，要么显式记录为什么不做&lt;/strong&gt;——&amp;ldquo;没碰到&amp;quot;永远不该是配置不一致的理由。&lt;/p&gt;&#xA;&lt;h2 id=&#34;延伸阅读&#34;&gt;&lt;a href=&#34;#%e5%bb%b6%e4%bc%b8%e9%98%85%e8%af%bb&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;延伸阅读&#xD;&#xA;&lt;/h2&gt;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://blog.5772447.xyz/posts/3d6d8adf/&#34; &gt;Hyper-V VHDX 异常膨胀：40GB 差异磁盘残留清理&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://blog.5772447.xyz/posts/636f1d7a/&#34; &gt;VMware ESXi 紫屏宕机：排查与恢复实录&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</description>
        </item></channel>
</rss>
