针对 Always On 可用性组的先决条件、限制和建议
适用于:SQL Server
本文介绍部署 Always On 可用性组 时的注意事项,包括针对主机、Windows Server 故障转移群集 (WSFC)、服务器实例和可用性组的先决条件、限制和建议。 对于上述各组件,还指出了安全注意事项和所需权限(如果有)。
重要
在部署 Always On 可用性组之前,强烈建议您阅读本主题的每个章节。
支持可用性组的 .NET 修补程序
可能需要安装下表中标识的其他 .NET 修补程序,具体取决于与 Always On 可用性组一起使用的 SQL Server 组件和功能。 可以按任意顺序安装这些修补程序。
依赖功能 | 修补程序 | 链接 |
---|---|---|
Reporting Services | .NET 3.5 SP1 修补程序添加对读意向、只读和多子网故障转移的 SQL Client for AlwaysOn 功能的支持。 此修补程序需要安装在每个 Reporting Services 报表服务器上。 | KB 2654347:.NET 3.5 SP1 修补程序添加对 AlwaysOn 功能的支持 |
清单:要求(Windows 系统)
为了支持 Always On 可用性组 功能,请确保要参与一个或多个可用性组的每台计算机都满足以下基本要求:
要求 | 链接。 |
---|---|
确保此系统不是域控制器。 | 域控制器上不支持可用性组。 |
确保每台计算机在支持的 Windows Server 版本上运行 | 以下各项的硬件和软件要求: - SQL Server 2022 - SQL Server 2019 - SQL Server 2017 - SQL Server 2016 |
确保每台计算机都是 WSFC 中的一个节点。 | Windows Server 故障转移群集与 SQL Server |
确保 WSFC 包含足够的节点来支持可用性组配置。 | 群集节点可以为一个可用性组托管一个副本。 同一个节点不能托管来自同一可用性组的两个副本。 群集节点可以加入多个可用性组,每个组包含一个副本。 咨询数据库管理员,了解需要多少个群集节点才能支持计划的可用性组的可用性副本。 什么是 Always On 可用性组? |
重要
另外,确保已正确配置了您的环境以连接到可用性组。 有关详细信息,请参阅可用性组的驱动程序和客户端连接支持。
针对托管可用性副本的计算机的建议(Windows 系统)
类似的系统:对于给定的可用性组,所有可用性副本都应在可处理同样的工作负荷的相当的系统上运行。
专用网络适配器:为获得最佳性能,请为 Always On 可用性组使用专用网络适配器(网络接口卡)。
足够的磁盘空间:服务器实例在其上托管可用性副本的每个计算机都必须为该可用性组中的所有数据库拥有足够的磁盘空间。 请记住,在主数据库增长时,其相应的辅助数据库也增长相同量。
相同的磁盘布局:服务器实例在其上托管可用性副本的每个计算机都应具有相同的磁盘布局(具有确切的磁盘驱动器号和大小),以确保对数据库文件(mdf,ldf)的文件路径进行镜像,从而防止种子设定和同步过程中出现复杂情况。 查看不同磁盘布局的限制(可用性数据库)。
权限(Windows 系统)
若要管理 WSFC,用户必须是每个群集节点上的系统管理员。
有关用于管理群集的帐户的详细信息,请参阅附录 A:故障转移群集要求。
相关任务(Windows 系统)
任务 | 链接 |
---|---|
设置 HostRecordTTL 值。 | 更改 HostRecordTTL(使用 Windows PowerShell) |
更改 HostRecordTTL(使用 PowerShell)
通过 “以管理员身份运行” 打开 PowerShell 窗口。
导入 FailoverClusters 模块。
使用 Get-ClusterResource cmdlet 查找网络名称资源,然后使用 Set-ClusterParameter cmdlet 设置 HostRecordTTL 值,如下所示:
Get-ClusterResource "<NetworkResourceName>" | Set-ClusterParameter HostRecordTTL <TimeInSeconds>
下面的 PowerShell 示例为名为
SQL Network Name (SQL35)
的网络名称资源将 HostRecordTTL 设置为 300 秒。Import-Module FailoverClusters $nameResource = "SQL Network Name (SQL35)" Get-ClusterResource $nameResource | Set-ClusterParameter HostRecordTTL 300
提示
每次打开新的 PowerShell 窗口时,都需要导入 FailoverClusters 模块。
相关内容 (PowerShell)
群集和高可用性 (故障转移群集和网络负载平衡团队博客)
相关内容(Windows 系统)
SQL Server 实例先决条件和限制
每个可用性组均要求称作“可用性副本” SQL Server的一组故障转移伙伴,它们由 的实例承载。 给定的服务器实例可以是独立实例或 SQL Server 故障转移群集实例 (FCI)。
本部分内容:
清单:先决条件(服务器实例)
先决条件 | 链接 |
---|---|
主机必须是一个 WSFC 节点。 托管给定可用性组的可用性副本的 SQL Server 实例驻留在单独的群集节点上。 迁移到其他群集时,一个可用性组可能会暂时跨两个群集。 SQL Server 2016 (13.x) 引入了分布式可用性组。 在分布式可用性组中,两个可用性组驻留在不同的群集上。 | Windows Server 故障转移群集与 SQL Server 故障转移群集和 Always On 可用性组 (SQL Server) 分布式可用性组 |
如果您希望将可用性组与 Kerberos 一起使用: 承载可用性组的可用性副本的所有服务器实例都必须使用相同的 SQL Server 服务帐户。 域管理员需要在可用性组侦听器的虚拟网络名称 (VNN) 的 SQL Server 服务帐户上使用 Active Directory 手动注册服务主体名称 (SPN)。 如果在 SQL Server 服务帐户之外的帐户上注册 SPN,则身份验证失败。 若要将 Kerberos 身份验证用于可用性组 (AG) 终结点之间的通信,请为 AG 使用的数据库镜像终结点手动注册 SPN。 重要提示:如果你更改 SQL Server 服务帐户,则域管理员必须重新手动注册 SPN。 |
为 Kerberos 连接注册服务主体名称 注意: Kerberos 和 SPN 强制实施相互身份验证。 SPN 将映射到启动 SQL Server 服务的 Windows 帐户。 如果未正确注册 SPN 或注册失败,则 Windows 安全层将无法确定与 SPN 关联的帐户,因而无法使用 Kerberos 身份验证。 注意:NTLM 没有此要求。 |
如果您计划使用 SQL Server 故障转移群集实例 (FCI) 承载可用性副本,则请确保您理解 FCI 限制并且满足 FCI 要求。 | 使用 SQL Server 故障转移群集实例 (FCI) 承载可用性副本的先决条件和要求(本文后面将作介绍) |
每个服务器实例必须运行相同版本的 SQL Server 才能参加可用性组。 | 有关更多信息,请参阅本部分结尾的“版本列表与支持的功能”。 |
为某一可用性组承载可用性副本的所有服务器实例必须都使用相同的 SQL Server 排序规则。 | 设置或更改服务器排序规则 |
对将为任何可用性组承载可用性副本的每个服务器实例都启用 Always On 可用性组 功能。 在某一给定计算机上,您可为 Always On 可用性组 启用您的 SQL Server 安装支持的任意多的服务器实例。 | 启用或禁用 Always On 可用性组功能 重要提示:如果销毁并重新创建 WSFC,必须在每个服务器实例上禁用并重新启用已在原始群集上为 Always On 可用性组启用的 Always On 可用性组功能。 |
每个服务器实例都要求数据库镜像端点。 此端点由服务器实例上的所有可用性副本以及数据库镜像伙伴和见证服务器共享。 如果你选择托管可用性副本的服务器实例正在某一域用户帐户下运行并且尚不具有数据库镜像端点,则使用可用性组向导(或者使用 SQL Server Management 中的可用性组向导将副本添加到Always On 可用性组)可以创建该端点并将 CONNECT 权限授予服务器实例的服务帐户。 但是,如果 SQL Server 服务正在以内置帐户(例如 Local System、Local Service 或 Network Service)或非域帐户运行,必须使用证书来进行端点身份验证,并且该向导无法在服务器实例上创建数据库镜像端点。 在此情况下,我们建议您首先手动创建数据库镜像端点,然后启动该向导。 安全说明:Always On 可用性组的传输安全性与数据库镜像的传输安全性相同。 |
数据库镜像端点 (SQL Server) 传输安全性 - 数据库镜像 - Always On 可用性 |
如果使用 FILESTREAM 的任何数据库添加到某一可用性组,请确保在将托管该可用性组的可用性副本的每个服务器实例上都启用 FILESTREAM。 | 启用和配置 FILESTREAM |
如果任何包含的数据库添加到某一可用性组,请确保在将托管该可用性组的可用性副本的每个服务器实例上将包含的数据库身份验证(服务器配置选项)设置为 1 。 |
contained database authentication 服务器配置选项 服务器配置选项 (SQL Server) |
有关 Windows 上 SQL Server 各版本支持的功能列表,请参阅:
- SQL Server 2022 各个版本及其支持的功能
- SQL Server 2019 各个版本及其支持的功能
- 版本和 SQL Server 2017 支持的功能
- 版本和 SQL Server 2016 支持的功能
可用性组的线程使用情况
Always On 可用性组 的工作线程具有以下要求:
在 SQL Server的一个空闲实例上, Always On 可用性组 使用 0 线程。
可用性组使用的最大线程数为配置的最大服务器线程数(“最大工作线程”)减去 40。
给定服务器实例托管的可用性副本共享 SQL Server 2019 (15.x) 和以前版本的单个线程池。
线程是按需共享的,如下所示:
一般情况下,存在 3–10 个共享线程,但此数目会根据主副本工作负荷增加。
如果给定线程空闲一段时间,则将释放回常规 SQL Server 线程池。 正常情况下,不活动线程在处于不活动状态 15 秒后释放。 但是,根据上一次活动,空闲线程可能保留更长时间。
对于次要副本,SQL Server 实例最多使用 100 个线程进行并行重做。 每个数据库最多使用 CPU 内核总数的一半,但是每个数据库不能超过 16 个线程。 如果单个实例的所需线程总数超过 100 个,则 SQL Server 会对每个其余数据库使用单个重做线程。 串行重做线程将在处于非活动状态约 15 秒后释放。
此外,可用性组使用未共享的线程,如下所示:
每个主副本为每个主数据库使用 1 个日志捕获线程。 此外,它为每个辅助数据库使用 1 个日志发送线程。 日志发送线程将在处于不活动状态 15 秒后释放。
辅助副本上的备份将在备份操作持续时间内包含主副本上的一个线程。
SQL Server 2022 (16.x) 引入了并行重做线程池,该池是与所有具有重做工作的数据库共享的实例级线程池。 借助此池,同一组线程可以同时处理不同数据库的日志记录(并行)。 在 SQL Server 2019 (15.x) 和以前版本中,用于重做的可用线程数限制为 100。
SQL Server 2019 (15.x) 为内存优化可用性组数据库引入了并行重做。 在 SQL Server 2016 (13.x) 和 SQL Server 2017 (14.x) 中,如果可用性组中的数据库也是内存优化的,则基于磁盘的表不会使用并行重做。
有关详细信息,请参阅 Always On - HADRON 学习系列:启用了 HADRON 的数据库的工作线程池用法(CSS SQL Server 工程师博客)。
权限(服务器实例)
任务 | 所需的权限 |
---|---|
创建数据库镜像端点 | 要求具有 CREATE ENDPOINT 权限,或者具有 sysadmin 固定服务器角色的成员身份。 此外,还要求 CONTROL ON ENDPOINT 权限。 有关详细信息,请参阅 GRANT 终结点权限 (Transact-SQL)。 |
启用 Always On 可用性组 | 要求本地计算机上“管理员”组中的成员身份以及对 WSFC 的完全控制。 |
相关任务(服务器实例)
任务 | 项目 |
---|---|
确定数据库镜像端点是否存在 | sys.database_mirroring_endpoints (Transact-SQL) |
创建数据库镜像端点(如果它尚不存在) | 创建使用 Windows 身份验证的数据库镜像端点 (Transact-SQL) 使用数据库镜像终结点证书 (Transact-SQL) 使用 PowerShell 为可用性组创建数据库镜像端点 |
启用可用性组 | 启用或禁用 Always On 可用性组功能 |
相关内容(服务器实例)
网络连接建议
强烈建议为 WSFC 节点之间的通信和可用性副本之间的通信使用相同的网络链接。 如果某些链接失败(甚至间歇性断开),使用单独的网络链接可能会导致意外行为。
例如,要使可用性组支持自动故障转移,作为自动故障转移伙伴的辅助副本必须处于 SYNCHRONIZED 状态。 如果到此辅助副本的网络链接失败(甚至间歇性断开),副本将进入 UNSYNCHRONIZED 状态,并且在该链接恢复之前无法重新同步。 如果该次要副本未同步并且 WSFC 请求自动故障转移,此时不会发生自动故障转移。
客户端连接支持
有关 Always On 可用性组对客户端连接的支持的信息,请参阅驱动程序和客户端连接对可用性组的支持。
使用 SQL Server 故障转移群集实例 (FCI) 托管可用性副本的先决条件和限制
本部分内容:
限制 (FCI)
注意
故障转移群集实例 (FCI) 支持群集共享卷 (CSV)。 有关 CSV 的详细信息,请参阅 了解故障转移群集中的群集共享卷。
FCI 的群集节点只能托管给定可用性组的一个副本:如果在 FCI 上添加可用性副本,作为 FCI 的可能所有者的 WSFC 节点不能托管同一个可用性组的另一个副本。 若要避免可能出现的冲突,建议配置故障转移群集实例的可能所有者。 这会阻止可能导致单个 WSFC 尝试在同一可用性组上同时托管两个可用性副本的情况的发生。
此外,其他每个副本都必须由驻留在同一个 Windows Server 故障转移群集中其他群集节点上的 SQL Server 实例托管。 唯一的例外是在迁移到另一个群集时,一个可用性组可能会暂时跨两个群集。
警告
使用故障转移群集管理器将托管可用性组的 FCI 移动到已在托管同一个可用性组副本的节点,可能会导致可用性组副本丢失,使其无法在目标节点上重新联机。 故障转移群集的单个节点不能托管同一个可用性组的多个副本。 有关如何发生这种情况以及如何恢复的详细信息,请参阅博客在可用性组中意外删除副本。
FCI 不支持可用性组自动故障转移:FCI 不支持可用性组自动故障转移,因此只能为手动故障转移配置任何由 FCI 托管的可用性副本。
更改 FCI 网络名称:如果你需要更改托管可用性副本的 FCI 的网络名称,需要从副本的可用性组中删除它,然后将它添加回可用性组中。 不能删除主副本,因此,如果在重命名托管主副本的 FCI,则应故障转移到某一辅助副本,然后删除之前的主副本并将其添加回去。 重命名 FCI 可能会更改其数据库镜像端点的 URL。 当您添加副本时,请确保指定当前端点的 URL。
清单:先决条件 (FCI)
先决条件 | 链接 |
---|---|
请确保每个 SQL Server 故障转移群集实例 (FCI) 都拥有标准 SQL Server 故障转移群集实例安装所要求的共享存储。 |
相关任务 (FCI)
任务 | 项目 |
---|---|
安装 SQL Server FCI | 创建新的 Always On 故障转移群集实例(安装程序) |
现有 SQL Server FCI 的就地升级 | 升级故障转移群集实例 |
维护现有 SQL Server FCI | 在故障转移群集实例中添加或删除节点(安装程序) |
相关内容 (FCI)
可用性组先决条件和限制
本部分内容:
限制(可用性组)
可用性副本必须由一个 WSFC 的不同节点托管:对于某个给定可用性组,可用性副本必须由在同一个 WSFC 的不同节点上运行的服务器实例托管。 唯一的例外是在迁移到另一个群集时,一个可用性组可能会暂时跨两个群集。
备注
同一物理计算机上的多个虚拟机可分别为同一可用性组承载可用性副本,因为每个虚拟机都充当一个单独的计算机。
唯一的可用性组名称:每个可用性组名称在 WSFC 上必须是唯一的。 可用性组名称的最大长度为 128 个字符。
可用性副本:每个可用性组支持一个主要副本和最多八个次要副本。 所有副本都可在异步提交模式下运行,或最多 5 个副本可在同步提交模式下运行(具有两个同步辅助副本的一个主副本)。 每个副本都必须在 Windows 和 SQL Server 中具有唯一的服务器名称。 Windows 和 SQL Server服务器中的服务器名称必须匹配。
每台计算机的可用性组和可用性数据库的最大数目:可以在计算机(VM 或物理机)上放置的数据库和可用性组的实际数目取决于硬件和工作负荷,但是没有强制限制。 Microsoft 已测试每台物理计算机多达 10 个 AG 和 100 个数据库,但这不是绑定限制。 根据服务器上的硬件规范和工作负载,可以在 SQL Server 的实例上放置更多数据库和可用性组。 系统过载的信号可能包括但不限于工作线程用尽、可用性组系统视图和 DMV 响应时间很长和/或调度程序系统转储停滞。 请务必用接近生产的工作负荷彻底测试您的环境,确保它可以应对您的应用程序 SLA 内的工作负荷蜂值。 考虑 SLA 时,确保考虑故障条件下的负荷以及期望的响应时间。
请勿使用故障转移群集管理器来操作可用性组。 SQL Server FCI 的状态在 SQL Server 和 Windows Server 故障转移群集 (WSFC) 之间共享,并且 SQL Server 保留的实例状态信息的详细程度超出群集所需的程度。 管理模型为 SQL Server 必须驱动事务,并负责使群集的状态视图与 SQL Server 的状态视图保持同步。 如果在 SQL Server 外部更改了群集的状态,则该状态有可能在 WSFC 和 SQL Server 之间不同步,这可能会导致意外行为。
例如:
请勿更改任何可用性组属性,例如可能的所有者。
请勿使用故障转移群集管理器来故障转移可用性组。 必须使用 Transact-SQL 或 SQL Server Management Studio。
请勿添加资源或更改与可用性组角色关联的依赖项。 不建议将任何其他资源(包括用户或第三方资源)放入可用性组角色或更改角色依赖项,因为这些更改可能会对故障转移性能产生负面影响。
先决条件(可用性组)
在创建或重新配置可用性组配置时,请确保您遵守以下要求。
先决条件 | 说明 |
---|---|
如果您计划使用 SQL Server 故障转移群集实例 (FCI) 承载可用性副本,则请确保您理解 FCI 限制并且满足 FCI 要求。 | 有关使用 SQL Server 故障转移群集实例 (FCI) 托管可用性副本的先决条件和限制(本文前面已予以介绍) |
安全性(可用性组)
从 WSFC 继承安全性。 Windows Server 故障转移群集为整个群集粒度提供两级用户安全性:
只读访问
完全控制
Always On 可用性组 需要完全控制,在 SQL Server 实例上启用 Always On 可用性组 将(通过服务 SID)向其提供对群集的完全控制。
不能在群集管理器中直接添加或删除服务器实例的安全性。 若要管理群集安全性会话,请使用 SQL Server 配置管理器或 SQL Server 中等效的 WMI。
SQL Server 的每个实例都必须具有访问注册表、群集等的权限。
我们建议您为承载 Always On 可用性组 可用性副本的服务器实例之间的连接使用加密。
权限(可用性组)
任务 | 所需的权限 |
---|---|
创建可用性组 | 需要 sysadmin 固定服务器角色的成员资格,以及 CREATE AVAILABILITY GROUP 服务器权限、ALTER ANY AVAILABILITY GROUP 权限或 CONTROL SERVER 权限。 |
更改可用性组 | 对可用性组要求 ALTER AVAILABILITY GROUP 权限、CONTROL AVAILABILITY GROUP 权限、ALTER ANY AVAILABILITY GROUP 权限或 CONTROL SERVER 权限。 此外,将数据库联接到可用性组要求具有 db_owner 固定服务器角色的成员身份。 |
删除可用性组 | 对可用性组要求 ALTER AVAILABILITY GROUP 权限、CONTROL AVAILABILITY GROUP 权限、ALTER ANY AVAILABILITY GROUP 权限或 CONTROL SERVER 权限。 若要删除并非在本地副本位置上托管的某一可用性组,需要针对该可用性组的 CONTROL SERVER 权限或 CONTROL 权限。 |
相关任务(可用性组)
可用性数据库先决条件和限制
若要符合添加到可用性组的条件,数据库必须满足以下先决条件和限制。
本部分内容:
清单:要求(可用性数据库)
为了符合添加到可用性组的条件,数据库必须:
要求 | 链接 |
---|---|
是用户数据库。 系统数据库无法属于可用性组。 | |
驻留在您在其中创建可用性组并且对于服务器实例可访问的 SQL Server 实例上。 | |
是读写数据库。 只读数据库不能添加到可用性组。 | sys.databases (is_read_only = 0) |
是多用户数据库。 | sys.databases (user_access = 0) |
未使用 AUTO_CLOSE。 | sys.databases (is_auto_close_on = 0) |
使用完整恢复模式。 | sys.databases (recovery_model = 1) |
拥有至少一个完整的数据库备份。 注意:将数据库设置为完整恢复模式之后,将需要一个完整的备份来启动完整恢复日志链。 |
完整数据库备份 |
不属于任何现有可用性组。 | sys.databases (group_database_id = NULL) |
不是为数据库镜像配置的。 | sys.database_mirroring(如果数据库未参与镜像,则所有带有“mirroring_”前缀的列将为 NULL。) |
在将使用 FILESTREAM 的数据库添加到某一可用性组之前,请确保在承载或将承载该可用性组的可用性副本的每个服务器实例上都启用 FILESTREAM。 | 启用和配置 FILESTREAM |
在将包含的数据库添加到某一可用性组之前,请确保在将承载该可用性组的可用性副本的每个服务器实例上 contained database authentication 服务器选项都设置为 1 。 | contained database authentication 服务器配置选项 服务器配置选项 (SQL Server) |
注意
Always On 可用性组可使用任何受支持的数据库兼容性级别。
限制(可用性数据库)
如果辅助数据库的文件路径(包括驱动器号)不同于相应主数据库的路径,则以下限制适用:
新建可用性组向导/将数据库添加到可用性组向导:不支持“完全”选项(在选择初始数据同步页面(Always On 可用性组向导)上)。
RESTORE WITH MOVE:要创建辅助数据库,在托管次要副本的每个 SQL Server 实例上,数据库文件必须是 RESTORED WITH MOVE。
对添加文件操作的影响:以后针对主要副本的添加文件操作在辅助数据库上可能会失败。 此失败可能导致辅助数据库暂停。 而这又会导致辅助副本进入“非同步”状态。
注意
有关如何处理失败的添加文件操作的信息,请参阅对添加文件操作失败进行故障排除(Always On 可用性组)。
不能删除当前属于可用性组的数据库。
关注受 TDE 保护的数据库
如果使用透明数据加密 (TDE),则用于创建和解密其他密钥的证书或非对称密钥在承载可用性组的可用性副本的每个服务器实例上必须相同。 有关详细信息,请参阅 将受 TDE 保护的数据库移到其他 SQL Server。
权限(可用性数据库)
需要对数据库拥有 ALTER 权限。
相关任务(可用性数据库)
任务 | 项目 |
---|---|
准备辅助数据库(手动) | 为 Always On 可用性组准备辅助数据库 |
将辅助数据库联接到可用性组(手动) | 将辅助数据库联接到 Always On 可用性组 |
修改可用性数据库的数目 | 将数据库添加到 AlwaysOn 可用性组 从可用性组中删除辅助数据库 (SQL Server) 从 Always On 可用性组中删除主数据库 |