以下来自AlwaysOn官方文档,以最新的SQL Server 2019 On Windows为准,也学习下相关新特性。不会完全按照官方文档翻译,有删改。

 

针对 AlwaysOn 可用性组的先决条件、限制和建议

本文介绍部署 AlwaysOn 可用性组时的注意事项,包括针对主机、WSFC、SqlServer实例和可用性组的先决条件、限制和建议。 还指出了对应的安全注意事项和所需权限(如果有)。在部署 AlwaysOn 可用性组前,强烈建议您阅读本主题的每个章节。

 

一、 支持可用性组的 .Net Hotfixes

根据您将使用的AlwaysOn 可用性组的组件和功能,您可能需要安装下表中.Net Hotfixes(表中Hotfixes安装顺序不限)

Dependent Feature

Hotfix

Link

Reporting Services

Hotfix for .Net 3.5 SP1添加了对SQL Client for AlwaysOn的读意向、只读和多子网故障转移功能的支持。 此Hotfix应安装在每个Reporting Services报表服务器上。

KB 2654347:.Net 3.5 SP1 修补程序添加对 AlwaysOn 功能的支持


 

二、 基本要求(Windows 系统)

为了支持 AlwaysOn 可用性组功能,请确保要参与可用性组的每台计算机都满足以下要求:

要求

链接

确保此系统不是域控制器。

域控制器上不支持可用性组。

确保每台计算机操作系统版本不低于Windows Server 2012。

安装 SQL Server 2016 的硬件和软件要求

确保每台计算机都是WSFC中的一个节点。

Windows Server 故障转移群集 (WSFC) 与 SQL Server

确保WSFC包含足够的节点来支持可用性组配置。

  • 每个群集节点可以为一个可用性组托管一个副本。 
  • 一个群集节点不能托管来自同一可用性组的两个副本。
  • 群集节点可以参加多个可用性组,每个组包含一个副本。

AlwaysOn 可用性组概述 (SQL Server)

 

三、 关于可用性副本主机的建议(Windows 系统)

  • 类似的系统: 所有可用性副本主机性能配置应该相近,能够处理相近的负载。
  • 专用网络适配器: 为获得最佳性能,请给AlwaysOn 可用性组使用专用的网络适配器(网络接口卡)。
  • 足够的磁盘空间: 可用性副本主机必须拥有足够的磁盘空间。 在主数据库增长时,相应的辅助数据库也增长相同量。

1. 权限(Windows 系统)

若要管理 WSFC,用户必须是每个群集节点上的系统管理员(system administrator)。

有关用于管理群集的帐户的详细信息,请参阅附录 A:故障转移群集要求

2. 相关任务(Windows 系统)

任务

链接

设置 HostRecordTTL 值。

更改 HostRecordTTL(使用 Windows PowerShell)

步骤如下:

  • 通过 “以管理员身份运行” 打开 PowerShell 窗口。
  • 导入 FailoverClusters 模块。
  • 使用 Get-ClusterResource cmdlet 查找网络名称资源,然后使用 Set-ClusterParameter cmdlet 设置 HostRecordTTL 值
Get-ClusterResource “<NetworkResourceName>” | Set-ClusterParameter HostRecordTTL <TimeInSeconds>

下面的示例 为名为SQL Network Name(SQL35)的网络名称资源将HostRecordTTL设置为 300 秒。

Import-Module FailoverClusters  

$nameResource = "SQL Network Name (SQL35)"  
Get-ClusterResource $nameResource | Set-ClusterParameter ClusterParameter HostRecordTTL 300

 

四、 SQL Server 实例先决条件和限制

SQL Server 实例既可以是单实例也可以是故障转移群集实例 (FCI)。

官方文档——AlwaysOn AG的先决条件、限制和建议_SQL

 

1. 先决条件

先决条件

链接

  • 主机必须是一个WSFC节点
  • 一个可用性副本的SQL Server实例只能驻留在一个群集节点
  • 迁移到其他群集时,一个可用性组可能会暂时跨两个群集。 
  • SQL Server 2016 引入了分布式可用性组,在分布式可用性组中,两个可用性组托管在不同的群集上。

Windows Server 故障转移群集 (WSFC) 与 SQL Server故障转移群集和 AlwaysOn 可用性组 (SQL Server)

分布式可用性组(AlwaysOn 可用性组)

如果您希望将可用性组与 Kerberos 一起使用:


  • 所有可用性副本的SQL Server实例必须使用相同的SQL Server服务帐户。
  • The domain administrator needs to manually register a Service Principal Name (SPN) with Active Directory on the SQL Server service account for the virtual network name (VNN) of the availability group listener. If the SPN is registered on an account other than the SQL Server service account, authentication will fail.

** 重要提示 ** 如果你更改 SQL Server 服务帐户,则域管理员必须重新手动注册 SPN。

为 Kerberos 连接注册服务主体名称
Kerberos 和 SPN 强制实施相互身份验证。 SPN 将映射到启动 SQL Server 服务的 Windows 帐户。 如果未正确注册 SPN 或注册失败,则 Windows 安全层将无法确定与 SPN 关联的帐户,因而无法使用 Kerberos 身份验证。

注意:NTLM 没有此要求。

如果计划使用故障转移群集实例 (FCI) 承载可用性副本,则请确保您理解FCI限制并且满足 FCI 要求。

使用 SQL Server 故障转移群集实例 (FCI) 承载可用性副本的先决条件和要求(本文后面将作介绍)

所有服务器实例必须运行相同版本的 SQL Server

SQL 2014SQL 2016 和 SQL 2017 的各版本和支持的功能。

所有服务器实例必须使用相同的SQL Server排序规则

设置或更改服务器排序规则

为所有要承载可用性副本的服务器实例都启用 AlwaysOn可用性组功能

启用和禁用 AlwaysOn 可用性组 (SQL Server)

**重要提示** 如果销毁并重新创建了 WSFC,则必须在每个服务器实例上禁用并重新启用AlwaysOn可用性组功能。

  • 每个服务器实例都要求有一个数据库镜像端点。此端点由服务器实例上的所有可用性副本、数据库镜像伙伴以及见证服务器共享。
  • 如果服务器实例正在某域帐户下运行并且尚不具有数据库镜像端点,可以创建端点并授予服务器实例的服务帐户CONNECT权限。
  • 如果 SQL Server 服务正在以内置帐户(例如 Local System、Local Service 或 Network Service)或非域帐户运行,您必须使用证书来进行端点身份验证,并且无法使用向导工具在服务器实例上创建数据库镜像端点。

** 安全说明 ** AlwaysOn 可用性组 的传输安全性与数据库镜像的传输安全性相同。

数据库镜像终结点 (SQL Server)

针对数据库镜像和 AlwaysOn 可用性组的传输安全性 (SQL Server)

如果要将使用了FILESTREAM的任何数据库添加可用性组,请确保在每个服务器实例上都启用了FILESTREAM。

启用和配置 FILESTREAM

如果要将任何包含数据库(contained databases,不知道是啥,后面查一下)添加到可用性组,请确保在每个服务器实例上都设置contained database authentication1 。

contained database authentication 服务器配置选项服务器配置选项 (SQL Server)

 

2. 可用性组的线程使用情况

AlwaysOn 可用性组 的工作线程具有以下要求:

  • 在空闲的SQL Server实例上, AlwaysOn可用性组使用0线程。
  • 可用性组使用的最大线程数为 max worker threads减40

给定服务器实例上承载的可用性副本共享一个线程池。

线程是按需共享的,如下所示:

  • 一般情况下,存在 3–10 个共享线程,此数目会根据主副本工作负荷增加。
  • 如果线程空闲一段时间,它会被释放回常规 SQL Server 线程池。 正常情况下,空闲线程会在处于inactive状态15 秒后释放。 但是根据上一次活动情况,空闲线程也可能保留更长时间。
  • 对于次要副本,SQL Server 实例最多使用100个线程进行并行redo。每个数据库最多使用CPU核数的一半,但每个数据库不能超过16个线程。 如果单个实例的所需线程总数超过100,SQL Server 会为其余的每个数据库使用单个redo线程(详见备注)。 串行redo线程将在处于inactive状态约15秒后释放。

 备注

SQL Server基于升序的数据库ID来选择使用单线程的数据库,因此,对于可用性组数据库数量>可用工作线程数量的 SQL Server 实例,应考虑其数据库创建顺序。 例如,在具有32核CPU或更多系统上,可用性组中的前六个数据库(按数据库ID升序)将使用并行重做模式,所有后续数据库将使用单个重做模式(单个redo线程)。

此外,可用性组使用未共享的线程如下:

  • 每个主副本为每个主数据库使用1个日志捕获线程。 此外,它为每个辅助数据库使用1个日志发送线程,日志发送线程将在处于不活动状态 15 秒后释放。
  • 辅助副本上的备份将在备份期间hold主副本上的一个线程。

有关详细信息,请参阅 Always On - HADRON 学习系列:启用了 HADRON 的数据库的工作线程池用法(CSS SQL Server 工程师博客)。

 

3. 权限

任务

所需的权限

创建数据库镜像端点

要求具有 CREATE ENDPOINT 权限,或者具有 sysadmin 固定服务器角色的成员身份。 此外,还要求 CONTROL ON ENDPOINT 权限。 有关详细信息,请参阅 GRANT 终结点权限 (Transact-SQL)

启用 AlwaysOn 可用性组

要求本地计算机上“管理员”组中的成员身份,以及对 WSFC 的完全控制 。

 

4. 相关任务

任务

项目

确定数据库镜像端点是否存在

sys.database_mirroring_endpoints (Transact-SQL)

创建数据库镜像端点(如果它尚不存在)

为 Windows 身份验证创建数据库镜像终结点 (Transact-SQL)

使用数据库镜像终结点证书 (Transact-SQL)


为 AlwaysOn 可用性组创建数据库镜像终结点 (SQL Server PowerShell)

启用可用性组

启用和禁用 AlwaysOn 可用性组 (SQL Server)

 

五、 网络连接建议

强烈建议为 WSFC 节点之间的通信和可用性副本之间的通信使用相同的网络链接。 如果某些链接失败(甚至间歇性断开),使用不同的网络链接可能会导致预期外的行为。

例如,要使可用性组支持自动故障转移,辅助副本必须处于SYNCHRONIZED状态。 如果到此辅助副本的网络链接失败(甚至间歇性断开),副本将进入UNSYNCHRONIZED状态,且在该网络恢复之前无法重新同步,此时不会发生自动故障转移。

 

六、 客户端连接支持

有关 AlwaysOn 可用性组 支持客户端连接的详细信息,请参阅 AlwaysOn 客户端连接 (SQL Server)

 

七、 可用性组先决条件和限制

1. 限制

  • 可用性副本必须由WSFC的不同节点承载 :唯一的例外是在迁移到另一个群集时,一个可用性组可能会暂时跨两个群集。

 同一物理计算机上的多个虚拟机可分别为同一可用性组承载可用性副本,因为每个虚拟机都充当一个单独的计算机。

  • 唯一的可用性组名称: 每个可用性组名称在WSFC上必须唯一,可用性组名称的最大长度为128个字符。
  • 可用性副本: 每个可用性组都支持一个主副本和最多八个辅助副本。 可以所有副本都在异步提交模式下运行,或者最多三个副本(一主两从)在同步提交模式下运行。
  • 每台计算机的可用性组和可用性数据库的最大数目 :计算机上可放置的数据库和可用性组的实际数目取决于硬件和工作负荷,但是没有强制限制。
  • 不要使用故障转移群集管理器来操作可用性组。FCI的状态在 SQL Server 和WSFC之间共享,且SQL Server保留的实例状态信息的详细程度超出群集所需。集群管理模型是:SQL Server 必须驱动事务,并负责使群集状态视图与 SQL Server的状态视图保持同步。 如果在SQL Server外部更改了群集的状态,可能导致在状态WSFC和SQL Server之间不同步,这可能会导致意外行为。

例如:

  •  不要更改任何可用性组属性,例如可能的所有者。
  • 不要使用WSFC来故障转移可用性组,必须使用Transact-SQL或SSMS。 

 

2. 先决条件

在创建或重新配置可用性组时,请确保遵守以下要求。

先决条件

描述

如果您计划使用FCI承载可用性副本,请确保理解 FCI 限制并且满足 FCI 要求。

有关使用 SQL Server 故障转移群集实例 (FCI) 承载可用性副本的先决条件和限制(本文前面已予以介绍)

 

3. 安全性

  • 从WSFC继承安全性。WSFC为整个群集提供两级用户安全性:
  • 只读访问
  • 完全控制:在SQL Server 实例上启用 AlwaysOn可用性组需要对群集的完全控制权限。不能直接在群集管理器中添加或删除服务器实例安全性。要管理群集安全性会话,请使用 SQL Server 配置管理器或WMI。
  • SQL Server的每个实例都必须具有访问注册表、群集等的权限。
  • 建议为各可用性副本之间的连接使用加密。

 

4. 权限

任务

所需的权限

创建可用性组

需要 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 权限。

 

5. 相关任务

任务

项目

创建可用性组

使用可用性组(“新建可用性组”向导)

创建可用性组 (Transact-SQL)


创建可用性组 (SQL Server PowerShell)


在添加或修改可用性副本时指定终结点 URL (SQL Server)

修改可用性副本的数目

将辅助副本添加到可用性组 (SQL Server)

将辅助副本联接到可用性组 (SQL Server)


将次要副本从可用性组删除 (SQL Server)

创建可用性组侦听器

创建或配置可用性组侦听程序 (SQL Server)

删除可用性组

删除可用性组 (SQL Server)

八、 可用性数据库先决条件和限制

 

1. 要求

为了符合添加到可用性组的条件,数据库必须:

要求

链接

是用户数据库。 系统数据库无法加入可用性组。

 

位于创建可用性组的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)

拥有至少一个完整的数据库备份(将数据库设置为完整恢复模式之后,将需要一个完整的备份来启动完整恢复日志链)

创建完整数据库备份 (SQL Server)

不属于任何现有可用性组。

sys.databases (group_database_id = NULL)

不是为数据库镜像配置的。

sys.database_mirroring (如果数据库未参与镜像,则所有带有“mirroring_”前缀的列将为 NULL。)

如果要将使用了FILESTREAM的任何数据库添加可用性组,请确保在每个服务器实例上都启用了FILESTREAM。

启用和配置 FILESTREAM

如果要将任何包含数据库(contained databases,不知道是啥,后面查一下)添加到可用性组,请确保在每个服务器实例上都设置contained database authentication1 。

contained database authentication 服务器配置选项服务器配置选项 (SQL Server)

 备注:AlwaysOn 可用性组可使用任何受支持的数据库兼容性级别。

 

2. 限制

  • 不能删除当前已属于可用性组的数据库。
  • 如果辅助数据库的文件路径不同于相应主数据库路径,则会有以下限制:
  • 新建可用性组向导/将数据库添加到可用性组向导: 不支持“Full”选项(选择初始数据同步页页面)
  • RESTORE WITH MOVE: 要创建辅助数据库,在辅助副本必须使用RESTORED WITH MOVE还原数据库文件。
  • 对添加文件操作的影响 :以后针对主副本的添加文件操作在辅助数据库上可能会失败。这可能导致辅助数据库暂停,进而导致辅助副本变为“非同步”状态。

备注:如何处理失败的添加文件操作的详细信息,请参阅添加文件操作失败的故障排除(AlwaysOn 可用性组)

 

2. 受TDE保护的数据库

 

3. 权限

需要对数据库拥有 ALTER 权限

 

4. 相关任务

任务

项目

准备辅助数据库(手动)

为可用性组手动准备辅助数据库 (SQL Server)

将辅助数据库联接到可用性组(手动)

将辅助数据库联接到可用性组 (SQL Server)

修改可用性数据库的数目

将数据库添加到可用性组 (SQL Server)

将辅助数据库从可用性组删除 (SQL Server)


将主数据库从可用性组删除 (SQL Server)