Azure VM 上的SQL Server
提示
部署可用性组的方法有很多种。 在同一Azure虚拟网络中的
在Azure虚拟机上,群集使用负载均衡器来保存需要一次位于一个群集节点上的 IP 地址。 在此解决方案中,当SQL Server VM 位于单个子网中时,负载均衡器会保留 AlwaysOn 可用性组的虚拟网络名称(VNN)侦听器的 IP 地址。
本文介绍如何使用 Azure Load Balancer 服务配置负载均衡器。 负载均衡器将流量路由到 Azure 虚拟机上的 SQL Server 的可用性组侦听器,以实现高可用性和灾难恢复(HADR)。
对于使用 SQL Server 2019 CU8 及更高版本的客户,请考虑改用 分布式网络名称 (DNN) 侦听器。 DNN 侦听器提供了简化的配置和改进的故障转移。
先决条件
在完成本文中的步骤之前,应已做好以下准备:
- 确定Azure Load Balancer是可用性组的适当 连接选项。
- 安装了最新版本的 PowerShell。
创建负载均衡器
可以创建以下任一类型的负载均衡器:
内部:只有专用资源才能访问内部负载均衡器。 在配置内部负载均衡器及其规则期间,请将可用性组侦听程序所用的同一个 IP 地址用作前端 IP 地址。
外部:外部负载均衡器将流量从公共资源路由到内部资源。 配置外部负载均衡器时,不能使用可用性组侦听程序所用的同一个 IP 地址,因为侦听器 IP 地址不能是公共 IP 地址。
若要使用外部负载均衡器,请以逻辑方式在可用性组所在的同一子网中分配一个不与其他任何 IP 地址冲突的 IP 地址。 使用此地址作为负载均衡规则的前端 IP 地址。
注意
基本负载均衡器已停用。 对于新部署,请使用标准负载均衡器。 如果有使用基本负载均衡器的现有部署, 请升级到标准负载均衡器。
若要创建负载均衡器,请执行以下操作:
在 Azure 门户中,转到包含虚拟机的资源组。
选择 添加 。 搜索 Azure Marketplace 中的 负载均衡器。 选择 Load Balancer。
选择“创建”。
在“创建负载均衡器”中的“基本信息”选项卡上,使用以下值设置负载均衡器:
- Subscription:您的Azure订阅。
- 资源组:包含你的虚拟机的资源组。
- 名称:标识负载均衡器的名称。
- Region:包含虚拟机的Azure位置。
- SKU:标准。
- 类型:公共或内部。 内部负载均衡器是可以从虚拟网络内部访问的。 大多数Azure应用程序可以使用内部负载均衡器。 如果应用程序需要直接通过 Internet 访问SQL Server,请使用公共负载均衡器。
选择“下一步: 前端 IP 配置”。
选择“添加前端 IP 配置”。
使用以下值设置前端 IP 地址:
- 名称:标识前端 IP 配置的名称。
- 虚拟网络:虚拟机所在的网络。
- 子网:虚拟机所在的同一子网。
- 分配:静态。
- IP 地址:你分配给群集化网络资源的 IP 地址。
- 可用性区域:要将 IP 地址部署到的可选可用性区域。
Azure门户的截图,显示一个用于配置前端 IP 地址的页面。
选择“添加”以创建前端 IP 地址。
选择“查看 + 创建”以创建负载均衡器。
配置后端池
返回到包含虚拟机的Azure资源组,并找到新的负载均衡器。 您可能需要刷新资源组的视图。 选择负载均衡器。
选择 后端池,然后选择“ + 添加”。
对于 “名称”,请输入后端池的名称。
在“后端池配置”部分,选择“NIC”。
选择“添加”将该后端池与包含 VM 的可用性集进行关联。
在“虚拟机”下,选择将作为群集节点参与操作的虚拟机。 请务必包含要托管该可用性组的所有虚拟机。
仅添加每个 VM 的主 IP 地址。 请勿添加任何次要 IP 地址。
选择“添加”将虚拟机添加到后端池。
选择“保存”以创建后端池。
配置运行状况探测
在负载均衡器的面板上,选择“运行状况探测”。
在 “添加运行状况探测”上, 设置以下参数:
- 名称:健康探测器的名称。
- 协议:TCP。
- 端口:在运行状况探测防火墙中创建的端口。 本文中的示例使用的是 TCP 端口 59999。
- 间隔:5 秒。
选择 添加 。
设置负载均衡规则
在负载均衡器的窗格上,选择“负载均衡规则”。
选择 添加 。
设置以下参数:
- 名称:负载均衡规则的名称。
- 前端 IP 地址:配置前端时设置的 IP 地址。
- 后端池:包含负载均衡器目标虚拟机的后端池。
- HA 端口:对于 TCP 和 UDP 协议,在所有端口上启用负载均衡。
- 协议:TCP。
- Port:SQL SERVER TCP 端口。 默认值为 1433。
- 后端端口:与启用“浮动 IP (直接服务器返回)”时使用的“端口”值相同的端口。
- 运行状况探测:前面配置的运行状况探测。
- 会话持久性:无。
- 空闲超时(分钟):4。
- 浮动 IP (直接服务器返回) :已启用。
选择“保存”。
配置群集探测
在 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 地址。 可在“故障转移群集管理器”中找到该地址,它与 的值位于同一属性页。 |
ProbePort |
在负载均衡器的运行状况探测中配置的探测端口。 任何未使用的 TCP 端口都有效。 |
SubnetMask |
群集参数的子网掩码。 它必须是 TCP/IP 广播地址:255.255.255.255。 |
在使 IP 地址资源脱机并再次联机之前,所做的更改不会生效。 执行可用性组的故障转移以使此更改生效。 设置群集探测后,可在 PowerShell 中看到所有群集参数。 运行此脚本:
Get-ClusterResource $IPResourceName | Get-ClusterParameter
配置排除端口
使用 49,152 到 65,536 之间的运行状况探测端口( TCP/IP 的默认动态端口范围)时,请为每个 VM 上的每个运行状况探测端口添加排除项。
配置端口排除可防止其他系统进程在 VM 上动态分配同一端口。
若要为每个运行状况探测端口在每个 VM 上设置端口排除,请使用以下 PowerShell 脚本:
[int]$ProbePort = <nnnnn> # The probe port that you configured in the health probe of the load balancer. Any unused TCP port is valid.
netsh int ipv4 add excludedportrange tcp startport=$ProbePort numberofports=1 store=persistent
若要确认正确配置了排除项,请使用以下命令:
netsh int ipv4 show excludedportrange tcp
修改连接字符串
对于支持它的客户端,请将 MultiSubnetFailover=True 添加到connection string。 尽管MultiSubnetFailover连接选项不是必须的,但它具有一个优点,即能够更快地进行子网故障切换。 此优势是因为客户端驱动程序尝试为每个 IP 地址并行打开 TCP 套接字。 客户端驱动程序会等待第一个 IP 地址响应成功。 成功响应后,客户端驱动程序会使用该 IP 地址进行连接。
如果客户端不支持 MultiSubnetFailover 参数,则可以修改 RegisterAllProvidersIP 和 HostRecordTTL 设置,防止故障转移后连接延迟。
使用 PowerShell 修改 RegisterAllProvidersIp 和 HostRecordTTL 设置:
Get-ClusterResource yourListenerName | Set-ClusterParameter RegisterAllProvidersIP 0
Get-ClusterResource yourListenerName | Set-ClusterParameter HostRecordTTL 300
若要了解详细信息,请参阅 有关 SQL Server 中侦听器连接超时的文档。
提示
- 将连接字符串中的
MultiSubnetFailover参数设置为true,即使是对于跨单个子网的HADR解决方案也是如此。 此设置支持将来跨子网,而无需更新连接字符串。 - 默认情况下,客户端缓存 20 分钟的群集 DNS 记录。 通过减少
HostRecordTTL,可以减少缓存的记录的生存时间 (TTL)。 然后,旧客户端可以更快地重新连接。 因此,减少HostRecordTTL设置可能会增加流向 DNS 服务器的流量。
测试故障转移
测试群集资源的故障切换以验证群集功能:
- 打开 SQL Server Management Studio 并连接到可用性组侦听器。
- 在 Object Explorer 中,展开 Always On 可用性组。
- 右键单击该可用性组,然后选择“故障转移”。
- 按照向导提示将该可用性组故障转移到一个次要副本。
当副本切换角色并且两者同步后,故障转移成功。
测试连接
若要测试连接,请登录到同一虚拟网络中的另一个虚拟机。 打开SQL Server Management Studio并连接到可用性组侦听器。
注意
安装最新版本的 SQL Server Management Studio (SSMS)。
后续步骤
创建 VNN 后,请考虑优化 SQL Server VM 的 cluster 设置。
若要了解更多信息,请参阅以下文章: