适用于:SQL Server - 仅限 Windows
Always On 可用性组是在 SQL Server 2012 (11.x) 中引入的高可用性和灾难恢复解决方案,它要求 Windows Server 故障转移群集 (WSFC)。 此外,尽管 AlwaysOn 可用性组不依赖于 SQL Server 故障转移群集,但可以使用故障转移群集实例(FCI)为可用性组托管可用性副本。 了解每个群集技术的角色以及设计 AlwaysOn 可用性组环境时需要注意哪些注意事项非常重要。
注意
有关 AlwaysOn 可用性组概念的信息,请参阅 什么是 AlwaysOn 可用性组?
Windows Server 故障转移群集和可用性组
部署 Always On 可用性组 需要 Windows Server 故障转移群集 (WSFC)。 若要为 Always On 可用性组 启用,SQL Server 实例必须驻留在某一 WSFC 节点上,并且该 WSFC 和节点必须处于联机状态。 此外,给定可用性组的每个可用性副本都必须位于相同 WSFC 的不同节点上。 唯一的例外是在迁移到另一个 WSFC 时,此时一个可用性组可能会暂时跨两个群集。
Always On 可用性组 依赖 Windows Server 故障转移群集 (WSFC) 来监视和管理属于给定可用性组的可用性副本的当前角色,以及确定故障转移事件如何影响可用性副本。 为您创建的每个可用性组创建一个 WSFC 资源组。 WSFC 监视此资源组,以评估主要副本的运行状况。
针对 Always On 可用性组 的仲裁基于 WSFC 中的所有节点,而与给定群集节点是否托管任何可用性副本无关。 与数据库镜像相反,在 Always On 可用性组中没有见证服务器角色。
WSFC 的总体运行状况由群集中节点的仲裁投票决定。 如果 WSFC 因计划外灾难或由于持续的硬件或通信故障而脱机,则需要管理员手动干预。 Windows Server 或 WSFC 管理员将需要“强制仲裁”,然后在非容错配置中将仍有效的群集节点重新变为联机状态。
重要
Always On 可用性组 注册表项是 WSFC 的子项。 如果删除后重新创建了 WSFC,则必须在其原始 WSFC 上托管可用性副本的每个 Always On 可用性组 实例上都禁用然后重新启用 SQL Server 功能。
有关在 WSFC 节点上运行 SQL Server 以及有关 WSFC 仲裁的信息,请参阅 使用 SQL Server 的 Windows Server 故障转移群集。
SQL Server 故障转移群集实例(FCI)和可用性组
可以通过将 SQL Server、FCI 连同 WSFC 一起实现,在服务器-实例级别设置第二层故障转移。 SQL Server 或 FCI 实例的独立实例可以托管可用性副本。 对于某一给定可用性组,一个 FCI 伙伴只能承载一个副本。 当某一可用性副本正在一个 FCI 上运行时,可用性组的可能所有者列表将只包含活动的 FCI 节点。
AlwaysOn 可用性组不依赖于任何形式的共享存储。 但是,如果使用 SQL Server 故障转移群集实例 (FCI) 来承载一个或多个可用性副本,每个 FCI 将需要标准 SQL Server 故障转移群集实例安装所要求的共享存储。
有关其他先决条件的详细信息,请参阅 AlwaysOn 可用性组(SQL Server)的先决条件、限制和建议。
故障转移群集实例和可用性组的比较
无论 FCI 中的节点数是多少,整个 FCI 都只承载可用性组内的一个副本。 下表说明 FCI 中的节点和可用性组内的副本的概念区别。
| FCI 内的节点 | 可用性组内的副本 | |
|---|---|---|
| 使用 WSFC | 是 | 是 |
| 保护级别 | 实例 | 数据库 |
| 存储类型 | 共享 | 非共享 尽管可用性组中的副本不共享存储,但 FCI 托管的副本使用该 FCI 所需的共享存储解决方案。 该存储解决方案仅由 FCI 内的节点共享,不在可用性组的副本之间共享。 |
| 存储解决方案 | 直连、SAN、装入点、SMB | 取决于节点类型 |
| 可读次要副本 | 否* | 是 |
| 适用的故障转移策略设置 | WSFC 仲裁 FCI 特有的 可用性组设置** |
WSFC 仲裁 可用性组设置 |
| 故障转移资源 | 服务器、实例和数据库 | 仅数据库 |
*虽然可用性组中的同步辅助副本始终在其各自的 SQL Server 实例上运行,但 FCI 中的辅助节点实际上尚未启动各自的 SQL Server 实例,因此不可读。 在 FCI 中,仅在 FCI 故障转移期间资源组所有权转移给辅助节点时,辅助节点才启动其 SQL Server 实例。 但是,在活动 FCI 节点上,当 FCI 托管的数据库属于可用性组时,如果本地可用性副本作为可读次要副本运行,则数据库是可读的。
**可用性组的故障转移策略设置适用于所有副本,无论是托管在独立实例还是 FCI 实例中。
在 FCI 上托管可用性副本的注意事项
重要
如果计划在 SQL Server 故障转移群集实例(FCI)上托管可用性副本,请确保 Windows Server 2008 主机节点满足故障转移群集实例(FCI)的 AlwaysOn 先决条件和限制。 有关详细信息,请参阅针对 AlwaysOn 可用性组的先决条件、限制和建议 (SQL Server)。
SQL Server 故障转移群集实例(FCI)不支持可用性组自动故障转移,因此 FCI 主机只能为手动故障转移配置任何可用性副本。
可能需要将 WSFC 配置为包含在所有节点上不可用的共享磁盘。 例如,考虑跨两个数据中心、包含三个节点的 WSFC。 其中两个节点在主数据中心托管 SQL Server FCI,并有权访问同一共享磁盘。 第三个节点在不同的数据中心托管 SQL Server 的独立实例,并且无法访问主数据中心的共享磁盘。 如果 FCI 托管主副本,并且独立实例托管辅助副本,则此 WSFC 配置支持部署可用性组。
选择 FCI 来托管给定可用性组的可用性副本时,请确保 FCI 故障转移无法导致单个 WSFC 节点尝试为同一可用性组托管两个可用性副本。
下面的示例方案说明此配置是如何导致问题的:
- 使用两个节点(
NODE01和NODE02)配置 WSFC。 - 在
fciInstance1和NODE01上安装 SQL Server 故障转移群集实例NODE02,其中NODE01是fciInstance1的当前所有者。 - 打开
NODE02后,安装另一个 SQL Server 实例,Instance3即独立实例。 - 在
NODE01上,为 AlwaysOn 可用性组启用fciInstance1。 在NODE02上,为 AlwaysOn 可用性组启用Instance3。 然后,设置一个可用性组,fciInstance1托管主副本,Instance3托管辅助副本。 - 在某些时候,
fciInstance1不可用NODE01,WSFC 会导致故障转移fciInstance1到NODE02。 在故障转移后,fciInstance1将是启用了 Always On 可用性组的实例并且在NODE02上以主角色运行。 但是,Instance3现在驻留在与fciInstance1相同的 WSFC 节点上。 这违反了 Always On 可用性组 约束。
若要更正此方案出现的问题,独立实例Instance3必须驻留在同一 WSFC NODE01 中的另一个节点上,NODE02
有关 SQL Server FCI 的详细信息,请参阅 AlwaysOn 故障转移群集实例(SQL Server)。
对可用性组使用 WSFC 管理器的限制
请勿使用故障转移群集管理器作可用性组。 例如:
不要在可用性组的群集服务(资源组)中添加或删除资源。
请勿更改任何可用性组属性,例如可能的所有者和首选所有者。 这些属性由可用性组自动设置。
请勿使用故障转移群集管理器将可用性组移动到不同的节点或故障转移可用性组。 故障转移群集管理器不知道可用性副本的同步状态,这样做可能会导致停机时间延长。 必须使用 Transact-SQL 或 SQL Server Management Studio。
警告
使用故障转移群集管理器将托管可用性组的 故障转移群集实例 移动到 已 托管同一可用性组副本的节点可能会导致可用性组副本丢失,从而阻止它在目标节点上联机。 故障转移群集的单个节点不能为同一可用性组托管多个副本。 有关如何发生这种情况以及如何恢复的详细信息,请参阅博客 副本在可用性组中意外删除。
相关内容
- 什么是 Always On 可用性组?
- 启用或禁用 AlwaysOn 可用性组功能
- 监视可用性组 (Transact-SQL)
- AlwaysOn 故障转移群集实例 (SQL Server)
- 将 SQL Server 的 Windows 故障转移群集(可用性组或 FCI)配置为有限安全
- SQL Server AlwaysOn 团队博客:SQL Server AlwayOn 团队官方博客
- CSS SQL Server 工程师博客
- AlwaysOn 体系结构指南:使用故障转移群集实例和可用性组构建高可用性和灾难恢复解决方案
- Microsoft SQL Server Always On 解决方案指南,以实现高可用性和灾难恢复