可通过PowerShell脚本一键检查Windows故障转移群集仲裁状态,核心调用Get-ClusterQuorum和Get-ClusterNode等cmdlet,结合投票数与见证状态判断仲裁健康性。
可以通过 powershell 脚本一键检查 windows 故障转移群集(failover cluster)的仲裁状态,核心是调用 get-clusterquorum 和 get-clusternode 等内置 cmdlet,结合逻辑判断输出清晰结果。
获取当前仲裁配置与投票状态
运行以下命令可直接查看仲裁模式、仲裁见证类型、以及各节点当前是否具有投票权:
Get-ClusterQuorum | Select-Object QuorumType, WitnessResource, WitnessDirectory Get-ClusterNode | Select-Object Name, State, NodeWeight, Votes
注意:NodeWeight 为 0 表示该节点被手动移除了投票权(如维护中),Votes 列显示其是否实际参与当前仲裁计算。若所有在线节点 Votes 总和 ≤ 0,或见证不可用且多数节点离线,仲裁可能已丢失。
编写一键检查脚本(含健康判断)
保存为 Check-ClusterQuorum.ps1,以管理员身份运行:
# 检查群集是否存在且本地为群集成员
if (-not (Get-Command Get-Cluster -ErrorAction SilentlyContinue)) {
Write-Error "未安装故障转移群集功能,请先安装 RSAT-Clustering 工具"
exit 1
}
$cluster = Get-Cluster -ErrorAction SilentlyContinue
if (-not $cluster) {
Write-Error "未检测到本地群集或无访问权限"
exit 1
}
<h1>获取仲裁信息</h1><p>$quorum = Get-ClusterQuorum
$nodes = Get-ClusterNode | Where-Object { $_.State -eq "Up" }
$liveVotes = ($nodes | Measure-Object -Property Votes -Sum).Sum
$witnessOnline = $false
if ($quorum.WitnessResource) {
$witness = Get-ClusterResource $quorum.WitnessResource -ErrorAction SilentlyContinue
$witnessOnline = ($witness -and $witness.State -eq "Online")
}</p><h1>输出摘要</h1><p>Write-Host "`n=== 群集仲裁状态检查 ===" -ForegroundColor Green
Write-Host "群集名称: $($cluster.Name)"
Write-Host "仲裁模式: $($quorum.QuorumType)"
Write-Host "见证资源: $($quorum.WitnessResource) [$(if($witnessOnline){"在线"}else{"离线"})]"
Write-Host "在线节点数: $($nodes.Count)"
Write-Host "当前有效投票总数: $liveVotes"</p><h1>关键判断:是否满足多数投票(Majority)</h1><p>$quorumNeeded = [Math]::Floor($nodes.Count / 2) + 1
if ($quorum.QuorumType -eq "CloudWitness" -or $quorum.QuorumType -eq "FileShareWitness") {
$quorumNeeded = [Math]::Floor(($nodes.Count + 1) / 2) # 见证算作一票
}
if ($liveVotes -ge $quorumNeeded -and ($quorum.QuorumType -notin "NoWitness","LegacyDiskOnly" -or $witnessOnline)) {
Write-Host "✅ 仲裁健康:满足多数原则,群集可维持正常故障转移" -ForegroundColor Green
} else {
Write-Host "❌ 仲裁风险:当前投票不足或见证不可用,存在脑裂或服务中断风险!" -ForegroundColor Red
}集成到日常巡检或监控平台
- 将脚本加入 Windows 计划任务,每日自动运行并邮件发送结果(可用
Send-MailMessage或调用 SMTP 服务) - 在 Zabbix、Prometheus(配合 Windows Exporter + 自定义指标)中调用该脚本输出 JSON 格式结果,实现可视化告警
- 对多群集环境,可扩展脚本支持传入
-Cluster参数,循环检查多个群集
常见问题快速定位
- “Get-ClusterQuorum : 找不到群集” → 确认执行账户有群集读取权限,且在群集节点上运行(非域控或普通成员机)
- 见证资源显示离线但实际可用 → 检查见证路径网络连通性(如文件共享 SMB 访问、Azure 存储连接)、凭据有效性
-
NodeWeight=0 但需要临时启用投票 → 使用
(Get-ClusterNode "NodeName").NodeWeight = 1; Invoke-Command { Update-ClusterNetwork同步生效


















