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

适用于:Azure 上的 SQL Server

提示

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

在 Azure 虚拟机上,群集使用负载均衡器来保存每次都需要位于一个群集节点上的 IP 地址。 在此解决方案中,负载均衡器保留 Azure 中的群集化资源使用的虚拟网络名称 (VNN) 的 IP 地址。

本文介绍了如何使用 Azure 负载均衡器服务配置负载均衡器。 负载均衡器会使用 Azure VM 上的 SQL Server 将流量路由到你的故障转移群集实例,以实现高可用性和灾难恢复 (HADR)。

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

先决条件

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

创建负载均衡器

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

  • 内部:只能从网络内部的专用资源访问内部负载均衡器。 配置内部负载均衡器及其规则时,请将 FCI IP 地址用作前端 IP 地址。

  • 外部:外部负载均衡器可将来自公共资源的流量路由到内部资源。 配置外部负载均衡器时,不能使用公共 IP 地址(如 FCI IP 地址)。

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

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

  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 front-end IP configuration.

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

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

    Screenshot of the Azure portal that shows the page for configuring a front-end IP address.

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

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

配置后端池

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

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

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

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

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

  6. 在“虚拟机”下,选择将作为群集节点参与操作的虚拟机。 请务必包括将承载 FCI 的所有虚拟机。

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

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

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

配置运行状况探测

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

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

    • 名称:运行状况探测的名称。
    • 协议:TCP。
    • 端口:准备 VM 时你在防火墙中为运行状况探测创建的端口。 本文中的示例使用的是 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 = "<SQL Server FCI 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 SQL Server FCI IP 地址的资源名称。 在“故障转移群集管理器”>“角色”中“SQL Server FCI”角色的“服务器名称”下,右键单击 IP 地址资源并选择单击“属性”。 正确的值位于“常规”选项卡的“名称”下。
ILBIP 内部负载均衡器的 IP 地址。 此地址在 Azure 门户中配置为内部负载均衡器的前端地址。 这也是 SQL Server FCI 的 IP 地址。 可在“故障转移群集管理器”中找到该地址,它与 IPResourceName 的值位于同一属性页。
ProbePort 在负载均衡器的运行状况探测中配置的探测端口。 任何未使用的 TCP 端口都有效。
SubnetMask 群集参数的子网掩码。 它必须是 TCP/IP 广播地址:255.255.255.255

设置群集探测后,可在 PowerShell 中看到所有群集参数。 运行此脚本:

Get-ClusterResource $IPResourceName | Get-ClusterParameter

修改连接字符串

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

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

使用 PowerShell 修改 RegisterAllProvidersIpHostRecordTTL 设置:

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

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

提示

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

测试故障转移

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

  1. 使用远程桌面协议 (RDP) 连接到 SQL Server 群集节点之一。
  2. 打开“故障转移群集管理器”。 选择“角色”。 观察哪个节点拥有 SQL Server FCI 角色。
  3. 右键单击“SQL Server FCI”角色。
  4. 选择“移动”,再选择“最佳节点” 。

“故障转移群集管理器”显示该角色,其资源脱机。 然后资源会移动,并在另一个节点上恢复联机。

测试连接

若要测试连接,请登录到同一虚拟网络中的另一个虚拟机。 打开“SQL Server Management Studio”并连接到 SQL Server FCI 名称。

注意

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

后续步骤

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