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 集群的可靠性和稳定性,为业务提供持续可用的数据库服务。