外观
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 之前,需要确保满足以下条件:
- 所有节点的 Windows Server 版本和补丁级别一致
- 所有节点的 SQL Server 版本和补丁级别一致
- 所有节点已加入同一个 Active Directory 域
- 已配置共享存储,所有节点均可访问
- 已配置适当的网络环境,包括公共网络和私有网络
- 已创建具有适当权限的服务账户
详细配置步骤
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,Node22. 配置共享存储
- 将共享存储设备连接到所有节点
- 在故障转移集群管理器中,导航到 "存储" → "磁盘"
- 右键点击可用磁盘,选择 "添加到集群共享卷" 或 "添加到集群"
- 验证所有节点都能访问共享存储
3. 安装 SQL Server 故障转移集群实例
在第一个节点上安装:
- 运行 SQL Server 安装程序
- 选择 "新建 SQL Server 故障转移集群安装"
- 配置实例名称、虚拟网络名称和虚拟 IP 地址
- 选择共享存储位置
- 配置服务账户和权限
- 完成安装
在第二个节点上添加节点:
- 运行 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 会自动检测到故障,并触发故障切换到健康节点。自动故障切换的条件:
- 活动节点不可用(如硬件故障、操作系统崩溃或网络故障)
- WSFC 仲裁正常,集群可以做出决策
- 至少有一个健康节点可用
- 共享存储可访问
手动故障切换
手动故障切换用于计划内维护,如操作系统升级、硬件维护等。步骤如下:
- 打开 "故障转移集群管理器"
- 导航到 SQL Server 资源组
- 右键点击资源组,选择 "移动" → "选择节点"
- 选择目标节点,点击 "确定"
- 监控故障切换过程,确保所有资源在目标节点上成功启动
- 验证 SQL Server 实例在新节点上正常运行
强制故障切换
在紧急情况下,当主节点完全不可用且仲裁丢失时,可以执行强制故障切换:
powershell
# 使用 PowerShell 强制故障切换
Move-ClusterGroup -Name "SQL Server (InstanceName)" -Node Node2 -Force注意:强制故障切换可能导致数据丢失,仅在极端情况下使用。
故障切换流程
- WSFC 检测到活动节点故障
- WSFC 将 SQL Server 资源组从故障节点离线
- WSFC 将资源组移动到健康节点
- WSFC 在健康节点上依次启动以下资源:
- 共享存储
- 虚拟 IP 地址
- 虚拟网络名称
- SQL Server 服务
- SQL Server 代理服务
- 客户端连接自动重定向到新的活动节点
监控与管理
监控工具
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 版本
- 备份所有数据库和系统配置
- 升级被动节点
- 手动故障切换到升级后的节点
- 升级原来的主动节点
- 验证升级后的实例正常运行
4. 更换共享存储
- 准备新的共享存储设备
- 将新存储添加到集群
- 使用 SQL Server 备份和还原或存储迁移工具迁移数据
- 更新 SQL Server 实例的存储路径
- 移除旧的共享存储
生产场景应用
场景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?
答案:
- 备份所有数据库和系统配置
- 确保所有节点的操作系统和补丁级别一致
- 滚动升级步骤:
- 暂停被动节点的集群参与
- 在被动节点上安装 SQL Server 补丁或升级版本
- 恢复节点的集群参与
- 手动故障切换到升级后的节点
- 在原主节点上安装补丁或升级版本
- 验证所有节点都已升级完成
- 测试故障切换,确保升级后的集群正常工作
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 到新的硬件?
答案:
- 准备新的硬件节点,安装相同版本的 Windows Server 和 SQL Server
- 将新节点加入现有的 WSFC 集群
- 配置新节点的存储访问
- 逐步将 FCI 实例故障切换到新节点
- 验证实例在新节点上正常运行后,移除旧节点
- 完成迁移后,更新集群配置和监控设置
最佳实践
架构设计
- 使用奇数个节点:确保 WSFC 仲裁正常,避免分裂脑情况
- 配置独立的心跳网络:使用专用网络进行节点间的心跳检测,提高故障检测的可靠性
- 使用冗余存储:配置 RAID 或存储复制,确保共享存储的高可用性
- 合理配置资源依赖关系:确保资源按照正确的顺序启动和停止
- 考虑跨数据中心部署:实现地理冗余,提高灾难恢复能力
性能优化
- 优化共享存储性能:使用高性能存储设备,确保足够的 IOPS 和带宽
- 合理配置 SQL Server 内存:根据节点数量和资源情况,分配适当的内存给 SQL Server
- 优化数据库设计和索引:确保数据库设计合理,索引优化
- 使用 SSD 存储:考虑使用 SSD 存储提高 I/O 性能
- 配置适当的故障检测阈值:根据实际环境调整心跳检测间隔和故障转移阈值
监控与维护
- 定期监控集群状态:使用多种监控工具,实时监控集群节点、资源和性能
- 配置警报和通知:在集群状态异常或性能下降时,及时发送警报
- 定期测试故障切换:每季度至少执行一次手动故障切换测试,验证故障切换流程
- 保持补丁一致:确保所有节点的操作系统和 SQL Server 补丁级别一致
- 定期备份:即使配置了 FCI,也要定期备份数据库,防止数据丢失
安全性
- 使用最小权限原则:为集群服务账户和 SQL Server 服务账户配置最小必要的权限
- 配置适当的防火墙规则:仅允许必要的端口和 IP 地址访问集群和 SQL Server
- 启用加密连接:为 SQL Server 实例配置 SSL 加密,保护客户端连接
- 定期更换密码:定期更换服务账户密码和集群管理员密码
- 审计集群活动:启用集群和 SQL Server 审计,记录关键操作和事件
总结
SQL Server 故障转移集群实例(FCI)是一种成熟、可靠的高可用性解决方案,为整个 SQL Server 实例提供保护。它通过自动故障切换和透明的客户端连接,确保业务连续性,适用于各种规模的关键业务系统。
合理的架构设计、正确的配置和定期的监控维护是确保 FCI 高可用性的关键。DBA 团队需要深入理解 FCI 的工作原理、配置步骤和故障处理流程,以便在发生故障时能够快速响应和恢复。
随着技术的发展,FCI 不断增强,支持更多的存储选项、跨平台部署和容器化环境。对于需要实例级别高可用性的场景,FCI 仍然是一个重要的选择,同时可以与 Always On Availability Groups 结合使用,提供更高级别的保护。
通过遵循最佳实践,定期测试和优化,可以确保 FCI 集群的可靠性和稳定性,为业务提供持续可用的数据库服务。
