前言:叢集是高可用性的基石,也是細節的藝術
Windows Server Failover Clustering (WSFC) + SQL Server Failover Cluster Instance (FCI) 是傳統高可用架構。13 年實戰經驗凝練出七大關鍵技巧:硬體認證、版本選擇、單節點預部署、節點擴充自動化、服務帳號管理、網路配置、人員流程。避開「硬體在 HCL 但整體不在」等經典坑點。
一、硬體:整體認證非元件認證
鐵律:單一元件 (HBA、網卡、磁碟陣列) 通過 Windows Server Catalog (原 HCL) ≠ 整體叢集方案通過認證。
- 必須驗證 完整解決方案 (伺服器型號 + 韌體版本 + HBA + 交換器 + 共享儲存陣列 + 多路徑軟體) 在 WSFC 認證清單中
- 低成本替代:Microsoft 驗證的 S2D (Storage Spaces Direct) 方案 (Windows 2016+)、或經認證的 共享 SAS JBOD 方案
- 共享磁碟 = 單點風險:雙控制器、雙路徑、多路徑軟體 (MPIO/DSM) 必須冗餘
二、版本選擇:Enterprise vs Standard
| 功能 | Enterprise Edition | Standard Edition |
| FCI 節點數上限 | 8 節點 (SQL 2012+) | 2 節點 |
| 線上索引重建 | 支援 | 不支援 |
| 資料壓縮 | 支援 | 不支援 |
| 分割資料表/索引 | 支援 | 不支援 |
| 記憶體上限 | OS 限制 | 128 GB (SQL 2012/2014)、64 GB (SQL 2016+) |
| CPU 核心上限 | OS 限制 | 4 插槽 / 24 核心 |
建議:已有 EE 授權 → 必上 FCI。僅有 SE → 兩節點 FCI 仍具高可用價值。若需 >2 節點或進階功能 → 必須 EE。
三、單節點叢集:為未來預留擴充路徑
1. 為何部署單節點 FCI?
- 當前僅一台伺服器,但未來 6-12 月規劃擴充為雙節點
- 避免未來「重建叢集 → 重裝 SQL → 遷移資料 → 停機」的痛苦
- 單節點 FCI 仍享有 FCI 優勢:資源群組管理、IP/網名虛擬化、服務依賴關係
2. 部署關鍵
- 硬體 必須符合雙節點叢集認證規格 (共享儲存、雙網卡、雙 HBA)
- 安裝 SQL 時選擇「新增 SQL Server 容錯移轉叢集執行個體」→ 僅選擇當前節點
- 未來擴充:新增節點 → 安裝 SQL 二進位檔 + 修補程式 → `AddNode` → 故障轉移驗證 → 移除舊節點
- 停機時間 = 故障轉移時間 (通常 < 60 秒) + 修補程式安裝時間
四、節點擴充自動化:腳本化一切
1. 經典慘案:手動加節點遺漏服務帳號
- OS/網管建好新節點,DBA 加入叢集、安裝 SQL
- 故障轉移測試 → 失敗 (資源無法上線)
- 根因:新節點缺少「叢集服務帳號」與「SQL Server 服務帳號」的本地管理員權限 / 登入為服務權限
- 排查耗時 4 小時
2. 自動化腳本 (PowerShell + Cluster.exe)
# Add-ClusterNode.ps1
param($NewNodeName, $ClusterName, $SqlServiceAccount, $ClusterServiceAccount)
# 1. 加入 WSFC 叢集
Add-ClusterNode -Name $NewNodeName -Cluster $ClusterName
# 2. 設定服務帳號本地權限 (關鍵!)
$accounts = @($SqlServiceAccount, $ClusterServiceAccount)
foreach ($acc in $accounts) {
# 授予「登入為服務」SeServiceLogonRight
ntrights +r SeServiceLogonRight -u $acc
# 加入本地管理員群組 (視安全策略,或僅授予必要權限)
net localgroup Administrators $acc /add
}
# 3. 安裝 SQL Server 二進位檔 (無人值守)
$args = "/Q /ACTION=AddNode /INSTANCENAME=MSSQLSERVER /IACCEPTSQLSERVERLICENSETERMS `
/FAILOVERCLUSTERGROUP=""SQL Server (MSSQLSERVER)"" `
/FAILOVERCLUSTERIPADDRESSES=""IPv4;10.0.1.100;255.255.255.0;ClusterNet1"" `
/SQLSVCACCOUNT=""$SqlServiceAccount"" /SQLSVCPASSWORD=""$SqlPwd"" `
/AGTSVCACCOUNT=""$SqlAgentAccount"" /AGTSVCPASSWORD=""$AgentPwd"" `
/ASSVCACCOUNT=""$AsAccount"" /ASSVCPASSWORD=""$AsPwd"" `
/INDICATEPROGRESS /CONFIRMIPDEPENDENCYCHANGE=0"
Start-Process "Setup.exe" -ArgumentList $args -Wait -NoNewWindow
# 4. 安裝修補程式 (CU/GDR)
# 5. 驗證故障轉移
Move-ClusterGroup -Name "SQL Server (MSSQLSERVER)" -Node $NewNodeName
3. SQL 2008+ 改進:安裝精靈強制網域群組
- 安裝時需指定 SQL Server 服務帳號為 網域群組 (非個別使用者)
- 新增節點時,只需將新節點電腦帳號加入該網域群組,權限自動繼承
- 消除「手動加本地權限」步驟,大幅降低人為錯誤
五、網路配置:多子網、DNS、Kerberos
| 網路介面 | 用途 | 配置要點 |
| Public/Client | 應用連線 | 靜態 IP、註冊 DNS A 記錄 (FCI 虛擬網名)、SPN 註冊 |
| Private/Heartbeat | 叢集心跳 | 專用 VLAN、非路由、MTU 9000 (Jumbo Frame)、至少兩條路徑 |
| iSCSI/Storage | 共享儲存 | 獨立 VLAN/HBA、MPIO 多路徑、流量隔離 |
關鍵:多子網叢集 (SQL 2012+)
- 跨資料中心節點部署不同子網
- FCI 虛擬 IP 設為 OR 邏輯 (多個 IP 資源,任一上線即可)
- 連線字串加 `MultiSubnetFailover=True`,驅動程式並行嘗試所有 IP,極速故障轉移
六、人員與流程:技術之外的成敗手
「叢集能防硬體故障,防不了睡眠不足的 DBA 午夜刪表。」
- 變更管理:所有叢集變更 (修補、配置、故障轉移演練) 走 RFC、雙人覆核、可回滾
- 運行手冊:含故障轉移步驟、資源離線/上線順序、日誌分析、聯絡樹
- 季度演練:計畫性故障轉移、非計畫性模擬 (拔網線、關電源)、RTO/RPO 實測
- 知識傳承:離職交接清單、腳本庫版控、事故複盤文檔
七、總結清單
| 階段 | 關鍵動作 | 驗收標準 |
| 規劃 | 整體方案認證、版本授權、網域群組服務帳號 | 認證清單截圖、授權合約 |
| 部署 | 單節點預部署、自動化腳本驗證、多網路隔離 | 故障轉移測試 < 60秒、無錯誤日誌 |
| 擴充 | 腳本化 AddNode、修補程式同步、權限自動化 | 新節點 0 手動步驟、故障轉移雙向通 |
| 運維 | 季度演練、修補滾動、監控告警 (資源狀態、磁碟、網路) | RTO 實測達標、零非計畫停機 |
叢集部署不只是「下一步、下一步、完成」,而是 硬體認證、版本規劃、自動化腳本、網路隔離、人員流程 五位一體的系統工程。掌握這七大技巧,讓您的 SQL Server FCI 真正成為「睡得著覺」的高可用基石。
- 上一篇文章: SQL Server 精確計算日期差值函數:年月日精確到天
- 下一篇文章: SQL Server 資料庫鏡像 PARTNER_TIMEOUT 調整:避免網路抖動誤觸發故障轉移
Copyright ©
程式碼之家 All Rights Reserved