Skip to content

SQLServer 故障转移集群实例

故障转移集群实例概述

SQL Server 故障转移集群实例(Failover Cluster Instance,简称 FCI)是 SQL Server 提供的实例级别的高可用性解决方案。它将 SQL Server 实例安装在 Windows Server 故障转移集群(WSFC)上,当一个节点发生故障时,整个 SQL Server 实例会自动故障切换到另一个健康节点,确保业务连续性。

核心组件

  • Windows Server 故障转移集群 (WSFC):FCI 的基础,负责集群管理、故障检测和资源调度
  • SQL Server 实例:安装在集群上的 SQL Server 实例,所有节点共享同一个实例配置
  • 共享存储:所有节点可访问的存储设备,用于存储数据库文件、日志文件和系统数据库
  • 虚拟网络名称 (VNN):客户端用于连接 SQL Server 实例的网络名称,故障切换后保持不变
  • 虚拟 IP 地址:与虚拟网络名称关联的 IP 地址,提供客户端连接的统一入口

主要特性

  • 提供实例级别的高可用性,保护整个 SQL Server 实例
  • 自动故障切换,无需手动干预,故障切换时间通常在 30-60 秒内
  • 透明的客户端连接,故障切换对客户端应用透明,无需修改连接字符串
  • 支持计划内维护,可以手动切换实例到其他节点,最小化维护停机时间
  • 适用于关键业务系统,确保业务连续性

架构设计

基本架构

FCI 架构由以下核心组件组成:

  • 集群节点:至少两个 Windows Server 节点,构成 WSFC 集群
  • 共享存储:所有节点可访问的存储设备,如 SAN、NAS 或 SMB 共享
  • 网络配置:包括公共网络和私有网络
    • 公共网络:用于客户端连接和集群对外通信
    • 私有网络:用于节点间的心跳检测和内部通信
  • SQL Server 资源组:包含 SQL Server 服务、代理服务、虚拟网络名称、虚拟 IP 和共享存储等资源

存储类型

1. SAN (Storage Area Network)

  • 传统的共享存储解决方案,提供高性能和低延迟
  • 支持光纤通道和 iSCSI 协议
  • 适用于高负载、对性能要求高的关键业务系统
  • 成本较高,需要专门的 SAN 设备和网络基础设施

2. NAS (Network Attached Storage)

  • 基于网络的存储解决方案,使用标准网络协议
  • 支持 SMB 协议,配置简单
  • 成本较低,易于扩展
  • 适用于中小型环境和对性能要求适中的系统

3. SMB 共享

  • SQL Server 2012 及以上版本支持使用 SMB 3.0 共享作为存储
  • 简化了存储配置,无需专门的 SAN 设备
  • 支持 Windows Server 共享文件夹或第三方 NAS 设备
  • 适用于各种规模的环境

4. 本地存储 + 复制

  • SQL Server 2017 及以上版本支持使用 Stretch Cluster
  • 结合了本地存储和复制技术
  • 提高了存储的可用性和灵活性
  • 适用于跨数据中心部署

集群类型

1. 主动-被动集群

  • 一个节点处于活动状态,运行 SQL Server 实例
  • 其他节点处于被动状态,等待故障切换
  • 所有节点共享同一个共享存储
  • 适用于大多数场景,配置简单,易于管理

2. 主动-主动集群

  • 多个节点同时运行不同的 SQL Server 实例
  • 每个实例有自己的共享存储和资源组
  • 提高了硬件利用率,充分利用所有节点资源
  • 适用于多实例环境,降低硬件成本

配置步骤

前提条件

在配置 FCI 之前,需要确保满足以下条件:

  1. 所有节点的 Windows Server 版本和补丁级别一致
  2. 所有节点的 SQL Server 版本和补丁级别一致
  3. 所有节点已加入同一个 Active Directory 域
  4. 已配置共享存储,所有节点均可访问
  5. 已配置适当的网络环境,包括公共网络和私有网络
  6. 已创建具有适当权限的服务账户

详细配置步骤

1. 安装和配置 WSFC 集群

powershell
# 在所有节点上安装故障转移集群功能
Install-WindowsFeature Failover-Clustering -IncludeManagementTools

# 在第一个节点上创建集群
New-Cluster -Name ClusterName -Node Node1,Node2 -StaticAddress 192.168.1.100 -NoStorage

# 验证集群配置
Test-Cluster -Node Node1,Node2

2. 配置共享存储

  1. 将共享存储设备连接到所有节点
  2. 在故障转移集群管理器中,导航到 "存储" → "磁盘"
  3. 右键点击可用磁盘,选择 "添加到集群共享卷" 或 "添加到集群"
  4. 验证所有节点都能访问共享存储

3. 安装 SQL Server 故障转移集群实例

  1. 在第一个节点上安装

    • 运行 SQL Server 安装程序
    • 选择 "新建 SQL Server 故障转移集群安装"
    • 配置实例名称、虚拟网络名称和虚拟 IP 地址
    • 选择共享存储位置
    • 配置服务账户和权限
    • 完成安装
  2. 在第二个节点上添加节点

    • 运行 SQL Server 安装程序
    • 选择 "向 SQL Server 故障转移集群添加节点"
    • 连接到现有的 FCI 实例
    • 配置服务账户和权限
    • 完成节点添加

4. 验证 FCI 配置

sql
-- 检查 FCI 配置
SELECT 
    SERVERPROPERTY('MachineName') AS ActiveNode,
    SERVERPROPERTY('ServerName') AS InstanceName,
    SERVERPROPERTY('IsClustered') AS IsClustered;

-- 查看集群节点
SELECT * FROM sys.dm_os_cluster_nodes;

-- 查看集群属性
SELECT * FROM sys.dm_os_cluster_properties;

在故障转移集群管理器中,检查 SQL Server 资源组的状态,确保所有资源都处于 "在线" 状态。

版本差异

SQL Server 2008/2012

  • 支持 SAN 和 iSCSI 共享存储
  • 不支持 SMB 共享存储
  • 最多支持 16 个节点
  • 仅支持 Windows Server 故障转移集群
  • 提供基本的集群管理功能

SQL Server 2014

  • 引入 SMB 3.0 共享存储支持
  • 增强了集群管理功能,简化了配置
  • 改进了故障检测和故障切换性能
  • 支持 Always On Availability Groups 与 FCI 的结合

SQL Server 2016

  • 引入 Stretch Cluster 支持,结合本地存储和复制技术
  • 增强了安全功能,包括 Always Encrypted 和动态数据掩码
  • 改进了可用性组与 FCI 的集成
  • 支持 Windows Server 2016 的新集群功能

SQL Server 2017 及以上

  • 支持 Linux 上的 Failover Cluster Instance
  • 支持容器化部署,可在 Kubernetes 上运行
  • 增强了性能和可靠性
  • 支持更多的存储选项,包括 Azure Blob Storage
  • 改进了集群管理工具和监控功能

故障切换操作

自动故障切换

当活动节点发生故障时,WSFC 会自动检测到故障,并触发故障切换到健康节点。自动故障切换的条件:

  1. 活动节点不可用(如硬件故障、操作系统崩溃或网络故障)
  2. WSFC 仲裁正常,集群可以做出决策
  3. 至少有一个健康节点可用
  4. 共享存储可访问

手动故障切换

手动故障切换用于计划内维护,如操作系统升级、硬件维护等。步骤如下:

  1. 打开 "故障转移集群管理器"
  2. 导航到 SQL Server 资源组
  3. 右键点击资源组,选择 "移动" → "选择节点"
  4. 选择目标节点,点击 "确定"
  5. 监控故障切换过程,确保所有资源在目标节点上成功启动
  6. 验证 SQL Server 实例在新节点上正常运行

强制故障切换

在紧急情况下,当主节点完全不可用且仲裁丢失时,可以执行强制故障切换:

powershell
# 使用 PowerShell 强制故障切换
Move-ClusterGroup -Name "SQL Server (InstanceName)" -Node Node2 -Force

注意:强制故障切换可能导致数据丢失,仅在极端情况下使用。

故障切换流程

  1. WSFC 检测到活动节点故障
  2. WSFC 将 SQL Server 资源组从故障节点离线
  3. WSFC 将资源组移动到健康节点
  4. WSFC 在健康节点上依次启动以下资源:
    • 共享存储
    • 虚拟 IP 地址
    • 虚拟网络名称
    • SQL Server 服务
    • SQL Server 代理服务
  5. 客户端连接自动重定向到新的活动节点

监控与管理

监控工具

1. 故障转移集群管理器

  • 查看集群节点状态和资源状态
  • 管理故障切换和资源移动
  • 配置集群属性和资源依赖关系
  • 查看集群事件日志

2. SQL Server Management Studio (SSMS)

  • 管理 SQL Server 实例和数据库
  • 查看 SQL Server 错误日志
  • 配置 SQL Server 代理作业
  • 监控查询性能和资源使用情况

3. 动态管理视图 (DMV)

sql
-- 查看集群节点信息
SELECT * FROM sys.dm_os_cluster_nodes;

-- 查看集群属性
SELECT * FROM sys.dm_os_cluster_properties;

-- 查看集群资源状态
SELECT * FROM sys.dm_os_cluster_resource_grains;

-- 查看当前活动节点
SELECT SERVERPROPERTY('MachineName') AS ActiveNode;

4. Performance Monitor

  • 监控 "Cluster Service" 性能对象,查看集群通信和资源状态
  • 监控 "SQL Server:General Statistics" 性能对象,查看 SQL Server 实例性能
  • 监控 "PhysicalDisk" 性能对象,查看共享存储性能

5. Windows 事件日志

  • 查看 "系统" 日志中的集群相关事件
  • 查看 "应用程序" 日志中的 SQL Server 相关事件
  • 配置事件转发和警报,及时获取重要事件通知

常见管理任务

1. 添加新节点

  • 按照初始配置步骤,在新节点上安装 SQL Server 故障转移集群节点
  • 确保新节点满足所有前提条件
  • 验证新节点能访问共享存储和其他集群资源

2. 移除节点

  • 在故障转移集群管理器中,右键点击要移除的节点
  • 选择 "更多操作" → "移除节点"
  • 按照向导完成节点移除

3. 升级 SQL Server 版本

  1. 备份所有数据库和系统配置
  2. 升级被动节点
  3. 手动故障切换到升级后的节点
  4. 升级原来的主动节点
  5. 验证升级后的实例正常运行

4. 更换共享存储

  1. 准备新的共享存储设备
  2. 将新存储添加到集群
  3. 使用 SQL Server 备份和还原或存储迁移工具迁移数据
  4. 更新 SQL Server 实例的存储路径
  5. 移除旧的共享存储

生产场景应用

场景1:关键业务系统高可用性

场景描述:某银行核心交易系统需要 99.99% 可用性,要求在硬件故障或计划内维护时,业务中断时间不超过 1 分钟。

解决方案

  • 配置 3 节点 FCI 集群,确保 WSFC 仲裁正常
  • 使用 SAN 存储,提供高性能和高可靠性
  • 配置自动故障切换,确保计划外故障快速恢复
  • 定期执行手动故障切换测试,验证故障切换流程
  • 配置监控和警报,及时发现和解决问题

关键配置

  • 节点数量:3 个(确保奇数节点,仲裁正常)
  • 存储类型:SAN
  • 网络配置:独立的心跳网络,确保故障检测可靠
  • 监控配置:实时监控集群状态、SQL Server 性能和存储性能

场景2:跨数据中心部署

场景描述:某企业需要实现跨数据中心的高可用性,确保在一个数据中心发生灾难时,另一个数据中心能接管业务。

解决方案

  • 配置跨数据中心 FCI 集群,每个数据中心至少一个节点
  • 使用 Stretch Cluster 技术,实现跨数据中心的存储复制
  • 配置适当的心跳检测阈值,适应跨数据中心的网络延迟
  • 结合 Always On Availability Groups,实现更高级别的灾难恢复

关键考虑

  • 网络延迟:确保数据中心之间的网络延迟在可接受范围内(建议 < 5ms)
  • 带宽:确保足够的带宽用于存储复制和集群通信
  • 仲裁配置:使用文件共享见证或云见证,确保跨数据中心仲裁正常

场景3:多实例集群部署

场景描述:某企业有多个 SQL Server 实例,需要实现高可用性,同时优化硬件资源利用率。

解决方案

  • 配置主动-主动集群,在同一个 WSFC 上部署多个 FCI 实例
  • 每个 FCI 实例使用独立的共享存储
  • 交错部署实例,确保资源负载均衡
  • 配置监控,确保每个节点的资源利用率在合理范围内

关键配置

  • 节点数量:根据实例数量和资源需求确定
  • 存储配置:为每个实例分配独立的共享存储
  • 资源限制:为每个实例配置适当的内存和 CPU 限制
  • 负载均衡:根据实例的资源需求,合理分配实例到节点

常见问题(FAQ)

FCI 与 Always On Availability Groups 有什么区别?

答案

  • 保护级别:FCI 提供实例级别的保护,AG 提供数据库级别的保护
  • 存储依赖:FCI 依赖共享存储,AG 不依赖共享存储
  • 故障切换范围:FCI 故障切换整个实例,AG 可以只故障切换特定数据库
  • 扩展性:AG 支持更多的辅助副本(最多 9 个),FCI 节点数量受限于 WSFC(最多 64 个)
  • 使用场景:FCI 适用于需要实例级别高可用性的场景,AG 适用于需要更灵活的数据库级别保护的场景

FCI 需要多少个节点?

答案

  • 最少需要 2 个节点
  • 建议使用奇数个节点(3、5 等),确保 WSFC 仲裁正常
  • 节点数量取决于业务需求、硬件资源和预算

如何备份 FCI 中的数据库?

答案

  • 备份 FCI 中的数据库与备份普通 SQL Server 实例相同
  • 可以使用 SSMS、T-SQL 命令、SQL Server 代理作业或第三方备份工具
  • 备份文件可以存储在本地或网络共享位置
  • 建议将备份文件存储在非共享存储上,避免备份依赖共享存储

FCI 会影响性能吗?

答案

  • FCI 本身对性能的影响很小,主要开销来自:
    • 集群通信和心跳检测
    • 共享存储的 I/O 延迟
    • 资源监控和故障检测
  • 可以通过以下方式减少性能影响:
    • 使用高性能的共享存储
    • 配置独立的心跳网络
    • 合理设置故障检测阈值
    • 优化 SQL Server 实例配置

如何升级 FCI 中的 SQL Server?

答案

  1. 备份所有数据库和系统配置
  2. 确保所有节点的操作系统和补丁级别一致
  3. 滚动升级步骤:
    • 暂停被动节点的集群参与
    • 在被动节点上安装 SQL Server 补丁或升级版本
    • 恢复节点的集群参与
    • 手动故障切换到升级后的节点
    • 在原主节点上安装补丁或升级版本
    • 验证所有节点都已升级完成
  4. 测试故障切换,确保升级后的集群正常工作

FCI 支持哪些 SQL Server 版本?

答案

  • FCI 支持 SQL Server Standard Edition 和 Enterprise Edition
  • Standard Edition 支持最多 2 个节点
  • Enterprise Edition 支持更多节点(SQL Server 2019 支持最多 64 个节点)
  • Express Edition 不支持 FCI

如何配置 FCI 的自动故障切换策略?

答案

  • 打开故障转移集群管理器,导航到 SQL Server 资源组
  • 右键点击 "SQL Server" 资源,选择 "属性"
  • 在 "属性" 对话框中,配置以下参数:
    • 故障转移阈值:在指定时间内允许的最大故障次数
    • 故障转移时间段:计算故障次数的时间窗口
    • 首选所有者:配置资源组的首选运行节点
    • 可能的所有者:配置资源组可以运行的节点

如何监控 FCI 的故障切换?

答案

  • 使用故障转移集群管理器的 "集群事件" 功能查看故障切换事件
  • 配置 Windows 事件日志警报,在发生故障切换时发送通知
  • 使用 SQL Server 代理作业定期检查当前活动节点
  • 使用第三方监控工具,如 SentryOne、Redgate SQL Monitor 等,提供更全面的监控和警报

FCI 与虚拟机高可用性有什么区别?

答案

  • 保护级别:FCI 提供实例级别的保护,虚拟机高可用性提供虚拟机级别的保护
  • 故障切换时间:FCI 故障切换时间通常在 30-60 秒,虚拟机故障切换时间通常在几分钟
  • 存储依赖:FCI 依赖共享存储,虚拟机高可用性可以使用本地存储
  • 复杂度:FCI 配置相对复杂,虚拟机高可用性配置相对简单
  • 灵活性:FCI 提供更细粒度的控制,虚拟机高可用性更适合整个虚拟机的保护

如何迁移 FCI 到新的硬件?

答案

  1. 准备新的硬件节点,安装相同版本的 Windows Server 和 SQL Server
  2. 将新节点加入现有的 WSFC 集群
  3. 配置新节点的存储访问
  4. 逐步将 FCI 实例故障切换到新节点
  5. 验证实例在新节点上正常运行后,移除旧节点
  6. 完成迁移后,更新集群配置和监控设置

最佳实践

架构设计

  1. 使用奇数个节点:确保 WSFC 仲裁正常,避免分裂脑情况
  2. 配置独立的心跳网络:使用专用网络进行节点间的心跳检测,提高故障检测的可靠性
  3. 使用冗余存储:配置 RAID 或存储复制,确保共享存储的高可用性
  4. 合理配置资源依赖关系:确保资源按照正确的顺序启动和停止
  5. 考虑跨数据中心部署:实现地理冗余,提高灾难恢复能力

性能优化

  1. 优化共享存储性能:使用高性能存储设备,确保足够的 IOPS 和带宽
  2. 合理配置 SQL Server 内存:根据节点数量和资源情况,分配适当的内存给 SQL Server
  3. 优化数据库设计和索引:确保数据库设计合理,索引优化
  4. 使用 SSD 存储:考虑使用 SSD 存储提高 I/O 性能
  5. 配置适当的故障检测阈值:根据实际环境调整心跳检测间隔和故障转移阈值

监控与维护

  1. 定期监控集群状态:使用多种监控工具,实时监控集群节点、资源和性能
  2. 配置警报和通知:在集群状态异常或性能下降时,及时发送警报
  3. 定期测试故障切换:每季度至少执行一次手动故障切换测试,验证故障切换流程
  4. 保持补丁一致:确保所有节点的操作系统和 SQL Server 补丁级别一致
  5. 定期备份:即使配置了 FCI,也要定期备份数据库,防止数据丢失

安全性

  1. 使用最小权限原则:为集群服务账户和 SQL Server 服务账户配置最小必要的权限
  2. 配置适当的防火墙规则:仅允许必要的端口和 IP 地址访问集群和 SQL Server
  3. 启用加密连接:为 SQL Server 实例配置 SSL 加密,保护客户端连接
  4. 定期更换密码:定期更换服务账户密码和集群管理员密码
  5. 审计集群活动:启用集群和 SQL Server 审计,记录关键操作和事件

总结

SQL Server 故障转移集群实例(FCI)是一种成熟、可靠的高可用性解决方案,为整个 SQL Server 实例提供保护。它通过自动故障切换和透明的客户端连接,确保业务连续性,适用于各种规模的关键业务系统。

合理的架构设计、正确的配置和定期的监控维护是确保 FCI 高可用性的关键。DBA 团队需要深入理解 FCI 的工作原理、配置步骤和故障处理流程,以便在发生故障时能够快速响应和恢复。

随着技术的发展,FCI 不断增强,支持更多的存储选项、跨平台部署和容器化环境。对于需要实例级别高可用性的场景,FCI 仍然是一个重要的选择,同时可以与 Always On Availability Groups 结合使用,提供更高级别的保护。

通过遵循最佳实践,定期测试和优化,可以确保 FCI 集群的可靠性和稳定性,为业务提供持续可用的数据库服务。