你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

使用 Azure 快速启动模板为 Azure VM 上的 SQL Server 配置可用性组

适用于:Azure 上的 SQL Server

提示

部署可用性组的方法有很多种。 通过在同一 Azure 虚拟网络中的多个子网中创建 SQL Server 虚拟机 (VM),可以简化部署,使 Always On 可用性组不再需要 Azure 负载均衡器或分布式网络名称 (DNN)。 如果已在单个子网中创建可用性组,可以将其迁移到多子网环境

本文介绍如何使用 Azure 快速启动模板来部分自动化在 Azure 中为单个子网中的 SQL Server 虚拟机 (VM) 部署 Always On 可用性组配置的过程。 此过程中使用了两个 Azure 快速启动模板:

模板 说明
sql-vm-ag-setup 创建 Windows 故障转移群集并将 SQL Server VM 加入其中。
sql-vm-aglistener-setup 创建可用性组侦听程序并配置内部负载均衡器。 使用此模板的前提是,Windows 故障转移群集是使用“101-sql-vm-ag-setup”模板创建的。

其他可用性组配置部分(例如创建可用性组,以及创建内部负载均衡器)必须手动完成。 本文提供自动和手动步骤的顺序。

尽管本文介绍的是使用 Azure 快速启动模板配置可用性组环境,但也可使用 Azure 门户PowerShell 或 Azure CLI手动进行配置。

注意

现在,可以使用 Azure Migrate 将可用性组解决方案直接迁移到 Azure VM 上的 SQL Server。 有关详细信息,请参阅迁移可用性组

先决条件

若要使用快速启动模板自动设置 Always On 可用性组,必须满足以下先决条件:

权限

若要使用 Azure 快速启动模板配置 Always On 可用性组,需要具备以下权限:

  • 在域中具有“创建计算机对象”权限的现有域用户帐户。 例如,域管理员帐户通常拥有足够的权限(如 account@domain.com)。 该帐户还应该属于每个 VM 上负责创建群集的本地管理员组。
  • 可控制 SQL Server 的域用户帐户。

创建群集

将 SQL Server VM 注册到 SQL IaaS 代理扩展后,可将 SQL Server VM 加入到 SqlVirtualMachineGroups。 此资源定义 Windows 故障转移群集的元数据。 元数据包括版本、完全限定的域名、用于管理群集和 SQL 服务的 Active Directory 帐户,以及用作云见证的存储帐户。

将 SQL Server VM 添加到 SqlVirtualMachineGroups 资源组会启动 Windows 故障转移群集服务,以便创建群集并将这些 SQL Server VM 加入该群集。 此步骤通过“101-sql-vm-ag-setup”快速启动模板自动执行。 可通过执行以下步骤实现它:

  1. 转到 sql-vm-ag-setup 快速启动模板。 然后,选择“部署到 Azure”以在 Azure 门户中打开快速启动模板。

  2. 填写必填字段,以配置 Windows 故障转移群集元数据。 可将可选字段留空。

    下表显示了模板的所需值:

    字段
    订阅 SQL Server VM 所在的订阅。
    资源组 SQL Server VM 所在的资源组。
    故障转移群集名称 要用于新 Windows 故障转移群集的名称。
    现有 VM 列表 要加入到可用性组并成为此新群集一部分的 SQL Server VM。 请用逗号和空格分隔这些值(例如:“SQLVM1, SQLVM2”)。
    SQL Server 版本 SQL Server VM 的 SQL Server 版本。 从下拉列表中选择它。 当前仅支持 SQL Server 2016 和 SQL Server 2017 映像。
    现有的完全限定域名 SQL Server VM 所在的域的现有 FQDN。
    现有域帐户 一个现有的域用户帐户,该帐户具有在域中“创建计算机对象”的权限,因为 CNO 是在模板部署过程中创建的。 例如,域管理员帐户通常拥有足够的权限(如 account@domain.com)。 该帐户还应该属于每个 VM 上负责创建群集的本地管理员组。
    域帐户密码 上述域用户帐户的密码。
    现有 SQL 服务帐户 用于在可用性组部署过程中控制 SQL Server 服务的域用户帐户(如 account@domain.com)。
    SQL 服务密码 用于控制 SQL Server 的域用户帐户所使用的密码。
    云见证名称 将要创建并用于云见证的一个新 Azure 存储帐户。 可以修改此名称。
    _artifacts 位置 此字段默认设置,不应修改。
    _artifacts 位置 SaS 令牌 此字段特意留空。
  3. 如果你同意条款和条件,请选择“我同意上述条款和条件”复选框。 然后选择“购买”以完成快速启动模板的部署。

  4. 若要监视部署,请从顶部导航横幅的“通知”钟形图标中选择“部署”,或转到 Azure 门户中的“资源组” 。 在“设置”下选择“部署”,然后选择“Microsoft.Template”部署 。

备注

模板部署过程中提供的凭据仅在部署期间存储。 部署完成后,将删除这些密码。 如果要向群集中添加更多 SQL Server VM,需要再次提供这些密码。

配置仲裁

虽然磁盘见证是最具复原能力的仲裁选项,但它需要 Azure 共享磁盘,这对可用性组施加了一些限制。 因此,对于在 Azure VM 上的 SQL Server 中托管可用性组的群集,推荐使用云见证作为仲裁解决方案。

如果群集中的投票数为偶数,请配置最适合你的业务需求的仲裁解决方案。 有关详细信息,请参阅 SQL Server VM 上的仲裁

验证群集

故障转移群集必须通过群集验证才能得到 Microsoft 的支持。 使用首选方法(例如远程桌面协议 (RDP))连接到 VM,并验证群集是否通过验证,然后再进行下一步。 否则,群集将处于不受支持状态。

用户可使用故障转移群集管理器 (FCM) 或以下 PowerShell 命令来验证群集:

Test-Cluster –Node ("<node1>","<node2>") –Include "Inventory", "Network", "System Configuration"

创建可用性组

像平时一样使用 SQL Server Management StudioPowerShellTransact-SQL 手动创建可用性组。

重要

此时请不要创建侦听程序,因为 101-sql-vm-aglistener-setup 快速启动模板会在步骤 4 中自动创建侦听程序。

创建负载均衡器

注意

将可用性组部署到多个子网不需要负载均衡器。 在单子网环境中,在 Windows 2016 及更高版本上使用 SQL Server 2019 CU8 及更高版本的客户可以将传统的虚拟网络名称 (VNN) 侦听器和 Azure 负载均衡器替换为分布式网络名称 (DNN) 侦听器。 如果要使用 DNN,请跳过为可用性组配置 Azure 负载均衡器的所有教程步骤。

Always On 可用性组侦听器需要 Azure 负载均衡器的内部实例。 内部负载均衡器为可用性组侦听器提供“浮动”IP 地址,可以加快故障转移和重新连接的速度。 如果可用性组中的 SQL Server VM 属于同一个可用性集,则可以使用基本负载均衡器。 否则,需要使用标准负载均衡器。

重要

内部负载均衡器应与 SQL Server VM 实例位于同一虚拟网络中。

只需创建内部负载均衡器。 在步骤 4 中,101-sql-vm-aglistener-setup 快速启动模板将处理其余的配置(例如后端池、运行状况探测和负载均衡规则)。

  1. 在 Azure 门户中,打开包含 SQL Server 虚拟机的资源组。

  2. 在资源组中,选择“添加”。

  3. 搜索“负载均衡器”。 在搜索结果中,选择“负载均衡器”(由 Microsoft 发布) 。

  4. 在“负载均衡器”窗格上,选择“创建”。

  5. 在“创建负载均衡器”对话框中配置负载均衡器,如下所示:

    设置
    名称 输入用于表示负载均衡器的文本名称。 例如,输入“sqlLB”。
    类型 内部:大多数实施方案使用内部负载均衡器,它可让同一虚拟网络中的应用程序连接到可用性组。
    外部:允许应用程序通过公共 Internet 连接连接到可用性组。
    虚拟网络 选择 SQL Server 实例所在的虚拟网络。
    子网 选择 SQL Server 实例所在的子网。
    IP 地址分配 静态
    专用 IP 地址 指定子网中的某个可用 IP 地址。
    订阅 如果有多个订阅,可能会显示此字段。 选择要与此资源关联的订阅。 它通常是与可用性组的所有资源相同的订阅。
    资源组 选择 SQL Server 实例所在的资源组。
    位置 选择 SQL Server 实例所在的 Azure 位置。
  6. 选择“创建”。

重要

每个 SQL Server VM 的公共 IP 资源应有一个与标准负载均衡器兼容的标准 SKU。 若要确定 VM 公共 IP 资源的 SKU,请转到“资源组”,选择 SQL Server VM 的“公共 IP 地址”资源,并在“概述”窗格的“SKU”下面找到该值 。

创建侦听器

使用 101-sql-vm-aglistener-setup 快速启动模板自动创建可用性组侦听程序并配置内部负载均衡器。 该模板预配 Microsoft.SqlVirtualMachine/SqlVirtualMachineGroups/AvailabilityGroupListener 资源。 101-sql-vm-aglistener-setup 快速启动模板通过 SQL IaaS 代理扩展执行以下操作:

  • 为侦听器创建新的前端 IP 资源(基于在部署过程中提供的 IP 地址值)。
  • 为群集和内部负载均衡器配置网络设置。
  • 为内部负载均衡器、运行状况探测和负载均衡规则配置后端池。
  • 使用给定的 IP 地址和名称创建可用性组侦听程序。

注意

可以使用 101-sql-vm-aglistener-setup,前提是 Windows 故障转移群集是使用 101-sql-vm-ag-setup 模板创建的 。

若要配置内部负载均衡器并创建可用性组侦听程序,请执行以下操作:

  1. 转到 sql-vm-aglistener-setup 快速启动模板,然后选择“部署到 Azure”以在 Azure 门户中启动快速启动模板。

  2. 填写必填字段以配置内部负载均衡器,并创建可用性组侦听程序。 可将可选字段留空。

    下表显示了模板的所需值:

    字段
    资源组 SQL Server VM 和可用性组所在的资源组。
    现有故障转移群集名称 SQL Server VM 要加入到的群集的名称。
    现有 SQL 可用性组 SQL Server VM 所属的可用性组的名称。
    现有 VM 列表 属于上述可用性组的 SQL Server VM 的名称。 请用逗号和空格分隔名称(例如:“SQLVM1, SQLVM2”)。
    侦听器 要分配给侦听程序的 DNS 名称。 默认情况下,此模板指定名称“aglistener”,但可以对其进行更改。 名称不应超过 15 个字符。
    侦听程序端口 希望侦听程序使用的端口。 通常情况下,此端口应为默认端口 1433。 这是模板指定的端口号。 但是,如果更改了默认端口,则侦听程序端口应改用该值。
    侦听器 IP 希望侦听程序使用的 IP 地址。 此地址将在模板部署过程中创建,因此请提供一个未在使用的 IP 地址。
    现有子网 SQL Server VM 内部子网的名称(例如:default)。 可以通过以下方法确定此值:转到“资源组”,选择你的虚拟网络,在“设置”窗格中选择“子网”,然后复制“名称”下面的值 。
    现有内部负载均衡器 在步骤 3 中创建的内部负载均衡器的名称。
    探测端口 希望内部负载均衡器使用的探测端口。 该模板默认使用 59999,但可以更改此值。
  3. 如果你同意条款和条件,请选择“我同意上述条款和条件”复选框。 选择“购买”以完成快速启动模板的部署。

  4. 若要监视部署,请从顶部导航横幅的“通知”钟形图标中选择“部署”,或转到 Azure 门户中的“资源组” 。 在“设置”下选择“部署”,然后选择“Microsoft.Template”部署 。

注意

如果部署中途失败,则需要使用 PowerShell 手动删除新建的侦听程序,然后重新部署 101-sql-vm-aglistener-setup 快速启动模板。

删除侦听器

如果以后需要删除该模板配置的可用性组侦听程序,则必须通过 SQL IaaS 代理扩展执行整个操作。 由于该侦听程序是通过 SQL IaaS 代理扩展注册的,因此仅仅通过 SQL Server Management Studio 删除它是不够的。

最佳方法是在 PowerShell 中使用以下代码片段,通过 SQL IaaS 代理扩展将其删除。 这样就会从 SQL IaaS 代理扩展中删除可用性组侦听程序元数据。 并将侦听程序从可用性组中实际删除。

# Remove the availability group listener
# example: Remove-AzResource -ResourceId '/subscriptions/a1a11a11-1a1a-aa11-aa11-1aa1a11aa11a/resourceGroups/SQLAG-RG/providers/Microsoft.SqlVirtualMachine/SqlVirtualMachineGroups/Cluster/availabilitygrouplisteners/aglistener' -Force
Remove-AzResource -ResourceId '/subscriptions/<SubscriptionID>/resourceGroups/<resource-group-name>/providers/Microsoft.SqlVirtualMachine/SqlVirtualMachineGroups/<cluster-name>/availabilitygrouplisteners/<listener-name>' -Force

常见错误

本部分讨论一些已知问题及其可能的解决方法。

可用性组“<AG-Name>”的可用性组侦听程序已经存在 Azure 快速启动模板中用于可用性组侦听程序的所选可用性组已包含侦听程序。 这表明侦听程序在物理上位于可用性组内,或者其元数据仍保留在 SQL IaaS 代理扩展内。 使用 PowerShell 删除该侦听程序,然后重新部署 101-sql-vm-aglistener-setup 快速启动模板。

连接只在主要副本起作用 此行为的原因可能是 101-sql-vm-aglistener-setup 模板部署失败,使内部负载均衡器配置处于不一致状态。 验证后端池是否列出可用性集,并且是否存在运行状况探测规则和负载均衡规则。 如果缺少任何内容,则内部负载均衡器的配置将处于不一致状态。

若要解决此行为,请使用 PowerShell 删除侦听程序,通过 Azure 门户删除内部负载均衡器,然后从步骤 3 重新开始。

BadRequest - 只能更新 SQL 虚拟机列表 部署 101-sql-vm-aglistener-setup 模板时,如果通过 SQL Server Management Studio (SSMS) 删除了侦听程序,但未将其从 SQL IaaS 代理程序中删除,则可能会发生此错误。 通过 SSMS 删除侦听程序不会将侦听程序的元数据从 SQL IaaS 代理扩展序中删除。 必须通过 PowerShell 从资源提供程序中删除该侦听程序。

域帐户不存在 此错误可能有两个原因。 指定的域帐户不存在,或者缺少用户主体名称 (UPN) 数据。 101-sql-vm-ag-setup 模板要求域帐户采用 UPN 形式(即 user@domain.com),但某些域帐户可能缺少它。 如果本地用户在迁移后成为第一个域管理员帐户(此时服务器已提升为域控制器),或者如果用户是通过 PowerShell 创建的,则通常会发生这种情况。

验证帐户是否存在。 如果帐户存在,则你遇到的是第二种情况。 若要解决此问题,请执行以下操作:

  1. 在域控制器上,通过“服务器管理器”中的“工具”选项打开“Active Directory 用户和计算机”窗口。

  2. 在左侧窗格中选择“用户”以转到帐户。

  3. 右键单击该帐户,然后选择“属性”。

  4. 选择“帐户”选项卡。如果“用户登录名”框为空,则这是导致出现错误的原因。

    Blank user account indicates missing UPN

  5. 填充与用户名称匹配的“用户登录名”框,然后从下拉列表中选择适当的域。

  6. 选择“应用”以保存所做的更改,然后选择“确定”,将对话框关闭。

完成这些更改后,请尝试再次部署 Azure 快速启动模板。

后续步骤

若要了解更多信息,请参阅以下文章: