配置负载均衡器和可用性组侦听程序(Azure VM 上的 SQL Server)
提示
部署可用性组的方法有很多种。 通过在同一 Azure 虚拟网络中的多个子网中创建 SQL Server 虚拟机 (VM),可以简化部署,使 Always On 可用性组不再需要 Azure 负载均衡器或分布式网络名称 (DNN)。 如果已在单个子网中创建可用性组,则可以将其迁移到多子网环境。
本文说明如何在使用 Azure 资源管理器运行的单个子网中的 Azure 虚拟机中为 SQL Server Always On 可用性组创建负载均衡器。 当 SQL Server 实例位于 Azure 虚拟机上时,可用性组需要负载均衡器。 负载均衡器存储可用性组侦听器的 IP 地址。 如果可用性组跨多个区域,则每个区域都需要一个负载均衡器。
若要完成此任务,需要在使用资源管理器运行的 Azure VM 中部署一个 SQL Server Always On 可用性组。 这两个 SQL Server 虚拟机必须属于同一个可用性集。
如果需要,可以手动配置可用性组。
本文要求事先配置可用性组。
查看相关文章:
执行本文中的每个步骤可以在 Azure 门户中创建和配置负载均衡器。 完成该过程后,将配置群集,以将负载均衡器中的 IP 地址用于可用性组侦听器。
创建并配置负载均衡器
在任务的这一部分,执行以下步骤:
- 在 Azure 门户中创建负载均衡器并配置 IP 地址。
- 配置后端池。
- 创建探测。
- 设置负载均衡规则。
注意
如果 SQL Server 实例在多个资源组和区域中,请执行每个步骤两次,在每个资源组中各执行一次。
重要
2025 年 9 月 30 日,Azure 负载均衡器的基本 SKU 将停用。 有关详细信息,请查看官方公告。 如果当前使用的是基本负载均衡器,请在停用日期之前将其升级到标准负载均衡器。 有关指导,请查看升级负载均衡器。
步骤 1:创建负载均衡器并配置 IP 地址
首先,请创建负载均衡器。
在 Azure 门户中,打开包含 SQL Server 虚拟机的资源组。
在资源组中选择“+ 创建”。
搜索“负载均衡器”。 在搜索结果中选择“负载均衡器”(由 Microsoft 发布) 。
在“负载均衡器”窗格上,选择“创建”。
配置负载均衡器的以下参数。
设置 字段 订阅 使用虚拟机所在的同一个订阅。 资源组 使用虚拟机所在的同一资源组。 名称 为负载均衡器使用文本名称,例如 sqlLB。 区域 使用与虚拟机相同的区域。 SKU Standard 类型 内部 “Azure 门户”窗格应如下所示:
选择“下一步: 前端 IP 配置”
选择“添加前端 IP 配置”
使用以下值设置前端 IP:
- 名称:标识前端 IP 配置的名称
- 虚拟网络:虚拟机所在的网络。
- 子网:虚拟机所在的同一子网。
- IP 地址分配:静态。
- IP 地址:使用子网中的可用地址。 将该地址用于可用性组侦听程序。 请注意,这不同于群集 IP 地址。
- 可用性区域:(可选)选择一个可用性区域来部署你的 IP。
下图显示了添加前端 IP 配置 UI:
选择“添加”以创建前端 IP。
选择“查看 + 创建”以验证配置,然后选择“创建”以创建负载均衡器和前端 IP。
Azure 将创建负载均衡器。 该负载均衡器属于特定的网络、子网、资源组和位置。 在 Azure 完成任务后,请在 Azure 中验证负载均衡器设置。
若要配置负载均衡器,需要创建后端池、探测,并设置负载均衡规则。 在 Azure 门户中进行这些操作。
步骤 2:配置后端池
Azure 将后端地址池称作后端池。 在本例中,后端池是可用性组中两个 SQL Server 实例的地址。
在 Azure 门户中,转到可用性组。 可能需要刷新视图才能看到新建的负载均衡器。
依次选择负载均衡器、“后端池”和“+添加” 。
为后端池提供名称。
对于“后端池配置”,选择“NIC”。
选择“添加”将该后端池与包含 VM 的可用性集进行关联。
在“虚拟机”下,选择将托管可用性组副本的 SQL Server 虚拟机。
注意
如果未指定这两个虚拟机,则仅与主要副本的连接会成功。
选择“添加”将虚拟机添加到后端池。
选择“保存”以创建后端池。
Azure 将更新后端地址池的设置。 现在,可用性集具有包含两个 SQL Server 实例的池。
步骤 3:创建探测
探测定义 Azure 如何确认哪一个 SQL Server 实例当前拥有可用性组侦听器。 Azure 根据创建探测时定义的端口上的 IP 地址来探测服务。
依次选择负载均衡器、“运行状况探测”和“+添加” 。
对侦听器运行状况探测进行如下设置:
设置 说明 示例 名称 文本 SQLAlwaysOnEndPointProbe 协议 选择 TCP TCP 端口 任何未使用的端口 59999 时间间隔 尝试探测的间隔时间,以秒为单位 5 选择“添加”以设置运行状况探测。
注意
确保指定的端口已在两个 SQL Server 实例的防火墙上打开。 这两个实例需要所用 TCP 端口的入站规则。 有关详细信息,请参阅添加或编辑防火墙规则。
Azure 创建探测,并使用它来测试哪个 SQL Server 实例具有可用性组的侦听器。
步骤 4:设置负载均衡规则
负载均衡规则会配置负载均衡器将流量路由到 SQL Server 实例的方式。 对此负载均衡器,需要启用直接服务器返回,因为在两个 SQL Server 实例中,每次只有一个拥有可用性组侦听器资源。
依次选择负载均衡器、“负载均衡规则”和“+添加” 。
对侦听器负载均衡器规则进行如下设置。
设置 说明 示例 名称 文本 SQLAlwaysOnEndPointListener “前端 IP 地址” 选择地址 使用创建负载均衡器时所创建的地址。 后端池 选择后端池 选择包含负载均衡器目标虚拟机的后端池。 协议 选择 TCP TCP 端口 使用可用性组侦听程序的端口 1433 后端端口 为直接服务器返回设置浮动 IP 时,不会使用此字段 1433 运行状况探测 为探测指定的名称 SQLAlwaysOnEndPointProbe 会话持久性 下拉列表 无 空闲超时 将 TCP 连接保持打开的分钟数 4 浮动 IP (直接服务器返回) 流拓扑和 IP 地址映射方案 已启用 警告
直接服务器返回是在创建过程中设置的, 无法进行更改。
注意
可能需要在窗格中向下滚动才能查看所有设置。
选择“保存”以设置侦听器负载均衡规则。
Azure 将配置负载均衡规则。 负载均衡器现已配置为将流量路由到托管可用性组侦听器的 SQL Server 实例。
此时,资源组有一个连接到这两个 SQL Server 计算机的负载均衡器。 负载均衡器还包含 SQL Server Always On 可用性组侦听器的 IP 地址,以便任一计算机可以响应针对可用性组的请求。
注意
如果 SQL Server 实例位于两个不同的区域,请在另一个区域重复上述步骤。 每个区域都需要一个负载均衡器。
添加 Windows Server 故障转移群集 (WSFC) 的群集核心 IP 地址
WSFC IP 地址也必须在负载均衡器上。 如果使用的是 Windows Server 2019,请跳过此过程,因为群集将创建“分布式服务器名称”而不是“群集网络名称”。
在 Azure 门户中转到相同的 Azure 负载均衡器。 选择“前端 IP 配置”和“+添加” 。 请使用在群集核心资源中为 WSFC 配置的 IP 地址。 将 IP 地址设置为静态。
在负载均衡器上,选择“运行状况探测”,然后选择“+添加” 。
对 WSFC 群集核心 IP 地址运行状况探测进行如下设置:
设置 说明 示例 名称 文本 WSFCEndPointProbe 协议 选择 TCP TCP 端口 任何未使用的端口 58888 时间间隔 尝试探测的间隔时间,以秒为单位 5 选择“添加”以设置运行状况探测。
设置负载均衡规则。 选择“负载均衡规则”和“+添加” 。
将群集核心 IP 地址负载均衡规则进行如下设置。
设置 说明 示例 名称 文本 WSFCEndPoint “前端 IP 地址” 选择地址 使用配置 WSFC IP 地址时所创建的地址。 这不同于侦听器 IP 地址 后端池 选择后端池 选择包含负载均衡器目标虚拟机的后端池。 协议 选择 TCP TCP 端口 使用群集 IP 地址的端口。 这是可用的端口,不用于侦听器探测端口。 58888 后端端口 为直接服务器返回设置浮动 IP 时,不会使用此字段 58888 探测 为探测指定的名称 WSFCEndPointProbe 会话持久性 下拉列表 无 空闲超时 将 TCP 连接保持打开的分钟数 4 浮动 IP (直接服务器返回) 流拓扑和 IP 地址映射方案 已启用 警告
直接服务器返回是在创建过程中设置的, 无法进行更改。
选择“确定”以设置负载均衡规则。
将群集配置为使用负载均衡器 IP 地址
下一步是在群集上配置侦听器,然后将侦听器联机。 执行以下步骤:
在故障转移群集上创建可用性组侦听器。
使侦听器联机。
步骤 5:在故障转移群集上创建可用性组侦听器
在此步骤中,在故障转移群集管理器和 SQL Server Management Studio 中手动创建可用性组侦听器。
可用性组侦听器是 SQL Server 可用性组侦听的 IP 地址和网络名称。 创建可用性组侦听程序:
-
a. 使用 RDP 连接到托管主副本的 Azure 虚拟机。
b. 打开“故障转移群集管理器”。
c. 选择“网络”节点,并记下群集网络名称。 在 PowerShell 脚本的
$ClusterNetworkName
变量中使用此名称。 在下图中,群集网络名称为“群集网络 1”: 添加客户端接入点。 客户端接入点是应用程序用来连接到可用性组中的数据库的网络名称。
a. 在“故障转移群集管理器”中,展开群集名称,然后选择“角色”。
b. 在“角色”窗格中,右键单击可用性组名称,然后选择“添加资源”>“客户端接入点”。
c. 在“名称”框中,创建新侦听器的名称。 新侦听器的名称是应用程序用来连接 SQL Server 可用性组中数据库的网络名称。
d. 要完成侦听器的创建,请选择“下一步”两次,然后选择“完成”。 此时不要使侦听器或资源联机。
使可用性组的群集角色脱机。 在“故障转移群集管理器”的“角色”下,右键单击角色,然后选择“停止角色”。
-
a. 选择“资源”选项卡,并展开创建的客户端接入点。 客户端接入点处于脱机状态。
b. 右键单击 IP 资源,然后选择“属性”。 记下 IP 地址的名称,将其用在 PowerShell 脚本的
$IPResourceName
变量中。c. 在“IP 地址”下,选择“静态 IP 地址”。 将 IP 地址设置为在 Azure 门户中设置负载均衡器地址时所用的同一地址。
-
a. 在故障转移群集管理器中,选择“角色”,然后选择可用性组。
b. 在“资源”选项卡的“其他资源”下,右键单击可用性组资源,然后选择“属性”。
c. 在“依赖项”选项卡上,添加客户端接入点(侦听器)的名称。
d. 选择“确定”。
-
a. 在故障转移群集管理器中,选择“角色”,然后选择可用性组。
b. 在“资源”选项卡上,右键单击“服务器名称”下的客户端接入点,然后选择“属性”。
c. 选择“依赖项”选项卡。验证 IP 地址是否为依赖项。 如果不是,则设置 IP 地址的依赖项。 如果列出了多个资源,请验证 IP 地址具有 OR 而不是 AND 依赖项。 然后选择“确定” 。
提示
可以验证是否正确配置了依赖项。 在故障转移群集管理器中,转到“角色”,右键单击可用性组,选择“更多操作”,然后选择“显示依赖项报告”。 正确配置依赖项后,可用性组将依赖于网络名称,网络名称将依赖于 IP 地址。
-
a. 将以下 PowerShell 脚本复制到某个 SQL Server 实例。 请更新环境的变量。
$ClusterNetworkName
通过选择“网络”,找到“故障转移群集管理器”中的名称,右键单击网络,并选择“属性”。 $ClusterNetworkName 位于“常规”选项卡上的“名称”下。$IPResourceName
是故障转移群集管理器中 IP 地址资源的名称。 通过选择“角色”在“故障转移群集管理器”中找到此项,选择“SQL Server AG 或 FCI 名称”,选择“服务器名称”下的“资源”选项卡,右键单击 IP 地址资源并选择“属性”。 正确的值位于“常规”选项卡的“名称”下。$ListenerILBIP
是在 Azure 负载均衡器上为可用性组侦听程序创建的 IP 地址。 在与 SQL Server AG/FCI 侦听器资源名称相同的属性页上,在故障转移群集管理器中找到 $ListenerILBIP。$ListenerProbePort
是在 Azure 负载均衡器上为可用性组侦听程序配置的端口,例如 59999。 任何未使用的 TCP 端口都有效。
$ClusterNetworkName = "<MyClusterNetworkName>" # The cluster network name. Use Get-ClusterNetwork on Windows Server 2012 or later to find the name. $IPResourceName = "<IPResourceName>" # The IP address resource name. $ListenerILBIP = "<n.n.n.n>" # The IP address of the internal load balancer. This is the static IP address for the load balancer that you configured in the Azure portal. [int]$ListenerProbePort = <nnnnn> Import-Module FailoverClusters Get-ClusterResource $IPResourceName | Set-ClusterParameter -Multiple @{"Address"="$ListenerILBIP";"ProbePort"=$ListenerProbePort;"SubnetMask"="255.255.255.255";"Network"="$ClusterNetworkName";"EnableDhcp"=0}
b. 通过在某个群集节点上运行 PowerShell 脚本设置群集参数。
注意
如果 SQL Server 实例位于不同的区域,则需要运行 PowerShell 脚本两次。 第一次运行时,请从第一个区域中选择
$ListenerILBIP
和$ListenerProbePort
值。 第二次运行时,请从第二个区域中选择$ListenerILBIP
和$ListenerProbePort
值。 每个区域的群集网络名称和群集 IP 资源名称也不同。 使可用性组的群集角色联机。 在“故障转移群集管理器”的“角色”下,右键单击角色,然后选择“启动角色”。
如有必要,请重复上述步骤,为 Windows Server 故障转移群集的 IP 地址设置群集参数:
获取 Windows Server 故障转移群集的 IP 地址名称。 在“故障转移群集管理器”中的“群集核心资源”下,找到“服务器名称”。
右键单击“IP 地址”,然后选择“属性”。
从“名称”中复制 IP 地址的名称。 它可能是群集 IP 地址。
-
a. 将以下 PowerShell 脚本复制到某个 SQL Server 实例。 请更新环境的变量。
$ClusterCoreIP
是在 Azure 负载均衡器上为 Windows Server 故障转移群集核心群集资源创建的 IP 地址。 它不同于可用性组侦听程序的 IP 地址。$ClusterProbePort
是在 Azure 负载均衡器上为 Windows Server 故障转移群集的运行状况探测配置的端口。 它不同于可用性组侦听程序的探测。
$ClusterNetworkName = "<MyClusterNetworkName>" # The cluster network name. Use Get-ClusterNetwork on Windows Server 2012 or later to find the name. $IPResourceName = "<ClusterIPResourceName>" # The IP address resource name. $ClusterCoreIP = "<n.n.n.n>" # The IP address of the cluster IP resource. This is the static IP address for the load balancer that you configured in the Azure portal. [int]$ClusterProbePort = <nnnnn> # The probe port from WSFCEndPointprobe in the Azure portal. This port must be different from the probe port for the availability group listener. Import-Module FailoverClusters Get-ClusterResource $IPResourceName | Set-ClusterParameter -Multiple @{"Address"="$ClusterCoreIP";"ProbePort"=$ClusterProbePort;"SubnetMask"="255.255.255.255";"Network"="$ClusterNetworkName";"EnableDhcp"=0}
b. 通过在某个群集节点上运行 PowerShell 脚本设置群集参数。
如果将任何 SQL 资源配置为使用介于 49152 和 65536 之间的端口(TCP/IP 的默认动态端口范围),请为每个端口添加排除项。 此类资源可能包括:
- SQL Server 数据库引擎
- Always On 可用性组侦听程序
- 故障转移群集实例的运行状况探测
- 数据库镜像终结点
- 群集核心 IP 资源
添加排除项将防止其他系统进程被动态地分配到相同端口。 对于这种场景,应在所有群集节点中配置以下排除项:
netsh int ipv4 add excludedportrange tcp startport=58888 numberofports=1 store=persistent
netsh int ipv4 add excludedportrange tcp startport=59999 numberofports=1 store=persistent
请务必在端口未使用时配置端口排除项。 否则命令将失败,并显示类似“进程无法访问该文件,因为另一个进程正在使用该文件”的消息。若要确认正确配置了排除项,请使用以下命令:netsh int ipv4 show excludedportrange tcp
。
警告
可用性组侦听程序的运行状况探测的端口必须不同于群集核心 IP 地址的运行状况探测的端口。 在这些示例中,侦听器端口为 59999,群集核心 IP 地址的运行状况探测端口为 58888。 这两个端口都要求“允许入站”防火墙规则。
验证侦听器的配置
如果正确配置了群集资源和依赖项,应能够查看 SQL Server Management Studio 中的侦听器。 若要设置侦听器端口,请执行以下步骤:
启动 SQL Server Management Studio,并连接到主副本。
转到“Always On 高可用性”>“可用性组”>“可用性组侦听器”。
现在应看到在故障转移群集管理器中创建的侦听器名称。
右键单击该侦听器名称,然后选择“属性”。
在“端口”框中,通过使用先前使用的 $EndpointPort 为可用性组侦听程序指定端口号(默认值为 1433),然后选择“确定”。
现在,在 Resource Manager 模式下运行的 Azure 虚拟机中有了一个可用性组。
测试与侦听器的连接
通过执行以下步骤测试连接:
使用远程桌面协议 (RDP) 连接到同一虚拟网络中不拥有副本的 SQL Server 实例。 此服务可以是群集中的其他 SQL Server 实例。
使用 sqlcmd 实用工具测试连接。 例如,以下脚本通过侦听器与 Windows 身份验证来与主副本建立 sqlcmd 连接:
sqlcmd -S <listenerName> -E
SQLCMD 连接会自动连接到托管主副本的 SQL Server 实例。
为其他可用性组创建一个 IP 地址
每个可用性组使用单独的侦听器。 每个侦听器都有自己的 IP 地址。 使用同一个负载均衡器以保留其他侦听器的 IP 地址。 仅将 VM 的主要 IP 地址添加到负载均衡器的后端池,因为 VM 的次要 IP 地址不支持浮动 IP。
若要使用 Azure 门户将 IP 地址添加到负载均衡器,请执行以下步骤:
在 Azure 门户中,打开包含负载均衡器的资源组,然后选择负载均衡器。
在“设置”下,依次选择“前端 IP 配置”、“+ 添加”。
在“添加前端 IP 地址”下,为前端分配名称。
验证“虚拟网络”和“子网”是否与 SQL Server 实例相同。
设置侦听器的 IP 地址。
提示
可将 IP 地址设置为静态,并键入子网中当前未使用的地址。 或者可将 IP 地址设置为动态,并保存新的前端 IP 池。 执行此操作时,Azure 门户会自动向池分配可用的 IP 地址。 然后可以重新打开前端 IP 池,并将分配更改为静态。
选择“添加”,保存侦听器的 IP 地址。
通过在“设置”下选择“运行状况探测”添加运行状况探测,然后使用以下设置:
设置 值 名称 用于标识探测的名称。 协议 TCP 端口 一个未使用的 TCP 端口,必须在所有虚拟机上可用。 此端口不能用于任何其他用途。 两个侦听器不能使用相同的探测端口。 间隔 探测尝试之间的时间长短。 使用默认值 (5)。 选择“添加”以保存探测。
创建负载均衡规则。 在“设置”下,依次选择“负载均衡规则”、“添加”。
使用以下设置配置新的负载均衡规则:
设置 值 名称 用于标识负载均衡规则的名称。 “前端 IP 地址” 选择所创建的 IP 地址。 后端池 包含具有 SQL Server 实例的虚拟机的池。 协议 TCP 端口 使用 SQL Server 实例正在使用的端口。 在不更改的情况下,默认实例使用端口 1433。 后端端口 使用与“端口”相同的值。 运行状况探测 选择所创建的探测。 会话暂留 无 空闲超时(分钟) 默认值 (4) 浮动 IP (直接服务器返回) 已启用
将可用性组配置为使用新 IP 地址
若要完成配置群集,请重复配置第一个可用性组时所遵照的步骤。 也就是说,将群集配置为使用新 IP 地址。
为侦听器添加 IP 地址后,可执行以下步骤来配置其他可用性组:
验证两个 SQL Server 虚拟机上新 IP 地址的探测端口是否处于打开状态。
-
重要
创建 IP 地址时,请使用已添加到负载均衡器的 IP 地址。
如果位于辅助副本 VM 上且无法连接到侦听器,则可能是探测端口未正确配置。
可以使用以下脚本来验证是否已为可用性组正确配置探测端口:
Clear-Host
Get-ClusterResource `
| Where-Object {$_.ResourceType.Name -like "IP Address"} `
| Get-ClusterParameter `
| Where-Object {($_.Name -like "Network") -or ($_.Name -like "Address") -or ($_.Name -like "ProbePort") -or ($_.Name -like "SubnetMask")}
为分布式可用性组添加负载均衡规则
如果分布式可用性组中使用了可用性组,则负载均衡器需应用其他规则。 此规则会存储分布式可用性组侦听器所用的端口。
重要
此步骤仅适用于分布式可用性组中未涉及到任何可用性组的情况。
在参与到分布式可用性组的每个服务器上,针对分布式可用性组侦听器 TCP 端口创建一个入站规则。 在很多示例中,文档都使用 5022。
在 Azure 门户中,依次选择负载均衡器、“负载均衡规则”、“+添加”。
通过以下设置创建负载均衡规则:
设置 值 名称 用于定义分布式可用性组的负载均衡规则的名称。 “前端 IP 地址” 与可用性组使用相同的前端 IP 地址。 后端池 包含具有 SQL Server 实例的虚拟机的池。 协议 TCP 端口 5022 - 用于 分布式可用性组终结点侦听器 的端口。
可为任何可用端口。后端端口 5022 - 使用与“端口”相同的值。 运行状况探测 选择所创建的探测。 会话暂留 无 空闲超时(分钟) 默认值 (4) 浮动 IP (直接服务器返回) 已启用
在参与到分布式可用性组的其他可用性组上,针对负载均衡器重复这些步骤。
如果使用 Azure 网络安全组来限制访问权限,请确保允许规则包括:
- 后端 SQL Server VM IP 地址
- 负载均衡器浮动 AG 侦听程序的 IP 地址
- 群集核心 IP 地址(如果适用)。