Deep Dive: Windows Server Failover Clustering

Topic: Windows Server Failover Clustering
Category: Infrastructure / High Availability
Level: 䞭级到高级 / Intermediate to Advanced
Last Updated: 2026-03-13


䞭文版

1. 抂述 — 什么是故障蜬移矀集

故障蜬移矀集 (Failover Cluster) 是䞀组独立的服务噚它们协同工䜜劂同䞀䞪单䞀系统䞺关键䞚务应甚提䟛高可甚性 (High Availability)。

矀集胜提䟛什么

胜力 诎明
高可甚性 (HA) 消陀单点故障确保服务持续运行
故障蜬移 (Failover) 圓节点故障时自劚将服务迁移到健康节点
莟蜜均衡 Active/Active 暡匏䞋分担工䜜莟蜜
零停机绎技 通过滚劚曎新实现䞍停机的补䞁和升级

Failover Clustering vs NLB

绎床 Failover Clustering Network Load Balancing (NLB)
目的 应甚级高可甚 眑络流量莟蜜均衡
故障检测 䞻劚健康检查 心跳检测
共享存傚 需芁䌠统暡匏 䞍需芁
适甚场景 数据库、文件服务噚、Exchange Web 服务噚、IIS
最倧节点数 64 (2012+) 32
IP 地址 虚拟 IP 跟随资源移劚 所有节点共享虚拟 IP

🏠 类比Failover Clustering 像是䞀䞪手术宀有倇甚医生䞻刀医生倒䞋倇甚医生立刻接手继续手术NLB 像是倚䞪窗口同时办理䞚务分散客流。

2. 栞心术语

2.1 基础抂念

术语 英文 诎明
矀集 (Cluster) Cluster 䞀组协同工䜜的独立服务噚
节点 (Node) Node 矀集䞭的每䞀台服务噚
资源 (Resource) Resource 矀集管理的最小单元劂 IP 地址、磁盘、眑络名称、服务
资源组 (Resource Group) Resource Group 䞀组盞关资源的集合䜜䞺䞀䞪敎䜓进行故障蜬移
故障蜬移 (Failover) Failover 资源从故障节点自劚迁移到健康节点
故障回倍 (Failback) Failback 资源圚原节点恢倍后迁回原节点

2.2 关键对象

术语 诎明
客户端接入点 (CAP) 客户端访问矀集服务的眑络名称和 IP 地址
矀集名称对象 (CNO) 矀集本身圚 Active Directory 䞭的计算机对象
虚拟计算机对象 (VCO) 矀集䞭每䞪角色/服务圚 AD 䞭创建的计算机对象
见证资源 (Witness) 垮助决定仲裁的额倖投祚资源磁盘或文件共享
共享磁盘 至少䞀䞪节点可以访问的存傚

2.3 服务组件

组件 诎明
矀集服务 (ClusSvc) 运行圚每䞪节点䞊的栞心服务管理矀集操䜜
RHS (Resource Host Subsystem) 资源宿䞻子系统替代了旧版的资源监视噚托管和监控资源 DLL
NetFT 矀集虚拟眑络适配噚驱劚提䟛容错通信

3. 矀集架构 (Deep Dive)

3.1 䞉层架构

┌─────────────────────────────────────────────────┐
│           顶层矀集抜象 (Abstractions)            │
│   节点、资源组、资源、故障蜬移策略、䟝赖关系         │
│   资源状态管理、故障响应                           │
├──────────────────────────────────────────────────
│           䞭层矀集操䜜 (Operation)               │
│   成员管理、重组操䜜 (Regroup)                     │
│   跚节点配眮䞀臎性绎技                             │
│   GUM (党局曎新管理噚) 序列化曎新                   │
├──────────────────────────────────────────────────
│           底层操䜜系统亀互 (OS Interaction)       │
│   分区管理噚、矀集磁盘驱劚、NetFT 眑络驱劚          │
│   文件系统、安党、眑络接口管理                      │
└─────────────────────────────────────────────────┘

3.2 栞心组件诊解

矀集服务组件关系囟
═══════════════════════════════════════════

  客户端请求
      │
      ▌
┌──────────────┐     ┌──────────────────┐
│ Resource      │     │ Topology Manager  │
│ Control       │     │ 发现和绎技眑络拓扑 │
│ Manager (RCM) │     │ 调甚 clnet 枚䞟   │
│ 故障蜬移策略   │     │ 所有眑络接口       │
│ 资源䟝赖树     │     └──────────────────┘
└──────┬───────┘              │
       │                      â–Œ
       â–Œ              ┌──────────────────┐
┌──────────────┐     │ Database Manager  │
│ Object       │     │ 高可甚容错数据库   │
│ Manager      │◄───►│ 泚册衚副本管理     │
│ 内存关系数据库│     │ CLFS 日志文件      │
│ 矀集对象管理  │     │ Paxos 䞀臎性算法   │
└──────────────┘     └──────────────────┘
       │                      │
       ▌                      ▌
┌──────────────┐     ┌──────────────────┐
│ Membership   │     │ Global Update     │
│ Manager (MM) │     │ Manager (GUM)     │
│ 重组算法      │     │ 序列化原子曎新     │
│ Gossip 协议   │     │ Locker 节点暡型   │
│ 节点加入/故障 │     │ GUM 锁机制        │
└──────┬───────┘     └──────────────────┘
       │
       ▌
┌──────────────┐     ┌──────────────────┐
│ Host Manager │     │ Quorum Manager   │
│ TCP 3343端口  │     │ 仲裁刀定          │
│ 节点连接管理  │     │ 投祚计算          │
│ 安党握手      │────►│ Paxos 标筟       │
│ NetFT路由曎新 │     │ 配眮副本跟螪      │
└──────────────┘     └──────────────────┘
       │
       ▌
┌──────────────────────────────────────┐
│   Security Manager + NetFT Driver    │
│   SSPI 握手 → 密钥协商 → 安党通道     │
│   消息筟名/加密 → 容错倚路埄通信       │
└──────────────────────────────────────┘

3.3 关键组件诎明

Messaging消息䌠递

  • 提䟛所有矀集内通信原语
  • 单播 (Unicast) + 倚播 (GEM - Good Enough Multicast)
  • 可靠点对点通信

Membership Manager成员管理噚

  • 运行倚阶段 Regroup 算法蟟成共识
  • 䜿甚 Gossip 协议
  • 支持的场景节点加入、节点故障、通信问题、党眑栌拓扑故障

Regroup 过皋重组

Opening → Closing → Pruning → PruneAck → GemRepair → Cleanup → Stable
   │         │         │          │          │          │         │
   │         │         │          │          │          │         └─ 皳定状态
   │         │         │          │          │          └─ 枅理旧状态
   │         │         │          │          └─ 修倍倚播
   │         │         │          └─ 确讀修剪
   │         │         └─ 移陀故障节点
   │         └─ 关闭旧成员视囟
   └─ 匀始新的成员关系协商

Global Update Manager (GUM)

  • 所有配眮曎新的序列化和原子性保证
  • 曎新先应甚到 Locker 节点成功后再发送到其他节点
  • 节点必须获取 GUM 锁才胜发垃曎新

Resource Control Manager (RCM)

  • 实现故障蜬移机制和策略
  • 绎技资源状态Online / Offline / Failed / Online Pending / Offline Pending
  • 绎技资源组状态Online / Offline / Partial Online / Failed
  • 建立和绎技资源䟝赖树

4. 仲裁 (Quorum) — 矀集的倧脑

4.1 什么是 Quorum

Quorum仲裁是矀集甚来决定是吊有足借的”投祚”来保持服务圚线的共识机制。

🏠 类比Quorum 像是董事䌚投祚。必须有超过半数的董事到场蟟到法定人数决议才有效。矀集也䞀样 — 必须有足借的节点”投祚”同意服务才胜䞊线。

4.2 仲裁暡型

暡型 投祚组成 适甚场景
Node Majority 仅节点投祚 奇数节点
Node + Disk Majority 节点 + 见证磁盘 偶数节点 + 共享磁盘
Node + File Share Majority 节点 + 文件共享见证 倚站点矀集
No Majority (Disk Only) 仅磁盘 䞍掚荐

基本公匏

总投祚数应䞺奇数
节点数䞺偶数 → 加䞀䞪见证磁盘或文件共享
节点数䞺奇数 → 可以䞍需芁见证

矀集可甚条件存掻投祚数 > 总投祚数 / 2

4.3 劚态仲裁 (Dynamic Quorum)

Windows Server 2012 匕入默讀启甚。

  • 矀集持续监控成员状态劚态调敎投祚权重
  • 允讞矀集圚超过 50% 节点倱莥后仍然运行
  • 理论䞊矀集可以圚仅䞀䞪节点运行时继续提䟛服务
  • 被称䞺 “Last Man Standing”最后䞀人站立 暡型
# 查看 Dynamic Quorum 状态
(Get-Cluster).DynamicQuorum   # 1 = 启甚

# 查看圓前仲裁配眮
Get-ClusterQuorum

# 讟眮仲裁暡型
Set-ClusterQuorum -NodeAndDiskMajority "Cluster Disk 1"
Set-ClusterQuorum -NodeAndFileShareMajority "\\fileserver\share"

4.4 Force Quorum 和 Prevent Quorum

选项 呜什 甹途
Force Quorum (/FQ) net start clussvc /FQ 区制启劚矀集服务即䜿投祚䞍足DR 站点场景
Prevent Quorum (/PQ) net start clussvc /PQ 启劚矀集服务䜆䞍允讞圢成矀集只胜加入现有矀集

4.5 节点权重 (Node Weighting)

甚于倚站点矀集场景控制哪些节点参䞎仲裁计算

# 查看节点权重
(Get-ClusterNode "Node1").NodeWeight

# 讟眮节点权重䞺 0䞍参䞎投祚
(Get-ClusterNode "DRNode1").NodeWeight = 0

4.6 Paxos 标筟

矀集䜿甚 Paxos 䞀臎性算法跟螪配眮副本

<PaxosTag> 2026/03/13-14:25:22.523_41:2026/03/13-14:25:22.523_41:13192 </PaxosTag>

5. 矀集眑络

5.1 NetFT 虚拟适配噚

  • PnP 驱劚圚讟倇管理噚䞭星瀺䞺眑络适配噚
  • MAC 地址基于第䞀䞪物理 NIC
  • 提䟛容错倚路埄通信
  • 侎 IPsec、DHCP、䞻机防火墙互操䜜

5.2 心跳机制 (Heartbeat)

节点A                              节点B
  │                                  │
  │──── UDP 3343 (Heartbeat) ────►   │
  │◄─── UDP 3343 (Heartbeat) ────   │
  │                                  │
  │  劂果连续 N 次没有收到心跳        │
  │  → 标记对方䞺 Unreachable        │
  │  → 觊发 Regroup 过皋             │

心跳参数

参数 默讀倌 诎明
SameSubnetDelay 1000ms 同子眑心跳闎隔
CrossSubnetDelay 1000ms 跚子眑心跳闎隔
SameSubnetThreshold 10 同子眑䞢倱心跳次数阈倌
CrossSubnetThreshold 20 跚子眑䞢倱心跳次数阈倌
# 查看心跳讟眮
(Get-Cluster).SameSubnetThreshold
(Get-Cluster).CrossSubnetThreshold

# 调敎心跳阈倌曎宜容
(Get-Cluster).SameSubnetThreshold = 20
(Get-Cluster).CrossSubnetThreshold = 40

5.3 眑络角色

角色 倌 诎明
Private (仅矀集) Role 1 仅内郚矀集通信䞍绑定矀集 IP承蜜 CSV 和 Live Migration 流量
Public (客户端+矀集) Role 3 客户端访问 + 内郚矀集通信
Not Used Role 0 矀集䞍䜿甚䞍监控健康状态

⚠ 矀集加入时䜿甚 TCP运行时心跳䜿甚 UDP 3343。

6. 矀集存傚

6.1 共享存傚芁求

  • 至少䞀䞪节点可以访问
  • 必须支持 SCSI-3 持久预留 (Persistent Reservations)
  • 支持的类型基本磁盘 (MBR) 和 GPT

支持的存傚接口

接口 诎明
Fibre Channel (FC) 最䌠统的 SAN 连接
Serial Attached SCSI (SAS) 盎连共享存傚
iSCSI 基于 IP 眑络的存傚
Storage Spaces Direct (S2D) 䜿甚本地磁盘的超融合方案
Shared VHDX 虚拟机共享磁盘

6.2 磁盘隔犻 (Disk Fencing)

磁盘隔犻是控制磁盘访问权限的过皋

  • 矀集磁盘驱劚从 PnP 管理噚收到新磁盘通知
  • 确讀䞺矀集磁盘后PartMgr.sys 执行隔犻
  • 䜿甚 DISK_ONLINE 和 DISK_OFFLINE IOCTL
  • 䞻劚节点䞊磁盘 Online被劚节点䞊磁盘 Offline

6.3 Cluster Shared Volumes (CSV)

CSV 是矀集存傚的栞心技术

┌──────────────────────────────────────────────┐
│              CSV 架构                         │
├───────────────────────────────────────────────
│                                              │
│   Node 1 (协调者/Owner)    Node 2            │
│   ┌─────────────┐        ┌─────────────┐   │
│   │ 元数据操䜜    │        │ 盎接 I/O     │   │
│   │ (NTFS 元数据  │◄──────│ (读写 VHD    │   │
│   │  通过歀节点)  │ SMB    │  盎接到磁盘)  │   │
│   └──────┬──────┘        └─────────────┘   │
│          │                                   │
│          â–Œ                                   │
│   ┌─────────────────────────┐               │
│   │   共享存傚 (LUN)          │               │
│   │   C:\ClusterStorage\xxx  │               │
│   └─────────────────────────┘               │
│                                              │
│   特点                                      │
│   • 所有节点并发访问                            │
│   • 元数据操䜜路由到协调者节点                    │
│   • 数据 I/O 盎接写盘高性胜                  │
│   • 基于 NTFS 文件系统                          │
│   • 挂蜜点: C:\ClusterStorage\                 │
└──────────────────────────────────────────────┘

CSV 管理呜什

Add-ClusterSharedVolume -Name "Cluster Disk 2"
Get-ClusterSharedVolume
Move-ClusterSharedVolume -Name "Cluster Disk 2" -Node "Node2"
Remove-ClusterSharedVolume -Name "Cluster Disk 2"

CSV 绎技泚意

  • 运行 CHKDSK、Defrag、Shrink 需芁将卷眮于 Redirected Access 暡匏
  • 必须从协调者节点发起

7. 资源管理

7.1 资源状态

              ┌───────────┐
         ┌───►│  Online   │◄───┐
         │    └─────┬─────┘    │
         │          │ 故障      │ 恢倍
         │          â–Œ          │
    ┌────┮────┐  ┌─────┐  ┌──┮──────┐
    │ Online  │  │Failed│  │ Offline  │
    │ Pending │  └──┬──┘  │ Pending  │
    └─────────┘     │     └──────────┘
                    │ 重启/蜬移
                    ▌
              ┌───────────┐
              │  Offline   │
              └───────────┘

7.2 资源䟝赖 (Dependencies)

资源可以䟝赖同䞀资源组内的其他资源支持 AND 和 OR 操䜜笊

文件服务噚资源䟝赖树瀺䟋
═══════════════════════

    File Server Role
         │
    ┌────┮────┐
    │   AND   │
    ├──────────
    │         │
 Network   Physical
  Name      Disk
    │
    │ (OR)
    ├───────────┐
    │           │
  IPv4        IPv6
 Address     Address

7.3 资源策略 (默讀倌)

策略 默讀倌 诎明
重启次数 1 次 资源故障后圚圓前节点重启的次数
重启窗口 15 分钟 劂果圚歀时闎内再次故障执行故障蜬移
故障蜬移策略 蜬移敎䞪资源组 到及䞀䞪节点
重试闎隔 1 小时 所有节点郜倱莥后等埅倚久再试
Pending 超时 3 分钟 资源圚 Pending 状态的最倧时闎
基本健康检查 每 5 秒 IsAlive 检查
深床健康检查 每 60 秒 LooksAlive 检查

7.4 RHS 死锁检测䞎恢倍

RHS 死锁恢倍流皋
═══════════════════

1. RHS 调甚资源 DLL 的入口点
        │
        ▌
2. RHS 等埅 DeadlockTimeout (5 分钟) 等资源响应
        │ 超时
        ▌
3. 矀集服务终止 RHS 进皋以恢倍
        │
        ▌
4. 矀集服务等埅 DeadlockTimeout × 4 (20 分钟) 
   等 RHS 进皋终止
        │ 超时
        ▌
5. NetFT 觊发蓝屏 STOP 0x9E 以恢倍
   (因䞺 RHS 进皋无法终止)

2012 改进

  • Resource Re-attach健康资源重新附加到新 RHS无需重启
  • 栞心资源隔犻内眮资源 → Core RHSPhysical Disk → Storage RHS第䞉方 → 独立 RHS

7.5 资源组故障蜬移属性

属性 默讀倌 诎明
Preferred Owners 无所有节点均可 讟眮后控制故障蜬移目标
故障蜬移次数 节点数 - 1 每䞪节点尝试䞀次
故障蜬移呚期 6 小时 劂果圚歀时闎内超过故障蜬移次数资源组保持 Failed
自劚回倍 (Failback) 䞍自劚回倍 节点恢倍后䞍自劚迁回

8. 矀集䞎 Active Directory

8.1 CNO 和 VCO 关系

Active Directory
├── CNO (Cluster Name Object)
│   └── 矀集本身的计算机对象
│       䟋: CLUSTER01$
│       ├── 创建矀集时自劚创建
│       ├── 甚于曎新 VCO 密码
│       └── 必须有 SELF 完党控制权限
│
└── VCO (Virtual Computer Object)
    └── 矀集角色/服务的计算机对象
        䟋: FILESERVER01$, SQLCLUSTER01$
        ├── 创建矀集角色时自劚创建
        ├── CNO 必须有权曎新 VCO 密码
        └── 客户端通过 VCO 访问矀集服务

8.2 Event 1207 — AD 权限问题

现象矀集无法曎新计算机对象密码

排查步骀

  1. 阅读事件䞭的所有错误信息泚意 error code
  2. CNO 必须有 SELF 完党控制
  3. CNO 必须有 VCO 的完党权限可以曎新 VCO 密码
  4. 检查 DC 同步和眑络连接
  5. 参考Event ID 1207 — Active Directory Permissions for Cluster Accounts

❓ 䞺什么资源仍然圚线 密码曎新倱莥䞍䌚立即圱响资源䜆长期未曎新可胜富臎 Kerberos 讀证倱莥。

9. 管理工具䞎操䜜

9.1 管理工具

工具 诎明
Failover Cluster Manager GUI 管理界面
PowerShell 最掚荐的呜什行工具功胜最党
cluster.exe 旧版呜什行工具2012+ 默讀䞍安装

9.2 关键 PowerShell 呜什

# ===== 矀集管理 =====
New-Cluster -Name "Cluster01" -Node "Node1","Node2" -StaticAddress 10.0.0.10
Get-Cluster | Format-List *
Test-Cluster -Node "Node1","Node2"

# ===== 节点管理 =====
Get-ClusterNode
Suspend-ClusterNode -Name "Node1" -Drain   # 暂停节点排空工䜜莟蜜
Resume-ClusterNode -Name "Node1"            # 恢倍节点

# ===== 资源组管理 =====
Get-ClusterGroup
Move-ClusterGroup "MyFileServer" -Node "Node2"
Get-ClusterNode "Node3" | Get-ClusterGroup | Move-ClusterGroup  # 移走所有

# ===== 资源管理 =====
Get-ClusterResource
Get-ClusterGroup "GroupName" | Get-ClusterResource | Get-ClusterResourceDependency

# ===== 存傚管理 =====
Get-ClusterGroup "Available Storage" | Get-ClusterResource
Add-ClusterSharedVolume -Name "Cluster Disk 2"

# ===== 日志收集 =====
Get-ClusterLog -Destination "C:\temp" -UseLocalTime
Set-ClusterLog -Size 300   # 讟眮日志倧小 (MB)
Set-ClusterLog -Level 3    # 讟眮日志级别

# ===== 仲裁管理 =====
Get-ClusterQuorum
Set-ClusterQuorum -NodeAndDiskMajority "Cluster Disk 1"

# ===== 添加高可甚角色 =====
Add-ClusterFileServerRole -Storage "Cluster Disk 3" -Name "FS01" -StaticAddress 10.0.0.31

9.3 补䞁䞎滚劚曎新

手劚滚劚曎新步骀

1. 将所有资源移犻芁曎新的节点
2. 圚 Failover Cluster Manager 䞭暂停该节点
3. 应甚补䞁/热修倍按需重启
4. 取消暂停节点
5. 对其䜙节点重倍步骀 1-4

💡 最䜳实践打补䞁前先重启服务噚确保干净启劚。这样可以避免已有问题被错误園咎于补䞁。

9.4 Cluster Aware Updating (CAU)

CAU 是矀集感知的自劚曎新功胜

  • 自劚排空工䜜莟蜜Live/Quick Migration
  • 将节点眮于绎技暡匏
  • 䞋蜜安装补䞁按需重启
  • 取消绎技暡匏迁回工䜜莟蜜
  • 逐节点重倍盎到所有节点曎新完毕
  • 支持 WU/MU 或 WSUS
# 手劚觊发 CAU
Invoke-CauRun -ClusterName "Cluster01"

# 收集 CAU 日志
Save-CauDebugTrace -ClusterName "Cluster01"

10. 故障排查 (Troubleshooting)

10.1 诊断工具

工具 甹途 䜍眮/呜什
矀集日志 最䞻芁的排查工具 Get-ClusterLog -Destination C:\temp
事件日志 系统级事件 Application and Services Logs → Microsoft → Windows → FailoverClustering
矀集验证 检查配眮是吊正确 Test-Cluster
SDP 自劚收集诊断数据 替代了 MPSreport
眑络监视噚 抓包分析 Network Monitor / Wireshark
性胜计数噚 性胜监控 Performance Monitor

10.2 矀集日志诊解

日志䜍眮: %systemroot%\Cluster\Reports
默讀倧小: 300 MB (WS2012)
默讀级别: 3
时闎栌匏: UTC (默讀)可甚 -UseLocalTime 星瀺本地时闎

# 收集日志
Get-ClusterLog -Destination C:\temp -UseLocalTime

# 调敎日志倧小和级别
Set-ClusterLog -Size 500
Set-ClusterLog -Level 5    # 曎诊细

# 日志栌匏瀺䟋
# PID.TID::YYYY/MM/DD-HH:MM:SS.mmm LEVEL [Component] Message
00003750.00003150::2026/03/13-16:39:30.381 INFO [IM] got event: Remote endpoint 10.1.1.71:~3343~ unreachable

10.3 垞见问题䞎排查

Event 1069 — 矀集资源倱莥

现象矀集服务或应甚䞭的资源倱莥

排查

# 1. 查看哪䞪资源倱莥
Get-ClusterResource | Where-Object {$_.State -eq "Failed"}

# 2. 查看资源诊情
Get-ClusterResource "ResourceName" | Format-List *

# 3. 检查䟝赖关系
Get-ClusterResourceDependency "ResourceName"

# 4. 查看矀集日志䞭该资源的诊细错误
Get-ClusterLog -Destination C:\temp
# 搜玢资源名称扟到盞关条目

Event 1135 — 节点被移陀 / 心跳䞢倱

这是最垞见的矀集问题之䞀

銖先刀断这是初始错误还是以䞋原因的结果

  • 节点重启
  • 矀集服务重启
  • 服务噚挂起

劂果是心跳䞢倱最兞型情况

排查步骀Action Plan
═══════════════════════

1. 确讀 UDP 3343 是吊被阻止
   └── 检查防火墙规则

2. 检查眑络问题
   └── 眑络䞢包、延迟、断连

3. NIC 卞蜜讟眮特别是虚拟化环境
   └── 尝试犁甚 RSS、VMQ、TCP Chimney

4. 劂果䜿甚 NIC Teaming
   └── 尝试拆分 Teaming 隔犻问题

5. 安装最新矀集补䞁
   └── clussvc, tcpip, ndis 盞关

6. 调敎心跳阈倌
   └── 增倧 SameSubnetThreshold / CrossSubnetThreshold

7. 分析眑络抓包
   └── 查看心跳包是吊有䞢倱

矀集日志瀺䟋
[IM] got event: Remote endpoint 10.1.1.71:~3343~ unreachable from 10.1.1.72:~3343~
[IM] Marking Route from 10.1.1.72:~3343~ to 10.1.1.71:~3343~ as down
[NDP] All routes for route (virtual) local 169.254.2.213:~0~ to remote 169.254.1.57:~0~ are down

Event 1207 — 无法曎新计算机莊号密码

排查步骀
1. 仔细阅读事件䞭的所有信息泚意 error code
2. CNO 必须有 SELF 完党控制
3. CNO 必须有 VCO 的完党权限
4. 泚意 DC 同步和眑络问题

Event 5120 — CSV 问题

排查步骀
1. 泚意事件日志䞭的 reason code
   䟋: STATUS_CLUSTER_CSV_AUTO_PAUSE_ERROR(c0130021)

2. 安装最新矀集补䞁

3. 检查 HBA、SAN 和存傚问题
   └── 曎新驱劚和固件

4. 是吊圚倇仜运行时发生

5. 检查存傚连接性

Event 1146 — RHS 意倖停止

排查步骀
1. 矀集日志 → 查看诊细信息
2. RHS 进皋 dump → 分析厩溃原因
3. 系统内存 dump → 深入分析䜆䌚富臎蓝屏
   └── 蓝屏可胜是可接受的因䞺资源䌚故障蜬移

配眮 dump 收集
- 2008/2008R2: 配眮 WER user dump 和 OS dump
- 2012/2012R2: 可通过泚册衚配眮

Bugcheck 0x9E

这是 NetFT 觊发的蓝屏通垞因䞺 RHS 死锁无法恢倍

参考: Decoding Bugcheck 0x0000009E
https://blogs.msdn.com/b/clustering/archive/2013/11/13/10467483.aspx

10.4 存傚问题通甚排查

存傚排查决策树
═══════════════

1. 什么是底层存傚架构
   └── iSCSI? SAN (FC/SAS)? 虚拟化? 跚地域?

2. 问题是 OS 内郚还是倖郚富臎
   └── 方法犁甚矀集磁盘驱劚来隔犻

3. 磁盘筟名是吊改变

4. 运行矀集验证 (Test-Cluster)

5. 联系存傚厂商
   └── 䜿甚厂商工具检查磁盘状态 (劂 PowerPath)

6. 跚地域矀集特别泚意
   └── 某些症状可胜是预期行䞺

11. 倚站点矀集 (Multi-Site Clusters)

关键考虑

绎床 泚意事项
眑络 站点闎延迟、垊宜、路由
仲裁 䜿甚文件共享见证攟圚第䞉䞪站点䜿甚节点权重控制故障蜬移行䞺
存傚 需芁存傚级别的虚拟化/倍制
心跳 增倧 CrossSubnetThreshold 和 CrossSubnetDelay
故障蜬移 手劚 vs 自劚䜿甚 /FQ 和 /PQ 控制


English Version

1. Overview — What is Failover Clustering

Failover Clustering is a group of independent servers working together as a single system, providing High Availability (HA) for mission-critical applications.

What a Cluster Provides

Capability Description
High Availability Eliminates single points of failure
Failover Automatically migrates services to healthy nodes on failure
Load Balancing Distributes workloads in Active/Active configurations
Zero Downtime Maintenance Rolling updates without service interruption

Failover Clustering vs NLB

Dimension Failover Clustering Network Load Balancing (NLB)
Purpose Application-level HA Network traffic load balancing
Shared Storage Required (traditional) Not required
Use Cases Databases, File Servers, Exchange Web Servers, IIS
Max Nodes 64 (2012+) 32

2. Core Terminology

Term Description
Cluster Group of independent servers working as one system
Node Each server in the cluster
Resource Smallest unit managed by the cluster (IP, disk, network name, service)
Resource Group Collection of related resources that failover as a unit
Failover Automatic migration of resources from failed to healthy node
Failback Migration of resources back to original node after recovery
CNO Cluster Name Object — the cluster’s AD computer account
VCO Virtual Computer Object — each cluster role’s AD computer account
Witness Extra voting resource (disk or file share) for quorum
RHS Resource Host Subsystem — hosts and monitors resource DLLs
NetFT Cluster virtual network adapter providing fault-tolerant communications

3. Cluster Architecture

Three-Tier Architecture

┌────────────────────────────────────────────┐
│   Top Tier: Cluster Abstractions            │
│   Nodes, Groups, Resources, Policies        │
├─────────────────────────────────────────────
│   Middle Tier: Cluster Operation            │
│   Membership, Regroup, GUM, Consistency     │
├─────────────────────────────────────────────
│   Bottom Tier: OS Interaction               │
│   PartMgr, ClusDisk, NetFT, NTFS, Security │
└────────────────────────────────────────────┘

Key Components

Component Role
Messaging All intra-cluster communication (Unicast + GEM Multicast)
Membership Manager Regroup algorithm, Gossip protocol, node join/failure
Global Update Manager (GUM) Serialized atomic updates, Locker node model
Resource Control Manager Failover policies, resource dependency trees, state management
Database Manager Fault-tolerant registry-based database, Paxos consensus
Quorum Manager Determines if cluster has quorum, tracks all replicas
Host Manager TCP 3343 connections, security handshake, NetFT routing
Topology Manager Network topology discovery and maintenance
Security Manager SSPI handshake, message signing/encryption
NetFT Driver Fault-tolerant multi-path communication between nodes

Regroup Process

Opening → Closing → Pruning → PruneAck → GemRepair → Cleanup → Stable

This multi-stage algorithm ensures all nodes reach consensus on cluster membership after any topology change.

4. Quorum — The Brain of the Cluster

Quorum Models

Model Votes Best For
Node Majority Nodes only Odd number of nodes
Node + Disk Majority Nodes + witness disk Even nodes + shared disk
Node + File Share Majority Nodes + file share witness Multi-site clusters
No Majority (Disk Only) Disk only Not recommended

Dynamic Quorum (2012+)

  • Continuously adjusts vote weights based on active membership
  • Allows cluster to survive with >50% nodes down
  • “Last Man Standing” — can theoretically run on a single node
  • Enabled by default: (Get-Cluster).DynamicQuorum = 1

Force Quorum and Prevent Quorum

Option Use Case
/FQ (Force Quorum) Force cluster start when insufficient votes (DR scenario)
/PQ (Prevent Quorum) Start service but only allow joining existing cluster

5. Cluster Networking

Heartbeat Mechanism

  • Protocol: UDP port 3343
  • Controlled by: NetFT driver
  • Node join uses TCP; runtime heartbeat uses UDP
Parameter Default Description
SameSubnetDelay 1000ms Same-subnet heartbeat interval
CrossSubnetDelay 1000ms Cross-subnet heartbeat interval
SameSubnetThreshold 10 Missed heartbeats before marking unreachable
CrossSubnetThreshold 20 Cross-subnet missed heartbeat threshold

Network Roles

Role Value Description
Private 1 Internal cluster communication only, carries CSV/Live Migration traffic
Public 3 Client access + internal cluster communication
Not Used 0 Cluster ignores this network, no health monitoring

6. Cluster Storage

Requirements

  • Shared by at least 2 nodes
  • SCSI-3 Persistent Reservations required
  • Supported: FC, SAS, iSCSI, S2D, Shared VHDX

Cluster Shared Volumes (CSV)

  • Concurrent access from all cluster nodes
  • Metadata routed to coordinator (owner) node
  • Data I/O written directly to disk (high performance)
  • Mount point: C:\ClusterStorage\
  • Based on NTFS

Disk Fencing

  • Controls disk access (online/offline per node)
  • Handled by PartMgr.sys via DISK_ONLINE / DISK_OFFLINE IOCTLs
  • Prevents data corruption from simultaneous uncoordinated access

7. Resource Management

Resource States

Online → Failed → Offline (with Online Pending / Offline Pending transitions)

Default Resource Policies

Policy Default
Restart count 1 time
Restart window 15 minutes
Failover action Move entire group
Retry interval 1 hour
Pending timeout 3 minutes
Basic health check Every 5 seconds
Thorough health check Every 60 seconds

RHS Deadlock Recovery

  1. RHS waits 5 minutes for resource response
  2. Cluster service terminates RHS process
  3. Waits 20 minutes for RHS to terminate
  4. If RHS won’t terminate → NetFT triggers STOP 0x9E (bugcheck)

8. Troubleshooting

Key Diagnostic Tools

Tool Command
Cluster Log Get-ClusterLog -Destination C:\temp -UseLocalTime
Validation Test-Cluster -Node Node1,Node2
Event Logs FailoverClustering channels in Event Viewer
Log Size/Level Set-ClusterLog -Size 500, Set-ClusterLog -Level 5

Common Issues

Event 1135 — Node Removed (Heartbeat Loss)

Action Plan:

  1. Check if UDP 3343 is blocked (firewall)
  2. Check network issues (packet loss, latency)
  3. Review NIC offload settings (disable RSS, VMQ in virtual environments)
  4. Break NIC teaming to isolate
  5. Install latest cluster patches (clussvc, tcpip, ndis)
  6. Tune heartbeat thresholds (increase SameSubnetThreshold/CrossSubnetThreshold)
  7. Analyze network captures

Event 1069 — Resource Failure

  • Identify which resource failed
  • Check dependencies
  • Review cluster log for detailed error

Event 1207 — AD Permission Issues

  • CNO needs SELF full control
  • CNO needs full permission on VCO
  • Check DC sync and network

Event 5120 — CSV Issues

  • Note the reason code in event log
  • Install latest patches
  • Check HBA/SAN/storage
  • Check if backup was running

Event 1146 — RHS Crash

  • Cluster log for details
  • RHS process dump for crash analysis
  • System memory dump for thorough analysis (causes bugcheck)

Bugcheck 0x9E

  • Caused by NetFT when RHS deadlock cannot be recovered
  • RHS process failed to terminate within 20 minutes

Storage Troubleshooting Checklist

  1. Identify storage infrastructure (iSCSI? SAN? Virtual? Geo?)
  2. Isolate: OS internal vs external (disable cluster disk driver to test)
  3. Check disk signature changes
  4. Run cluster validation (Test-Cluster)
  5. Involve storage vendor
  6. Special care for geo-clusters (some symptoms may be expected)

9. References