为 AG VNN 侦听器配置 Azure 负载均衡器 - Azure VM 上的 SQL Server

适用于:Azure 上的 SQL Server

提示

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

在 Azure 虚拟机上,群集使用负载均衡器来保存每次都需要位于一个群集节点上的 IP 地址。 在此解决方案中,当 SQL Server VM 在单个子网中时,负载均衡器保存 Always On 可用性组的虚拟网络名称 (VNN) 侦听器的 IP 地址。

本文介绍了如何使用 Azure 负载均衡器服务配置负载均衡器。 负载均衡器会使用 Azure VM 上的 SQL Server 将流量路由到可用性组侦听程序,以实现高可用性和灾难恢复 (HADR)。

对于使用 SQL Server 2019 CU8 及更高版本的客户的替代连接选项,请考虑改用分布式网络名称 (DNN) 侦听器。 DNN 侦听器提供了简化的配置和改进的故障转移。

先决条件

在完成本文中的步骤之前,应已做好以下准备:

创建负载均衡器

可以创建以下任一类型的负载均衡器:

  • 内部:只能从网络内部的专用资源访问内部负载均衡器。 在配置内部负载均衡器及其规则期间,请将可用性组侦听程序所用的同一个 IP 地址用作前端 IP 地址。

  • 外部:外部负载均衡器可将来自公共资源的流量路由到内部资源。 配置外部负载均衡器时,不能使用可用性组侦听程序所用的同一个 IP 地址,因为侦听器 IP 地址不能是公共 IP 地址。

    若要使用外部负载均衡器,请以逻辑方式在可用性组所在的同一子网中分配一个不与其他任何 IP 地址冲突的 IP 地址。 使用此地址作为负载均衡规则的前端 IP 地址。

重要

2025 年 9 月 30 日,Azure 负载均衡器的基本 SKU 将停用。 有关详细信息,请查看官方公告。 如果当前使用的是基本负载均衡器,请在停用日期之前将其升级到标准负载均衡器。 有关指导,请查看升级负载均衡器

若要创建负载均衡器,请执行以下操作:

  1. Azure 门户中,转到包含虚拟机的资源组。

  2. 选择 添加 。 在 Azure 市场中搜索“负载均衡器”。 选择“负载均衡器”。

  3. 选择“创建”。

  4. 在“创建负载均衡器”中的“基本信息”选项卡上,使用以下值设置负载均衡器:

    • 订阅:Azure 订阅。
    • 资源组:包含你的虚拟机的资源组。
    • 名称:标识负载均衡器的名称。
    • 区域:包含你的虚拟机的 Azure 位置。
    • SKU:标准。
    • 类型:公共或内部。 内部负载均衡器是可以从虚拟网络内部访问的。 大多数 Azure 应用程序可以使用内部负载均衡器。 如果应用程序需要通过 Internet 直接访问 SQL Server,请使用公共负载均衡器。

    Screenshot of the Azure portal that shows the page for basic information about a load balancer.

  5. 选择“下一步: 前端 IP 配置”。

  6. 选择“添加前端 IP 配置”。

    Screenshot of the Azure portal that shows the button for adding a frontend IP configuration.

  7. 使用以下值设置前端 IP 地址:

    • 名称:标识前端 IP 配置的名称。
    • 虚拟网络:虚拟机所在的网络。
    • 子网:虚拟机所在的同一子网。
    • 分配:静态。
    • IP 地址:你分配给群集化网络资源的 IP 地址。
    • 可用性区域:要将 IP 地址部署到的可选可用性区域。

    Screenshot of the Azure portal that shows the page for configuring a frontend IP address.

  8. 选择“添加”以创建前端 IP 地址。

  9. 选择“查看 + 创建”以创建负载均衡器。

配置后端池

  1. 返回到包含虚拟机的 Azure 资源组,找到新的负载均衡器。 可能需要在资源组中刷新视图。 选择负载均衡器。

  2. 依次选择“后端池”、“+ 添加”。

  3. 对于“名称”,请提供后端池的名称。

  4. 在“后端池配置”处,选择“NIC”。

  5. 选择“添加”将该后端池与包含 VM 的可用性集进行关联。

  6. 在“虚拟机”下,选择将作为群集节点参与操作的虚拟机。 请务必包含要托管该可用性组的所有虚拟机。

    仅添加每个 VM 的主 IP 地址。 请勿添加任何次要 IP 地址。

  7. 选择“添加”将虚拟机添加到后端池。

  8. 选择“保存”以创建后端池。

配置运行状况探测

  1. 在负载均衡器的窗格上,选择“运行状况探测”。

  2. 在“添加运行状况探测”窗格上, 设置以下参数:

    • 名称:运行状况探测的名称。
    • 协议:TCP。
    • 端口:在运行状况探测防火墙中创建的端口。 本文中的示例使用的是 TCP 端口 59999。
    • 间隔:5 秒。
  3. 选择 添加

设置负载均衡规则

  1. 在负载均衡器的窗格上,选择“负载均衡规则”。

  2. 选择 添加

  3. 设置以下参数:

    • 名称:负载均衡规则的名称。
    • 前端 IP 地址:配置前端时设置的 IP 地址。
    • 后端池:包含负载均衡器目标虚拟机的后端池。
    • HA 端口:对于 TCP 和 UDP 协议,在所有端口上启用负载均衡。
    • 协议:TCP。
    • 端口:SQL Server TCP 端口。 默认值为 1433
    • 后端端口:与启用“浮动 IP (直接服务器返回)”时使用的“端口”值相同的端口。
    • 运行状况探测:前面配置的运行状况探测。
    • 会话持久性:无。
    • 空闲超时(分钟):4。
    • 浮动 IP (直接服务器返回) :已启用。
  4. 选择“保存”。

配置群集探测

在 PowerShell 中设置群集探测的端口参数。

使用环境中的值更新以下脚本中的变量。 从脚本中删除尖括号(<>)。

$ClusterNetworkName = "<Cluster Network Name>"
$IPResourceName = "<AG Listener IP Address Resource Name>" 
$ILBIP = "<n.n.n.n>" 
[int]$ProbePort = <nnnnn>

Import-Module FailoverClusters

Get-ClusterResource $IPResourceName | Set-ClusterParameter -Multiple @{"Address"="$ILBIP";"ProbePort"=$ProbePort;"SubnetMask"="255.255.255.255";"Network"="$ClusterNetworkName";"EnableDhcp"=0}

下表介绍了需要更新的值:

变量
ClusterNetworkName Windows Server 故障转移群集的网络名称。 在“故障转移群集管理器”>“网络”中,右键单击该网络并选择“属性”。 正确的值位于“常规”选项卡的“名称”下。
IPResourceName AG 侦听器 IP 地址的资源名称。 在“故障转移群集管理器”>“角色”中可用性组角色的“服务器名称”下,右键单击 IP 地址资源并选择“属性” 。 正确的值位于“常规”选项卡的“名称”下。
ILBIP 内部负载均衡器的 IP 地址。 此地址在 Azure 门户中配置为内部负载均衡器的前端地址。 此地址是可用性组侦听器所用的同一个 IP 地址。 可在“故障转移群集管理器”中找到该地址,它与 IPResourceName 的值位于同一属性页。
ProbePort 在负载均衡器的运行状况探测中配置的探测端口。 任何未使用的 TCP 端口都有效。
SubnetMask 群集参数的子网掩码。 它必须是 TCP/IP 广播地址:255.255.255.255

在 IP 地址资源脱机并再次联机之前,所做的更改不会生效。 可执行可用性组的故障转移,使此更改生效。 设置群集探测后,可在 PowerShell 中看到所有群集参数。 运行此脚本:

Get-ClusterResource $IPResourceName | Get-ClusterParameter

修改连接字符串

对于支持它的客户端,请将 MultiSubnetFailover=True 添加到连接字符串。 虽然不需要 MultiSubnetFailover 连接选项,但它提供了更快进行子网故障转移的优势。 这是因为客户端驱动程序会尝试为每个 IP 地址并行打开一个 TCP 套接字。 客户端驱动程序会等待第一个 IP 地址通过成功进行响应。 成功响应后,客户端驱动程序会使用该 IP 地址进行连接。

如果客户端不支持 MultiSubnetFailover 参数,则可以修改 RegisterAllProvidersIPHostRecordTTL 设置,防止故障转移后连接延迟。

使用 PowerShell 修改 RegisterAllProvidersIpHostRecordTTL 设置:

Get-ClusterResource yourListenerName | Set-ClusterParameter RegisterAllProvidersIP 0  
Get-ClusterResource yourListenerName|Set-ClusterParameter HostRecordTTL 300 

若要了解详细信息,请参阅有关 SQL Server 中侦听器连接超时的文档

提示

  • 将连接字符串中的 MultiSubnetFailover parameter 设置为 true,即使对于跨单个子网的 HADR 解决方案也是如此。 此设置支持将来跨子网,而无需更新连接字符串。
  • 默认情况下,客户端缓存 20 分钟的群集 DNS 记录。 通过减少 HostRecordTTL,可以减少缓存的记录的生存时间 (TTL)。 然后,旧客户端可以更快地重新连接。 因此,减少 HostRecordTTL 设置可能会增加流向 DNS 服务器的流量。

测试故障转移

测试群集化资源的故障转移以验证群集功能:

  1. 打开 SQL Server Management Studio 并连接到你的可用性组侦听程序。
  2. 在“对象资源管理器”中展开“Always On 可用性组”。
  3. 右键单击该可用性组,然后选择“故障转移”。
  4. 按照向导提示将该可用性组故障转移到一个次要副本。

当副本切换角色并且两者同步后,故障转移成功。

测试连接

若要测试连接,请登录到同一虚拟网络中的另一个虚拟机。 打开 SQL Server Management Studio 并连接到可用性组侦听程序。

注意

如果需要,可以下载 SQL Server Management Studio

后续步骤

在创建 VNN 后,请考虑优化 SQL Server VM 的群集设置

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