立即分享:

1.理解 SQL Server 故障转移集群

1.1 它是什么以及它是如何工作的

SQL Server 故障转移集群是一个 高可用性解决方案 保持 SQL Server 即使服务器发生故障,实例也能继续运行。它通过在多个物理服务器(称为节点)上运行同一实例来实现这一点,因此,如果一个服务器宕机,另一个服务器会自动接管,无需客户端进行人工干预或更改。

1.2 主要组件和架构

A SQL Server 故障转移集群实例由五个核心组件构成,每个组件都扮演着不同的角色。它们共同构成一个单一的逻辑单元,客户端可以像与单个服务器交互一样与该单元进行交互。

  • 节点: 参与集群的物理服务器。在任何给定时间,只有一个节点处于活动状态并运行。 SQL Server 例如;其余节点待命并监控活动节点的健康状况。
  • 共享存储: 存储卷(SAN、iSCSI、Storage Spaces Direct 或 SMB 文件共享)可供所有节点同时访问。由于每个节点都从同一存储卷进行读写操作,因此节点之间无需数据复制,无论哪个节点接管,相同的数据库文件都能立即可用。
  • 虚拟网络名称和虚拟IP地址: 无论当前哪个物理节点处于活动状态,客户端始终连接到同一个稳定的身份。发生故障转移时,虚拟网络名称和 IP 地址会在新的活动节点上重新注册,从而使应用程序感觉不到切换过程。
  • Windows Server故障转移群集(WSFC): WSFC是支撑所有功能的底层平台。它通过心跳网络持续监控节点和资源的健康状况,管理资源组的所有权,并在检测到故障时协调故障转移过程。
  • 法定人数: WSFC 内部的一种投票机制可以防止脑裂情况的发生。每个节点都对集群健康状况进行投票;对于偶数节点集群,见证磁盘或文件共享会提供额外的投票。只有当多数投票有效时,集群才会保持在线状态,从而确保两个孤立的节点组永远不会同时声称拥有集群的所有权。 SQL Server 实例。

这些组件以清晰的方式协同工作rarWSFC 管理节点并强制执行仲裁,所有节点共享对同一存储的访问权限,虚拟网络名称为客户端提供跨所有节点的统一连接点。当某个节点发生故障时,WSFC 会检测到心跳丢失,确认仲裁仍然有效,并将资源组所有权(包括虚拟网络名称、虚拟 IP 和存储)转移到备用节点,从而恢复网络。 SQL Server 恢复在线状态。整个过程自动完成,客户端无需进行任何更改。

概述 SQL Server 故障转移集群架构

1.3 FCI 与 Always On 可用性组

SQL Server 提供两种基于 WSFC 的 Always On 技术。主要区别如下:

  • 故障转移集群实例 (FCI): 实例级高可用性 (HA)。所有数据库同时故障转移。需要共享存储。节点间无数据复制。无内置灾难恢复 (DR) 功能。
  • Always On 可用性组 (AG): 数据库级高可用性。基于日志的复制,将数据复制到辅助副本。无需共享存储。同时支持高可用性和灾难恢复。

使用 FCI 可在现有共享存储上实现实例级故障转移。当需要灾难恢复或可读辅助存储时,可将 FCI 与 AG 结合使用。

1.4 优点和局限性

产品优势

  • 硬件、操作系统或服务发生故障时自动进行故障转移;
  • 无需重新配置客户端;
  • 通过间接检查点实现可预测的故障转移时间;
  • 灵活的共享存储方案。

限制:

  • 除非存储本身具有冗余性,否则共享存储就是一个单点故障;
  • 只有一个节点运行 SQL Server 一次只能读取一次,因此没有读取负载均衡;
  • 不与AG配对,就没有内置DR功能。

2. 先决条件和要求

2.1 硬件和软件

  • 至少两台物理服务器,配备相同或等效的硬件、64 位处理器和经过故障转移集群认证的存储控制器。
  • Windows Server 2016、2019 或 2022(标准版或数据中心版)。所有节点必须运行相同的操作系统版本、版本号和累积更新级别。
  • SQL Server 标准版或企业版。所有节点必须运行相同的版本。 SQL Server 版本和补丁级别。

2.2 网络和域要求

  • 所有节点必须属于同一个Active Directory域。不支持工作组集群、多域集群和只读域控制器。
  • 为所有适配器分配静态 IP 地址。每个节点至少分配一个网络接口卡 (NIC) 用于集群心跳流量。配置域名系统 (DNS) 以进行名称解析。
  • 安装帐户需要对所有节点拥有本地管理员权限; 创建计算机对象 在 Active Directory 中拥有权限。

2.3 共享存储选项

SQL Server 故障转移集群支持多种共享存储技术。请选择最适合您的基础架构和预算的技术:

  • SAN(光纤通道或 iSCSI): Most 通用要求:所有节点必须访问相同的逻辑单元号 (LUN)。使用多路径 I/O (MPIO) 以避免单路径故障。
  • 存储空间直连(S2D): 本地连接的 NVMe 或 SSD 存储池,可跨节点使用。需要 Windows Server 2016 数据中心版或更高版本。
  • 服务器消息块 (SMB) 文件共享和集群共享卷 (CSV): 支持自 SQL Server 2014年至今。

将所有集群磁盘格式化为基本 NT 文件系统(NTFS避免在集群节点上挂载卷。

3. 集群规划

安装前,需要规划节点配置类型和仲裁设置,这直接影响集群可靠性和硬件性能。ost:

3.1 配置类型

SQL Server 故障转移集群支持四种节点配置,每种配置在简易性、硬件兼容性等方面各有优劣。ost备用容量和备用容量有所不同。

  • 类型 1:活动/待机。 1 个 FCI,2 个节点。节点 1 为活动节点;节点 2 为备用节点。备用节点持续监测活动节点的心跳信号,并在活动节点发生故障时接管 FCI。这是最简单的配置,也是最基本的配置。ost 生产中常见。
  • 类型 2:主动/主动。 两个 FCI 共享两个物理节点。节点 1 是 FCI 1 的活动节点,同时也是 FCI 2 的备用节点;节点 2 是 FCI 2 的活动节点,同时也是 FCI 1 的备用节点。这两个节点互为备用——在正常运行情况下,它们都承载着实际的工作负载。如果其中一个节点发生故障,则幸存的节点将接管故障节点的 FCI,同时继续运行自身的 FCI。因此,每个节点的容量必须足以处理两个 FCI 的总工作负载。
  • 类型 3:N+1。 N 个 FCI 共享 N+1 个节点。每个 FCI 有一个活动节点;所有 N 个 FCI 共享一个公共备用节点。该共享备用节点必须能够独立承担任何一个故障活动节点的全部工作负载。
  • 类型 4:N+M。 N 个 FCI 共享 N+M 个节点。每个 FCI 有一个活动节点;所有 N 个 FCI 共享 M 个备用节点。这 M 个备用节点共同承担所有 N 个活动节点的故障转移任务,将潜在负载分散到更大的备用容量上,并降低了每个节点的硬件需求(相比 N+1 架构)。

4 SQL Server 故障转移集群配置类型

3.2 法定人数准则

法定人数决定集群是否拥有足够多的健康成员以保持在线状态。设置和维护法定人数时,请牢记以下准则:

  • 配置法定人数总票数为奇数,以保证在出现分裂情况时获得多数票,并防止脑裂。
  • 对于双节点集群,请使用 节点和磁盘多数 使用见证磁盘作为第三张投票盘。见证磁盘不需要驱动器号。
  • 如果法定人数为 lost 完全强制执行法定人数,作为恢复幸存节点的最后手段,然后在恢复生产之前立即重新配置。

4. 安装 Windows Server 故障转移群集 (WSFC)

4.1 准备共享存储

在创建集群之前,请先连接并配置所有共享存储。

  1. 将所有存储 LUN 物理连接或配置到每个集群节点。
  2. 点击 仅第一个节点,开放 “磁盘管理”将每个磁盘联机,初始化,并创建一个 NTFS 创建一个带有驱动器号的卷。创建一个较小的卷(1-2 GB)作为见证磁盘——不需要驱动器号。
  3. 在每个剩余节点上,打开 “磁盘管理” 只需将磁盘联机即可。请勿重新初始化或重新格式化。如果驱动器号与第一个节点不匹配,请手动分配驱动器号。

使用磁盘管理工具准备共享驱动器 SQL Server 故障转移集群

4.2 安装故障转移集群功能并进行验证

在每个节点上安装故障转移集群功能,然后在创建集群之前进行验证。

  1. 在每个节点上,打开 服务器管理器 -> 添加角色和功能 -> 产品特性, 选择 故障转移群集和点击 安装如果提示,请重启。PowerShell 替代方案:
    Install-WindowsFeature -Name Failover-Clustering -IncludeManagementTools
  2. 在任意一个节点上,打开 故障转移集群管理器 -> 验证配置添加所有节点 host命名并运行所有测试。PowerShell 替代方案:
    Test-Cluster -Node Node1, Node2
  3. 请先解决验证报告中的所有错误,然后再继续操作。如果未使用存储空间直连 (S2D),则可以忽略 S2D 警告。

4.3 创建 WSFC

验证通过后,创建集群并验证其配置。

  1. In 故障转移集群管理器,单击“ 创建集群添加所有节点 host输入集群名称和静态虚拟 IP 地址,然后单击 下一篇PowerShell 的替代方案:
    New-Cluster -Name ClusterName -Node Node1, Node2 -StaticAddress x.x.x.x
  2. 如果域权限受到限制,请在运行此步骤之前,请 Active Directory 管理员预先准备集群名称计算机对象。
  3. 创建完成后,确认法定人数显示 节点和磁盘多数 已分配证人磁盘。
  4. 存放 -> 磁盘重命名每个集群磁盘以反映其角色(例如, SQL_DATA, SQL_LOG, 见证人)。 下 网络将每个集群网络重命名,以反映其流量类型。

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

5.1 选择安装方法

SQL Server 安装程序提供了两种安装故障转移集群实例的方法。请选择与您的环境相匹配的方法。

  • 集成安装(添加节点): 在第一个节点上安装一个完整的、可运行的FCI,然后使用以下命令添加每个后续节点: 添加节点 选项。更简单,推荐用于 most 部署。
  • 高级/企业版安装: 运行 准备故障转移集群 首先在所有节点上运行,然后再运行 完整的故障转移集群 在拥有共享磁盘的节点上执行此操作。对于需要并行准备所有节点的大型多节点部署,请在提交之前使用此方法。

5.2 首次节点安装

运行 SQL Server 在第一个节点上设置,使用集成方法创建 FCI。

  1. 运行 的Setup.exe 以管理员身份选择。 安装 -> 全新发布 SQL Server 故障转移集群安装.
  2. On 功能选择,选择 数据库引擎服务管理工具 – 基础版.
  3. On 实例配置, 输入 SQL Server 网络名称——客户端用于连接的虚拟名称。
  4. On 集群资源组请输入一个描述性的组名称。
  5. On 集群磁盘选择选择用于数据、日志和备份文件的共享磁盘。
  6. On 集群网络配置为每个子网分配一个 IP 地址。设置过程会自动为多子网集群设置 OR 依赖关系。
  7. On 服务器配置设置服务帐户。使用组托管服务帐户 (gMSA) 实现自动密码管理;使用域帐户作为备用方案。
  8. On 数据库引擎配置选择身份验证模式并设置数据目录路径。将系统数据库、用户数据库、日志、备份和 TempDB 放置在不同的磁盘上。
  9. 查看摘要并点击 安装.

5.3 添加剩余节点

第一个节点完成后,将每个额外的节点添加到 FCI 中。

  1. 在附加节点上运行 的Setup.exe 并选择 安装 -> 将节点添加到 SQL Server 故障转移集群.
  2. On 集群节点配置选择现有的 FCI 实例。
  3. On 集群网络配置为该节点的子网分配 IP 地址。
  4. On 服务帐号确认服务帐户密码与第一个节点上设置的密码一致,然后单击 安装.
  5. 对每个额外的节点重复上述步骤。

6。 Post安装:配置和测试

6.1必备 SQL Server 个人设置

FCI运行后立即应用这些设置。

  1. 服务器最大内存 封顶 SQL Server为操作系统和集群服务预留足够的内存和空间:
    EXEC sp_configure 'show advanced options', 1; RECONFIGURE;
    EXEC sp_configure 'max server memory', <value_in_MB>; RECONFIGURE;
  2. 最大并行度 (MAXDOP) 基于您的非统一内存访问(NUMA)拓扑结构。
  3. 将 TempDB 移至专用卷以隔离其 I/O:
    USE master;
    ALTER DATABASE tempdb MODIFY FILE (NAME = tempdev, FILENAME = 'D:\TempDB\tempdb.mdf');
    ALTER DATABASE tempdb MODIFY FILE (NAME = templog, FILENAME = 'D:\TempDB\templog.ldf');

    住宅tarthe SQL Server 文件迁移服务生效。

6.2 测试故障转移

在将集群迁移到生产环境之前,请验证故障转移行为。

  1. In 故障转移集群管理器,右键单击 SQL Server FCI角色和选择 移动 -> 选择节点选择辅助节点并单击 OK.
  2. 等待角色状态显示 运行 在新节点上。
  3. 从客户端计算机连接到 SQL Server 使用虚拟网络名称并确认连接成功,无需更改连接字符串。
  4. 查看 SQL Server 错误日志和 Windows 集群事件日志,以确认故障转移是否正常。 tar获取恢复时间目标(RTO)。

7. 管理、最佳实践和故障排除

7.1 故障转移策略和监控

  • In 故障转移集群管理器,右键单击 SQL Server FCI角色 -> 物业 -> 故障转移 设置故障级别和健康检查超时时间。对于负载较高的服务器,应增加超时时间以避免误报故障转移。
  • 通过以下方式监控集群健康状况 故障转移集群管理器Windows事件查看器, SQL Server 错误日志和 SQL Server 活动监视器 用于实时查看资源和会话。
  • 自动故障转移后,请检查 SQL Server 诊断ostic 日志(与错误日志一起存储)用于记录事件发生前组件的状态。 SQL Server 扩展活动 详细记录故障转移窗口期间的资源健康状况和错误情况。

7.2个最佳实践

  • 所有节点均使用静态 IP 地址。动态 Host 故障转移期间配置协议 (DHCP) 租约到期会延长停机时间并使 DNS 注册复杂化。
  • 始终保持法定人数为奇数。如果添加节点导致票数变为偶数,则添加见证人。
  • 在任何硬件变更、驱动程序更新或操作系统配置发生重大变更后,请运行集群验证。
  • 事先在所有节点上分配相同的驱动器号 SQL Server 安装过程中,不匹配项会阻止安装,且后续很难修复。
  • 安装日之前,请务必联系您的 Active Directory 管理员。计算机对象创建权限是……ost 常见的安装前障碍。
  • 保持经过测试 SQL Server 备份 即使部署了 FCI,该策略仍然不可行。FCI 只能防止节点故障,而无法防止数据损坏、意外删除或存储级丢失——定期备份和恢复才是应对这些情况的唯一保障。

7.3 常见问题及解决方法

  • Active Directory 权限错误: 请您的 Active Directory (AD) 管理员预先配置集群计算机对象,或授予其相应权限。 创建计算机对象阅读所有属性 到安装帐户。
  • 共享存储对节点不可见: 住宅tarthe iSCSI Tar获取服务器 存储 h 上的服务ost然后从每个节点上的 iSCSI 发起程序重新连接。验证 LUN 掩码和区域划分。
  • 驱动程序或更新级别的验证警告: 应用最新的累积更新 Windows更新 在重新运行验证之前,对所有节点执行此操作。
  • 节点故障后 WSFC 离线: 使用强制法定人数使幸存节点上线, 恢复所有数据库 受故障影响后,恢复仲裁,然后重新配置,再恢复生产环境。运行 DBCC 检查数据库 对每个已恢复的数据库进行完整性检查,确认无误后再恢复正常工作量。
  • 错误的自动故障转移: 增加 FCI 角色属性中的健康检查超时时间。检查诊断。ostic 日志用于区分真正的故障和瞬态资源峰值。

8. 常见问题解答

问:最少需要多少个节点? SQL Server 故障转移集群?

答:最少需要两个节点。其中一个作为活动节点运行。 SQL Server 实例;另一个是备用。Most 生产部署tar采用双节点主动/被动配置。

问:有 SQL Server FCI需要共享存储吗?

答:是的。与 Always On 可用性组不同,故障转移实例 (FCI) 要求所有节点访问相同的存储——可以是 SAN(光纤通道或 iSCSI)、存储空间直通 (Storage Spaces Direct) 或 SMB 文件共享。正是这种共享存储使得故障转移后,任何节点都能访问相同的数据库文件。

问:什么 SQL Server 哪些版本支持故障转移集群?

A: SQL Server 标准版和企业版支持 FCI,而快速版和开发版不支持。企业版支持更多节点,并提供额外的高可用性功能,例如维护期间的在线索引操作。

问:可以 SQL Server FCI 和 Always On 可用性组可以一起使用吗?

A:是的。FCI节点可以……ost 可用性组副本,可同时提供来自 FCI 的实例级高可用性 (HA) 和来自可用性组的数据库级灾难恢复 (DR)。但是,可用性组与 FCI 之间的自动故障转移功能无法实现。ost不支持 ed 副本——在该配置中仅支持手动故障转移。

问:一个 SQL Server 故障转移通常需要多长时间?

答:故障转移时间取决于实例恢复之前必须写入磁盘的缓冲区缓存中的脏页数量。tar在新节点上执行 ts。启用间接检查点(默认来自 SQL Server 2012年起),脏页被装订起来,并且most 故障转移可在 30 秒内完成。实际恢复时间目标 (RTO) 取决于工作负载、存储速度和数据库恢复时间。

问:什么是法定人数,它为什么重要?

答:仲裁是 WSFC 用来确定集群是否拥有足够健康成员以保持在线并处理请求的机制。它防止出现脑裂情况,即两个孤立的节点组各自认为自己是集群的权威所有者。 SQL Server 例如,如果法定人数为 lostWSFC 将集群离线以保护数据完整性。

问:可以 SQL Server FCI 能否安装在工作组集群上(不使用 Active Directory)?

答:不可以。 SQL Server FCI 要求所有节点都必须是同一个 Active Directory 域的成员。工作组集群、多域集群以及包含只读域控制器的集群均不受支持。

问:发生故障转移时,客户端连接会发生什么情况?

A:与以下对象的活动连接 SQL Server 故障转移期间实例会被丢弃。实例在新节点上线后,虚拟网络名称和虚拟 IP 地址会在该节点重新注册,连接字符串中使用重试逻辑的客户端无需任何配置更改即可自动重新连接。

问:我能否在现有节点中添加或删除节点? SQL Server 故障转移集群?

A:是的。跑 SQL Server 在任意节点上进行设置并选择 将节点添加到 SQL Server 故障转移集群 添加节点,或 从节点中移除节点 SQL Server 故障转移集群 移除一个节点。添加或移除节点不会导致集群中其他节点停机。

问:计划内故障转移和自动故障转移有什么区别?

答:计划内故障转移是由管理员手动发起的,通常用于维护,例如打补丁或更换硬件。它允许 SQL Server 在转移所有权之前,系统会清除脏页并正常关机,从而最大限度地减少停机时间。当健康监控检测到活动节点发生故障时,WSFC 会触发自动故障转移,恢复时间取决于所需的崩溃恢复量。

问:如何恢复 SQL Server 如果整个 WSFC 离线,故障转移集群会如何运作?

A:如果法定人数为 lost 集群无法tar通常情况下,使用强制仲裁将幸存节点以非容错状态重新上线。在幸存节点上运行以下 PowerShell 命令: Start-ClusterNode -ForcQuorum集群上线后,恢复数据库,验证数据完整性,然后与剩余节点重新配置仲裁,之后再恢复生产。

问:我是否应该在每次运行集群验证向导之前都运行它? SQL Server 安装?

答:是的,而且在进行任何重大硬件或配置更改后也需要进行验证。微软仅支持通过所有验证测试且无错误的故障转移群集配置。跳过验证可能会导致运行不受支持的配置,该配置在故障情况下可能会出现不可预测的行为。

9. 结论

SQL Server 故障转移集群通过 WSFC 提供透明的实例级高可用性,支持自动故障转移,无需客户端重新配置。当共享存储可用且需要实例上的所有数据库作为一个整体进行故障转移时,故障转移集群是理想之选。对于还需要灾难恢复或辅助读取工作负载的环境,可将故障转移集群与 Always On 可用性组结合使用,以同时满足这两种需求。

案例


关于作者

袁盛 是一位高级数据库管理员 (DBA),拥有超过 10 年的 SQL Server 环境和企业数据库管理。他成功解决了金融服务、医疗保健和制造等行业的数百个数据库恢复场景。

袁专长于 SQL Server 数据库恢复、高可用性解决方案和性能优化。他拥有丰富的实践经验,包括管理多TB数据库、实施Always On可用性组以及为关键业务系统开发自动备份和恢复策略。

通过他的技术专长和实践方法,袁致力于创建全面的指南,帮助数据库管理员和 IT 专业人员解决复杂的 SQL Server 高效应对挑战。他始终掌握最新 SQL Server 版本和微软不断发展的数据库技术,定期测试恢复场景以确保他的建议反映现实世界的最佳实践。

有关于的问题 SQL Server 恢复或需要额外的数据库故障排除指导?袁欢迎 反馈和建议 用于改进这些技术资源。

立即分享: