跨子网故障转移群集需节点分属不同子网或可用区,配置宽松心跳参数(same/crosssubnetthreshold=40)、单nic部署、文件共享见证仲裁,并确保3343/135/445/5022等端口互通。
跨子网故障转移群集(failover cluster)在 azure vm 或异地机房等场景中很常见,核心目标是让集群节点分布在不同子网甚至不同可用区,同时保障高可用性和自动故障转移能力。它不依赖单一网络广播域,但需特别注意网络连通性、仲裁配置、心跳参数和端口开放规则。
网络与节点部署要点
节点必须部署在不同子网(如 10.1.1.0/24 和 10.1.10.0/24),推荐置于不同可用性区域或跨地域机房。每个节点使用单个 NIC,避免多网卡绑定带来的路由不确定性。关键要求包括:
- 所有节点之间能双向 ping 通(ICMPv4)
- TCP 端口 3343(集群服务)、135(RPC)、445(SMB)、5021(AG 端点)、1433(SQL)、以及动态端口范围 49152–65535 全部互通
- 若使用 SQL Server AlwaysOn AG,还需确保 5022(数据库镜像端点)在跨子网间放行
- 禁用 Windows 防火墙或按需配置入站/出站规则,不要简单“关闭防火墙”
Windows 故障转移群集配置调优
默认心跳参数对云环境过于敏感,易因短暂网络抖动触发误故障转移。应主动调整为更宽松的阈值:
- SameSubnetDelay:设为 1 秒(同子网探测间隔)
- SameSubnetThreshold:设为 40 次丢失(即允许连续丢 40 个心跳)
- CrossSubnetDelay:设为 1 秒(跨子网探测间隔)
- CrossSubnetThreshold:设为 40 次丢失
这些值适用于 Windows Server 2012 及以上版本,可通过 PowerShell 设置:
直播话术巡检系统(Windows版) — 实时语音转写、关键词检测、场景自动切换、告警推送、大屏可视化。支持 Windows VB-Cable 虚拟声卡音频采集,阿里云 ASR 实时识别。一键启动脚本,自动安装环境。
Get-Cluster | Set-ClusterParameter -Name CrossSubnetThreshold -Value 40
仲裁与投票机制设计
跨子网部署下,“脑裂”风险更高,仲裁必须可靠且不依赖某一个子网:
- 节点数为奇数(如 3 节点)→ 使用“多数节点”仲裁模式
- 节点数为偶数(如 2 节点跨子网)→ 必须引入“文件共享见证”(File Share Witness),见证服务器不能位于任一业务子网内,建议部署在第三方位置(如另一台轻量 VM 或 Azure 存储账户的 SMB 共享)
- 严禁将仲裁投票分配给 DR 区域节点,避免灾难发生时整个集群失票脱机
- 验证仲裁状态:在集群管理器中查看“群集核心资源”→“仲裁”→确认当前法定人数满足(≥ ⌈总票数/2⌉ + 1)
SQL Server 故障转移群集实例(FCI)或 AlwaysOn AG 注意项
若部署的是 FCI,共享存储必须支持跨子网访问(如 Azure 共享磁盘、iSCSI 目标或 SIOS DataKeeper 等同步软件);若部署的是 AlwaysOn AG,则无需共享存储,但需注意:
- 跨子网 AG 侦听器需手动添加多个 IP 地址(每个子网一个),否则客户端无法直连辅助子网节点
- 无 DNS 环境下,应用连接字符串应直接指定主节点 IP 或使用客户端重定向脚本,避免依赖侦听器 VIP
- 同步提交副本建议只设在一个本地子网内,异地副本设为异步模式,兼顾 RPO 与网络延迟
- 定期检查
sys.dm_hadr_database_replica_states中的last_hardened_lsn和synchronization_state_desc,确认数据同步无积压










