
简介Windows Server 2019双机热备MSCS下Sql Server 2019群集部署是一份系统运维与数据库管理人员适用的71页图文实战手册。文档讲述了从域控制器搭建、节点服务器配置、故障转移群集创建到Sql Server 2019故障转移群集安装及运行测试的完整流程每一步都配有截图与说明。针对心跳网络、DNS反向解析、I/O多路径等关键细节也有专门提示有助于规避常见部署问题。资源为一个PDF文件大小4.94MB结构清晰既能供新手按步骤跟做也能作为既有环境的排障与扩容参考。当前已有5503人学习浏览内容获得不少同行认可。完整阅读后可掌握双机热备下数据库高可用部署的整体流程理解故障转移和恢复原理并在虚拟机或物理服务器上复现同样配置。1. Windows Server 2019 双机热备MSCS 与 SQL Server 2019 群集部署先想清楚再动手生产库挂了最怕领导问「多久能恢复」。Windows Server 2019 双机热备MSCS下做 SQL Server 2019 群集部署就是为这个场景准备的两台物理机共享一套存储A 节点宕机或服务异常时SQL Server 服务自动「漂移」到 B 节点几十秒内完成切换应用重连后继续读写数据不丢。它和 AlwaysOn 可用性组不同不是在两个独立实例间做复制而是把一个 SQL Server 实例做成 Windows 故障转移集群WSFC即 MSCS 的现代实现里的群集应用资源。这套方案适合中小型生产环境、IT 预算有限但业务不允许长时间中断的运维也适合想把手头单机实例升级成双机热备的 DBA 照着复现。下面按我实际部署的顺序拆开讲架构怎么定、集群怎么搭、SQL 怎么装、常见坑在哪。2. 部署前的架构设计为什么选 MSCS 而不是 AlwaysOn以及五个硬性前置条件很多人一听到「双机热备」第一反应是去买一套商业双机热备软件。实际上 Windows Server 2019 自带的故障转移集群Failover Clustering就是传统意义上被叫了十几年的 MSCS它把两台服务器的硬件和网络资源抽象成一个整体对外提供服务SQL Server 故障转移集群实例FCI就运行在这个整体上。你不需要再额外购买高可用软件选型做对了这套方案的价值会远超它的成本。2.1 先想清楚MSCS 与 AlwaysOn 可用性组到底选哪个用一张表格把 FCI 和 AlwaysOn 可用性组AG拆开看选型就不纠结了。维度故障转移集群实例 FCI本方案AlwaysOn 可用性组 AG存储必须共享存储SAN/iSCSI各节点独立存储不需要共享盘数据同步无复制主备共享一份数据文件日志传送/副本同步到备实例切换粒度整个实例资源组整体切换按数据库粒度切换硬件成本存储贵服务器可用性要求高服务器成本翻倍存储普通即可部署复杂度先做 Windows 集群再做 SQL 集群不需要 Windows 集群配置更灵活适用场景数据库实例级高可用、文件与库都要保读写分离、报表灾备、跨机房容灾为什么先讲选型因为我见过不少团队在双机热备项目里配了两台不带共享存储的服务器想跑 AG结果发现数据副本初始化和同步对带宽要求很高反复重做也有人上了共享存储却发现 AG 根本用不上共享盘白白花了钱。双机热备这个需求正确落点就是本方案的 FCI。另外说一句版本SQL Server 2019 的 Standard Edition 就支持 FCI 的基本故障转移能力但要不要多节点、能不能做可用性组需要对着微软的功能矩阵确认。做生产环境前建议先在 Windows Server 2019 评估版和 SQL Server 2019 评估版上把完整流程跑通一遍再进入生产。试用版除了使用时限集群相关功能是完整的。2.2 五个硬性前置条件域、共享存储、双网卡、DNS 与版本一致性第一是域环境。故障转移集群里的节点必须加入同一个 Active Directory 域并且所有节点的时间要跟域控保持同步否则 Kerberos 和集群状态更新会出奇怪问题。我一般会把域控单独放在一台虚机上DNS 和 AD 一起做主备因为后面 New-Cluster、SQL 网络名称注册都要依赖 DNS 动态更新。第二是共享存储。本方案用的是传统共享 LUN不是 Storage Spaces Direct。两个节点都必须在「磁盘管理」里能看到同一块 LUN并且它是基本磁盘、NTFS 分区。无论是 SAN 还是 iSCSI 都行生产环境建议配 MPIO多路径 I/O只走一条路径会让存储成为单点故障点。第三是独立的心跳网卡。两台服务器至少要两块网卡一块走业务流量另一块专门做节点之间心跳通信。心跳网段不要设默认网关不要设 DNS最好直接在故障转移集群管理器里把它指定为「仅用于集群内部通信」。这块最容易被忽略后面脑裂和误切换基本都是它引起的。第四是 DNS 记录和 IP 规划。集群名、SQL FCI 网络名称都需要在 DNS 里有正向 A 记录而且是动态更新。IP 规划要预留几个固定地址集群管理 IP 一个、SQL FCI 的虚拟 IP 一个、两个节点的业务 IP 各一个、心跳 IP 各一个再加保留一个备用。把 IP 写成表贴到机房里不然排错的时候完全分不清哪台是哪台。第五是两个节点的系统版本一致。同一个补丁级别、同一个 bit 版本x64不然群集验证会直接报「节点操作系统版本不一致」这个检查在 Test-Cluster 的 Inventory 阶段就会被拦下来。把系统装好后统一跑一遍 Windows Update再做集群是我每次部署前的习惯动作。2.3 IP 规划与盘符约定这里放一张我在部署前会打印出来贴墙上的表对象项目值节点 A主机名 / 业务 IPSQLNode01 / 192.168.1.11节点 B主机名 / 业务 IPSQLNode02 / 192.168.1.12心跳SQLNode01 / SQLNode0210.10.10.11 / 10.10.10.12集群SQLCluster01 / 管理 IP192.168.1.51SQL FCISQLFCI01 / 虚拟 IP192.168.1.52共享卷盘符统一为 SLUN 大小 1TBNTFS域控DNS / 数据域contoso.com / 192.168.1.10表里有个容易被新手绕过去的点共享卷在两台节点上必须映射到同一个盘符。SQL FCI 安装向导在检查「群集磁盘」时是按盘符和磁盘 ID 来判断的如果节点 A 上是 S 盘、节点 B 上是 R 盘安装会在中途报错。这个细节第 4 章会特别强调。2.4 部署前用 PowerShell 做一个环境自检在动手建集群之前我喜欢先在两个节点上各跑一段脚本把版本、群集服务状态、共享盘可见性一次性打印出来防止装到一半才发现基础环境不一致。# 在两台节点上分别执行确认 OS 版本一致Cluster 服务为停止状态 $os Get-CimInstance Win32_OperatingSystem Write-Host Host$env:COMPUTERNAME OS$($os.Caption) Build$($os.BuildNumber) # 列出 iSCSI/FC 总线下所有磁盘核对两个节点看到的是同一块 LUN Get-Disk | Where-Object BusType -in iSCSI,FC | Select-Object Number, FriendlyName, SerialNumber, PartitionStyle, OperationalStatus, {nSizeGB;e{[math]::Round($_.Size/1GB)}}第一段输出的 BuildNumber 必须一致不一致先打补丁再继续。第二段重点看 SerialNumber两个节点输出的磁盘序列号要一一对上序列号对不上说明 LUN 映射错了或根本没落盘OperationalStatus 应该是 Online如果显示 Offline 要手动上线。PartitionStyle 和分区格式在这个阶段没有也没关系第 4 章挂载时再处理。常见做法是在这一步就把结果导出成文本留档后面所有报错排查都拿它当基准。3. 搭建 Windows Server 2019 故障转移集群加域、验证、创建集群与仲裁配置到这里架构层面的问题解决了下面进入 Windows Server 2019 集群本身的搭建。这一步做完你会在故障转移集群管理器里看到两台服务器像一个整体一样工作后面 SQL Server 才能把实例装进这个整体里。3.1 加域与防火墙放行双机热备的通信前置条件两个节点都先加域这是集群可以被创建的基础。下面这段在每台节点上以管理员 PowerShell 执行我用静态 IP 而不是 DHCP因为集群节点对 IP 漂移非常敏感。# 设置业务网卡 IP 与 DNS然后加入 contoso.com 域并重启 New-NetIPAddress -InterfaceAlias 以太网 2 -IPAddress 192.168.1.11 -PrefixLength 24 -DefaultGateway 192.168.1.1 Set-DnsClientServerAddress -InterfaceAlias 以太网 2 -ServerAddresses 192.168.1.10 Add-Computer -DomainName contoso.com -Credential contoso\administrator -Restart这里的 InterfaceAlias 以你机器上「网络连接」里看到的实际名称为准别照着我的写命令会报找不到接口。Set-DnsClientServerAddress 只指到域控 IP不要填公网 DNS集群所有名称解析都走内网 DNS。Add-Computer 成功后机器重启即完成加域如果提示 DNS 解析不了 contoso.com先确认本机 DNS 指向再排 AD。加完域之后防火墙规则是双机热备里非常容易翻车的一步两个节点的 Windows 防火墙策略必须一致否则集群通信、SQL 监听都会时好时坏。最省事的做法是直接启用故障转移集群的预定义入站规则# 在两台节点上都执行放行故障转移集群所需全部入站规则 Get-NetFirewallRule -Group FirewallAPI.dll,-32752 | Enable-NetFirewallRule这条命令里的 -32752 是故障转移集群功能在防火墙 API 里的固定组 ID启用之后群集心跳、集群共享卷、网络名称注册这些端口的入站流量会被放行。如果不想用命令行也可以在「高级安全 Windows Defender 防火墙」里找到「故障转移集群」这个分组勾选所有入站规则。注意这只是入站规则出站默认放行不需要额外配置。SQL Server 的 1433 端口现在不用急着放等第 4 章装完 FCI 再统一处理避免过早开放端口埋安全隐患。3.2 安装故障转移集群功能在域环境下两台节点都要安装 Failover-Clustering 功能这一步不需要重启。# 分别在 SQLNode01 和 SQLNode02 上安装故障转移集群功能及管理工具 Install-WindowsFeature -Name Failover-Clustering -IncludeManagementTools -ComputerName SQLNode01 Install-WindowsFeature -Name Failover-Clustering -IncludeManagementTools -ComputerName SQLNode02IncludeManagementTools 参数会把「故障转移群集管理器」图形工具和 FailoverClusters PowerShell 模块一起装上后面建集群、查资源都用得上。装完后用 Get-WindowsFeature -Name Failover-Clustering | Select-Object Installed 确认返回 True 再继续。如果在配置较低的机器上做实验装完可以用 Get-Service clussvc 看到 Cluster 服务处于 Stopped 状态这是正常的集群还没创建时服务不会自启。3.3 创建集群Test-Cluster 验证与 New-Cluster 参数说明创建集群前必须先跑集群验证。很多人跳过验证直接 New-Cluster结果创建时报错或建完一会就掉线最后还是要回来跑验证不如一开始就做。# 在任一节点上以域管理员身份执行验证两个节点的存储、网络与系统配置 Test-Cluster -Node SQLNode01, SQLNode02 -Include Inventory,Network,Storage,System -ReportName PreCluster_20241101-Include 后面的几个词分别对应验证清单里的分类Inventory 检查硬件和驱动一致Network 检查网卡与网络配置Storage 检查共享盘是否可按集群要求访问System 检查补丁和系统版本。每类下面还有若干子项全部结果会写进 C:\Windows\cluster\Reports 下的 HTML 报告。看到 Warning 不用慌很多警告只是提示建议比如「未检测到双网卡冗余」是正常的看到 Error 就不能往下走。最容易报错的还是 Storage 类报错原因八成是磁盘脱机、动态磁盘或者两个节点看到的盘不一致处理完后重新 -Include Storage 再跑一轮。验证通过后创建集群命令如下# 创建名为 SQLCluster01 的集群管理 IP 绑定到业务网段 New-Cluster -Name SQLCluster01 -Node SQLNode01, SQLNode02 -StaticAddress 192.168.1.51这个命令会把共享存储自动发现并托管到集群里所以第 2 章里共享盘的准备要提前做否则集群建完存储是空的。Name 参数会向 DNS 注册一条 A 记录StaticAddress 是集群管理 IP它与节点 IP 必须在同一网段且未被占用。建完后 Get-ClusterNode 应显示两个节点状态 Up。有一个边界要交代如果当前环境中共享盘还没准备好又想把集群先建起来可以在命令里加 -NoStorage先建不带存储的集群之后再用 Add-ClusterDisk 把盘加进来。生产环境一般不建议这么干因为 SQL FCI 安装时要求盘已经处于集群管理范围。3.4 仲裁配置双节点必须配见证否则没有亡羊补牢的机会两节点的故障转移集群必须配置仲裁见证否则当一个节点离线时存储仲裁和节点仲裁刚好打成 1:1集群无法区分「一个节点挂了」还是「网络分裂」整体服务直接下线。常见做法有三个加第三节点做仲裁、加群集共享磁盘做磁盘见证、在域控上建一个文件共享做文件共享见证。对预算有限的团队文件共享见证最划算。# 在域控上创建共享目录并授权域管理员权限执行 New-Item -Path C:\Quorum -ItemType Directory New-SmbShare -Name Quorum -Path C:\Quorum -ChangeAccess Everyone # 回到集群节点把仲裁设为节点 文件共享见证多数 Set-ClusterQuorum -NodeAndFileShareMajority \\DC01\QuorumNew-SmbShare 里的 ChangeAccess Everyone 只是演示用生产建议按最小权限给节点机器账号即可因为见证共享会不断被读写。Set-ClusterQuorum 的 -NodeAndFileShareMajority 表示仲裁模型为「节点加文件共享见证多数」这是双节点环境下最稳的组合。配置完成后用 Get-ClusterQuorum 确认 QuorumType 为 NodeAndFileShareMajority、QuorumResource 里能看到 \DC01\Quorum仲裁就算立住了。提示文件共享见证所在域控如果宕机集群仍能运行只是丧失一次「多数裁决」能力所以见证不要放在被保护的集群节点上这是常见误配点。到这里 Windows 这一层已经通了下一章进入 SQL Server 2019 的故障转移集群实例安装。4. SQL Server 2019 故障转移集群实例FCI安装盘符、网络名称与权限三处细节决定成败SQL Server 2019 的安装中心几乎每个入口都长一样选错一个页面后面全部白做。这一章直接从挂载共享盘开始到安装完成后的资源校验为止把所有容易选错的页面逐项过一遍。4.1 挂载共享盘固定盘符 S用序列号而不是盘号Windows 集群能识别共享磁盘但 SQL FCI 安装向导识别的是「盘符 磁盘 ID」所以这一步必须把统一盘符做扎实。两个节点上同一块 LUN 的 DiskNumber 很可能不一样因为 HBA 扫描顺序差异会导致磁盘枚举错位不能按「节点 A 是 Disk 5所以节点 B 也选 Disk 5」来操作。# 在节点 A 和节点 B 上分别执行把同一 LUN 初始化为 GPT 并分配盘符 S # 先用 SerialNumber 确认是同一块盘这里的序列号要替换成自检脚本里输出的值 Get-Disk | Where-Object SerialNumber -eq SATA_DISK_SN_XXXX | Initialize-Disk -PartitionStyle GPT Get-Disk | Where-Object SerialNumber -eq SATA_DISK_SN_XXXX | New-Partition -DriveLetter S Format-Volume -DriveLetter S -FileSystem NTFS -Confirm:$false第一行把盘初始化成 GPT第二行建分区并映射到 S 盘第三行格式化为 NTFS。为什么不用 MBR单块大容量盘建议直接 GPTSQL 对 GPT 支持没有任何问题。Format-Volume 的 -Confirm:$false 是避免交互确认自动化脚本里必须加。做完之后在另一台节点上执行 Get-Partition -DriveLetter S 确认也能看到说明共享盘两端就位。这里要提醒磁盘若已被系统识别为「脱机」执行完了也不会出现在 SQL 向导里检查 Set-Disk -IsOffline $false 手动上线。如果生产环境用 MPIO必须确认「多路径」功能安装在两台节点上并且 iSCSI 发起程序指向同一目标地址多路径会话都健康否则故障转移时存储的 I/O 路径可能会撕裂。4.2 安装新的 SQL Server 故障转移群集关键页面逐项说明拿到 SQL Server 2019 安装镜像评估版 ISO 即可后双击 SETUP.exe 打开安装中心在「安装」页里选择「新的 SQL Server 故障转移群集安装」。注意不是「新的 SQL Server 独立安装」选错了整个集群方向就错了。下面是每个关键页面的做法和判断标准。第一页「产品密钥」评估版直接下一步正式环境填入正版密钥。第二页「故障转移群集信息」实例名建议用默认实例 MSSQLSERVER方便后面资源组名称好记如果公司规范要求命名实例就填一个明确的名字比如 SQLFCI01。同一页的「SQL Server 网络名称」填 FCI 的虚拟网络名这里是 SQLFCI01它会被注册进 DNS客户端连接就用它跟物理机名无关。第三页「群集磁盘」向导会自动列出当前集群里已被托管的共享盘勾选你分配的 S 盘。如果这个列表为空回到故障转移群集管理器确认 S 盘已经出现在「存储 → 磁盘」下且状态为「联机」必要时用 Add-ClusterDisk -Disk S 手动加入。第四页「网络」在业务网段里给 SQLFCI01 配虚拟 IP 192.168.1.52子网掩码和网关跟节点业务 IP 一致心跳网段的地址不要勾SQL FCI 只监听业务网络。之后是「实例配置」和「服务账户」实例功能可以只选数据库引擎做演示没必要装 Analysis Services数据目录、日志目录、备份目录全部指到 S 盘的子目录不要放 C 盘备节点才能访问到同一份数据。服务账户建议用域账号见下一节。复杂的地方都用向导图形页完成但图形界面最容易出问题的是服务账户和权限所以单独拿一节来说。4.3 服务账号与 AD 权限网络名称注册失败多半在这一步埋下的SQL Server 2019 FCI 安装时向导要为 SQLFCI01 这个网络名称在 AD 里创建一个虚拟计算机对象VCO。默认情况下安装过程使用集群名对象CNO的权限去创建 VCO而 CNO 的创建依赖域策略。这里直接说结论先检查 SQL 服务账号在 AD 里有没有「创建计算机对象」的委派权限没有就提前让域管理员在 contoso.com 域的「安全 → 委派」里给该账号添加相应权限或者更稳妥的做法让域管理员手动在 AD 里预先创建一个名为 SQLFCI01 的已禁用计算机账号把该账号所在 OU 的权限设好安装向导会自动改用这个现成对象。还要强调 SQL 服务账号本身建议建两个固定域账号一个跑数据库引擎服务一个跑 SQL Agent密码永不过期。账号至少要具备「作为服务登录」权限SQL 安装向导会在实例配置页自动授予。如果公司普通用户策略不允许就在安装前通过域组策略把两个账号加入「本地安全策略 → 用户权限分配 → 作为服务登录」否则安装过不了。踩坑现场我会在第 5 章展开这里先记住一个检查点安装到大约 70% 进度时如果报「为群集网络名称注册域控制器中的群集服务器对象时出错」停掉重试没有意义去处理 AD 权限处理完再重新运行安装向导即可。4.4 安装完成后的集群资源校验安装完成后不要急着切库先在故障转移集群管理器里看资源状态。用 PowerShell 校验更直接# 查看 FCI 资源组状态与当前所有者节点 Get-ClusterGroup SQL Server (MSSQLSERVER) | Select Name, State, OwnerNode # 查看 SQL 相关资源是否全部 Online Get-ClusterResource -Cluster SQLCluster01 | Where-Object {$_.OwnerGroup -eq SQL Server (MSSQLSERVER)} | Select Name, ResourceType, State第一段里的资源组名称对默认实例就是「SQL Server (MSSQLSERVER)」命名实例会变成「SQL Server (实例名)」别输错。第二段过滤出 SQL 资源组内的所有资源至少应看到SQL Server、SQL Server Agent、SQL 网络名称SQLFCI01、SQL 网络 IP192.168.1.52、群集磁盘 S。全部 State 是 Online、OwnerNode 指向同一台节点才算装对。如果 SQL Server 资源 Online 但网络名称处于 Failed多数是 IP 资源没绑定成功先在资源属性里确认 IP 地址关联的是业务网络。5. MSCS SQL Server 2019 部署避坑清单特征、原因与解决路径集群类部署的报错有个特点错误信息特别笼统真正的原因要靠上下文推断。这一章把我在重复部署里踩过的高频坑按阶段拆开全部是真实现场不是理论推演。5.1 存储与验证阶段的坑群集验证阶段的报错最能劝退新手。表面上只是「存储测试失败」六个字实际上背后可能是磁盘类型、脱机状态、LUN 映射三个完全不同的原因。我在这个环节见过太多人误判成存储阵列故障结果查了半天硬件问题却出在 Windows 的磁盘属性上。第一条Test-Cluster 的 Storage 测试一直报错查询报告显示「磁盘属于动态磁盘」或「磁盘脱机」。现象是 S 盘在两个节点的磁盘管理里都能看到但验证一跑就红集群始终建不出存储。原因基本是某台节点上该 LUN 被初始化成了动态磁盘或者在「服务器管理器」里被误标为「脱机」状态。解决方法是把动态磁盘先转回基本磁盘右键删除卷后重新初始化注意数据备份然后执行 Set-Disk -Number N -IsOffline $false如果盘在一个节点联机一个节点脱机那问题多在 iSCSI 连接配置检查发起程序的多次登录会话是否一致。从那以后我每次布置共享盘前都会先跑一遍 Get-Disk 输出 SerialNumber 和 OperationalStatus确认一致再建集群。第二条New-Cluster 建完SQL 安装向导里「群集磁盘」列表为空。现象是集群名称正常出现节点 Up但故障转移群集管理器里「存储 → 磁盘」看不到任何可用盘。原因有两个一是建集群时加了 -NoStorage命令只建了网络和管理资源二是磁盘虽然被两个节点看到但被系统识别为「本地盘」而不是「群集盘」SQL 向导自然无法识别。解决方法是打开故障转移群集管理器在「存储 → 磁盘」里点右键添加磁盘把 S 盘加入集群如果根本不在候选列表里回到 4.1 确认盘符和基本磁盘属性。这一步失败率和「没跑 Test-Cluster 就建集群」高度正相关所以第 3 章的验证环节千万别省。5.2 安装与权限阶段的坑安装阶段的问题集中在 AD 权限和 DNS 上。这类报错常常长得像网络故障实际是 SQL 服务账号没有创建计算机对象的权限或者 DNS 区域安全更新策略太严。下面两条是我踩过的现场。第三条SQL FCI 安装到网络名称注册时回滚报「创建计算机对象失败」。现象是安装进度走到近 70%弹窗提示无法为 SQLFCI01 注册 AD 对象然后安装向导自动回滚之前装的组件被删除。原因是 SQL 服务账号没有在域的计算机对象创建权限或 contoso.com 的 DNS 区域启用了安全更新而该账号不在「允许安全更新」名单里。解决有两步先是域管理员在 AD 里给 SQL 服务账号委派「创建 Computer 对象」权限或者干脆预创建 SQLFCI01 的已禁用计算机账号然后在 DNS 区域属性里确认允许安全更新。切忌反复重跑安装权限不到位重跑一百次也是同一个错误。第四条SQL Server 资源联机正常但客户端通过 SQLFCI01 连不上。现象是群集管理器里一切 Online开 SSMS 用节点 IP 能连用 FCI 虚拟名称超时。原因很多最常见的是 Windows 防火墙没有放行 1433或者 FCI 网络名称依赖的虚拟 IP 资源被绑定到心跳网段。解决方法是先确认 SQL Server 配置管理器里 TCP/IP 已启用然后直接在防火墙放行 1433 端口和 SQL 浏览端口 1434 UDP最后用 Get-ClusterResource 看 SQL 网络 IP 的「网络」属性里勾选的是不是业务网络。我这里有个习惯在 SQL 资源组里把 IP 资源命名为「SQL_IP_BUS_01」一眼能看出来绑的是业务网免得以后自己都忘了哪个 IP 是干吗的。5.3 切换与运维阶段的坑切换运维阶段的坑最难发现因为它不是一次性失败而是系统反复漂移、时好时坏。这种情况下最容易把问题归到网络设备上但真正的原因往往在心跳配置。第五条故障转移后服务起来了但过几分钟集群又自动切回原节点形成乒乓切换。现象是 Move-ClusterGroup 后节点 B 成为所有者运行正常但群集日志里出现「网络分区」或者「检测到存储连接丢失」的警告然后资源组漂回节点 A。原因大概率是心跳网卡配置不规范——心跳网卡被设了默认网关或心跳和业务流量跑在同一块网卡上导致集群误判失联。解决方法是把心跳网卡单独划网段、不设网关在故障转移群集管理器的「网络」里把心跳网络标记为「仅用于集群内部通信」并把业务网络的同项取消勾选心跳网卡上不要绑定 DNS。这是我从一次生产事故里拿到的血泪教训双机热备里最贵的往往不是存储是那根被忽略的心跳线。以上五条覆盖了我重复部署这个方案时 80% 的排错时间剩下 20% 基本是 SQL 服务账号密码过期这类常规问题不在集群范围内。6. 故障转移验证与进阶技巧用 PowerShell 主动切换再把巡检变成习惯集群搭好之后最不该省的就是故障转移演练否则真出事时系统到底能不能按预期切换你心里没底。计划内维护建议用 Move-ClusterGroup 主动切资源组而不要手动停服务——手动停会被集群判定为故障演练路径和日常切换不完全一致。6.1 主动切换# 把 SQL 资源组移动到 SQLNode02并等待最多 60 秒的结果 Move-ClusterGroup SQL Server (MSSQLSERVER) -Node SQLNode02 -Wait 60 # 再确认资源组落在新节点 Get-ClusterGroup SQL Server (MSSQLSERVER) | Select Name, State, OwnerNode这里的 -Wait 60 表示等待切换完成或超时如果没加命令会立即返回脚本就会在资源组还在迁移时继续往下走容易误判。Move 默认只在目标节点有足够资源时才执行这是集群的保护逻辑生产环境不要轻易加 -Force 跳过它。6.2 连接串补上 MultiSubnetFailover只要你的 FCI 规划里出现两个网段客户端连接串就要带 MultiSubnetFailoverTrueServerSQLFCI01;DatabaseYourDB;MultiSubnetFailoverTrue;Integrated Securitytrue不带这个关键字客户端会先尝试旧 IP 等超时再连新 IP表现为切换正常应用却断线几十秒。这行不是可选优化项是切换体验的一部分。6.3 三条命令做巡检我现在的巡检习惯是每周跑一遍下面三条命令Get-ClusterNode | Select Name, State Get-ClusterGroup | Where-Object {$_.Name -like SQL*} | Select Name, State, OwnerNode Get-ClusterResource | Where-Object {$_.State -ne Online} | Select Name, State第一条看节点状态第二条看 SQL 资源组挂在哪个节点第三条找所有不在线的资源。曾经有一次我在第三句里发现资源长期处于 Degraded定位到是共享盘空间打满从那以后我每次做切换都强制先走一遍这三句确认基线正常再动手最后再查一次 OwnerNode 收尾。这套部署流程和完整图文操作手册我都整理在了配套资料里按章节跟着做能从裸机一路走到可切换状态希望帮到你。本文还有配套的精品资源点击获取