在 Azure 中为 Always On 可用性组配置负载均衡器

本文说明如何在使用 Azure Resource Manager 运行的 Azure 虚拟机中为 SQL Server Always On 可用性组创建负载均衡器。 当 SQL Server 实例位于 Azure 虚拟机时,可用性组需要负载均衡器。 负载均衡器存储可用性组侦听器的 IP 地址。 如果可用性组跨多个区域,则每个区域都需要一个负载均衡器。

若要完成此任务,需要在 Resource Manager 模型中的 Azure 虚拟机上部署 SQL Server 可用性组。 这两个 SQL Server 虚拟机必须属于同一个可用性集。 可以手动配置可用性组

本文要求事先配置可用性组。

相关主题包括:

执行本文中的每个步骤可以在 Azure 门户中创建和配置负载均衡器。 完成该过程后,将配置群集,以将负载均衡器中的 IP 地址用于可用性组侦听器。

在 Azure 门户中创建并配置负载均衡器

在任务的这一部分,将执行以下步骤:

  1. 在 Azure 门户中创建负载均衡器并配置 IP 地址。
  2. 配置后端池。
  3. 创建探测。
  4. 设置负载均衡规则。

Note

如果 SQL Server 实例在多个资源组和区域中,请执行每个步骤两次,在每个资源组中各执行一次。

步骤 1:创建负载均衡器并配置 IP 地址

首先,请创建负载均衡器。

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

  2. 在资源组中,单击“添加”。

  3. 搜索“负载均衡器”,然后在搜索结果中选择 Microsoft 发布的“负载均衡器”。

  4. 在“负载均衡器”边栏选项卡上,单击“创建”。

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

    设置
    Name 表示负载均衡器的文本名称。 例如 sqlLB
    类型 内部:大多数实现使用内部负载均衡器,它允许同一虚拟网络中的应用程序连接到可用性组。
    外部:允许应用程序通过公共 Internet 连接连接到可用性组。
    虚拟网络 选择 SQL Server 实例所在的虚拟网络。
    子网 选择 SQL Server 实例所在的子网。
    IP 地址分配 静态
    专用 IP 地址 指定子网中的某个可用 IP 地址。 在群集上创建侦听器时,请使用此 IP 地址。 本文稍后的 PowerShell 脚本会将此地址用于 $ILBIP 变量。
    订阅 如果有多个订阅,可能会显示此字段。 选择要与此资源关联的订阅。 通常是与可用性组的所有资源相同的订阅。
    资源组 选择 SQL Server 实例所在的资源组。
    位置 选择 SQL Server 实例所在的 Azure 位置。
  6. 单击“创建” 。

Azure 将创建负载均衡器。 该负载均衡器属于特定的网络、子网、资源组和位置。 在 Azure 完成任务后,请在 Azure 中验证负载均衡器设置。

步骤 2:配置后端池。

Azure 将后端地址池称作“后端池”。 在本例中,后端池是可用性组中两个 SQL Server 实例的地址。

  1. 在资源组中,单击已创建的负载均衡器。

  2. 在“设置”中,单击“后端池”。

  3. 在“后端池”中,单击“添加”创建后端地址池。

  4. 在“添加后端池”中的“名称”下,键入后端池的名称。

  5. 在“虚拟机”下,单击“添加虚拟机”。

  6. 在“选择虚拟机”下,单击“选择可用性集”,然后指定 SQL Server 虚拟机所属的可用性集。

  7. 选择可用性集后,请单击“选择虚拟机”,选择在可用性组中托管 SQL Server 实例的两个虚拟机,然后单击“选择”。

  8. 单击“确定”,关闭“选择虚拟机”和“添加后端池”边栏选项卡。

Azure 将更新后端地址池的设置。 现在,可用性集有了一个池,其中包含两个 SQL Server 实例。

步骤 3:创建探测

探测定义 Azure 如何确认哪一个 SQL Server 实例当前拥有可用性组侦听器。 Azure 根据创建探测时定义的端口上的 IP 地址来探测服务。

  1. 在负载均衡器的“设置”边栏选项卡上,单击“运行状况探测”。

  2. 在“运行状况探测”边栏选项卡上,单击“添加”。

  3. 在“添加探测”边栏选项卡上配置探测。 使用以下值配置探测:

    设置
    Name 表示探测的文本名称。 例如 SQLAlwaysOnEndPointProbe
    协议 TCP
    端口 可以使用任何可用的端口。 例如 59999
    时间间隔 5
    不正常阈值 2
  4. 单击 “确定”

Note

确保指定的端口已在两个 SQL Server 实例的防火墙上打开。 这两个实例需要所用 TCP 端口的入站规则。 有关详细信息,请参阅 添加或编辑防火墙规则

Azure 创建探测,然后使用它来测试哪个 SQL Server 实例具有可用性组的侦听器。

步骤 4:设置负载均衡规则

负载均衡规则设置负载均衡器将流量路由到 SQL Server 实例的方式。 对此负载均衡器,需要启用直接服务器返回,因为在两个 SQL Server 实例中,每次只有一个拥有可用性组侦听器资源。

  1. 在负载均衡器的“设置”边栏选项卡上,单击“负载均衡规则”。

  2. 在“负载均衡规则”边栏选项卡上,单击“添加”。

  3. 使用“添加负载均衡规则”边栏选项卡配置负载均衡规则。 使用以下设置:

    设置
    Name 表示负载均衡规则的文本名称。 例如 SQLAlwaysOnEndPointListener
    协议 TCP
    端口 1433
    后端端口 1433.将忽略此值,因为此规则使用“浮动 IP (直接服务器返回)”。
    探测 使用为此负载均衡器创建的探测的名称。
    会话持久性
    空闲超时(分钟) 4
    浮动 IP (直接服务器返回) Enabled

    Note

    可能需要在边栏选项卡中向下滚动才能查看所有设置。

  4. 单击 “确定”

  5. Azure 将配置负载均衡规则。 负载均衡器现已配置为将流量路由到托管可用性组侦听器的 SQL Server 实例。

此时,资源组有一个连接到这两个 SQL Server 计算机的负载均衡器。 负载均衡器还包含 SQL Server AlwaysOn 可用性组侦听器的 IP 地址,以便任一计算机可以响应针对可用性组的请求。

Note

如果 SQL Server 实例位于两个不同的区域,请在另一个区域重复上述步骤。 每个区域都需要一个负载均衡器。

将群集配置为使用负载均衡器 IP 地址

下一步是在群集上配置侦听器,然后将侦听器联机。 请执行以下操作:

  1. 在故障转移群集上创建可用性组侦听器。

  2. 使侦听器联机。

步骤 5:在故障转移群集上创建可用性组侦听器

在此步骤中,你在故障转移群集管理器和 SQL Server Management Studio 中手动创建可用性组侦听器。

可用性组侦听器是 SQL Server 可用性组侦听的 IP 地址和网络名称。 若要创建可用性组侦听器,请执行以下操作:

  1. 获取群集网络资源的名称。

    a.将新的虚拟硬盘附加到 VM。 使用 RDP 连接到托管主副本的 Azure 虚拟机。

    b.保留“数据库类型”设置,即设置为“共享”。 打开故障转移群集管理器。

    c. 选择“网络”节点,并记下群集网络名称。 将在 PowerShell 脚本的 $ClusterNetworkName 变量中使用此名称。 在下图中,群集网络名称为“群集网络 1”:

    群集网络名称

  2. 添加客户端接入点。
    客户端接入点是应用程序用来连接到可用性组中的数据库的网络名称。 可在故障转移群集管理器中创建客户端接入点。

    a.将新的虚拟硬盘附加到 VM。 展开群集名称,然后单击“角色”。

    b.保留“数据库类型”设置,即设置为“共享”。 在“角色”窗格中,右键单击可用性组名称,然后选择“添加资源” > “客户端接入点”。

    客户端接入点

    c. 在“名称”框中,创建新侦听器的名称。 新侦听器的名称是应用程序用来连接 SQL Server 可用性组中数据库的网络名称。

    d. 若要完成创建侦听器,请单击“下一步”两次,然后单击“完成”。 不要在此时使侦听器或资源联机。

  3. 配置可用性组的 IP 资源。

    a.将新的虚拟硬盘附加到 VM。 单击“资源”选项卡,然后展开创建的客户端接入点。
    客户端接入点处于脱机状态。

    客户端接入点

    b.保留“数据库类型”设置,即设置为“共享”。 右键单击 IP 资源,然后单击“属性”。 记下 IP 地址的名称,将其用在 PowerShell 脚本的 $IPResourceName 变量中。

    c. 在“IP 地址”下面,单击“静态 IP 地址”。 将 IP 地址设置为在 Azure 门户中设置负载均衡器地址时所用的同一地址。

    IP 资源

  4. 使 SQL Server 可用性组资源依赖于客户端接入点。

    a.将新的虚拟硬盘附加到 VM。 在故障转移群集管理器中,单击“角色”,然后单击可用性组。

    b.保留“数据库类型”设置,即设置为“共享”。 在“资源”选项卡的“其他资源”下,右键单击可用性资源组,然后单击“属性”。

    c. 在依赖关系选项卡上,添加客户端接入点(侦听器)资源的名称。

    IP 资源

    d. 单击 “确定”

  5. 使客户端接入点资源依赖于 IP 地址。

    a.将新的虚拟硬盘附加到 VM。 在故障转移群集管理器中,单击“角色”,然后单击可用性组。

    b.保留“数据库类型”设置,即设置为“共享”。 在“资源”选项卡中,右键单击“服务器名称”下面的客户端接入点资源,然后单击“属性”。

    IP 资源

    c. 选择“依赖项”选项卡。 验证 IP 地址是否为依赖项。 如果不是,则设置 IP 地址的依赖项。 如果有多个资源列出,请验证 IP 地址具有 OR 而不是 AND 依赖项。 单击 “确定”

    IP 资源

    d. 右键单击侦听器名称,然后单击“联机”。

    Tip

    可以验证是否正确配置了依赖项。 在故障转移群集管理器中,转到“角色”,右键单击可用性组,单击“更多操作”,然后单击“显示依赖项报告”。 正确配置依赖项后,可用性组将依赖于网络名称,网络名称将依赖于 IP 地址。

  6. 在 PowerShell 中设置群集参数。

    a.将新的虚拟硬盘附加到 VM。 将以下 PowerShell 脚本复制到某个 SQL Server 实例。 请更新环境的变量。

    $ClusterNetworkName = "<MyClusterNetworkName>" # the cluster network name (Use Get-ClusterNetwork on Windows Server 2012 of higher to find the name)
    $IPResourceName = "<IPResourceName>" # the IP Address resource name
    $ILBIP = "<n.n.n.n>" # the IP Address of the Internal Load Balancer (ILB). This is the static IP address for the load balancer you configured in the Azure Portal.
    [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}
    

    b.保留“数据库类型”设置,即设置为“共享”。 通过在某个群集节点上运行 PowerShell 脚本设置群集参数。

    Note

    如果 SQL Server 实例位于不同的区域,则需要运行 PowerShell 脚本两次。 第一次运行时,请从第一个区域中选择 $ILBIP$ProbePort。 第二次运行时,请从第二个区域中选择 $ILBIP$ProbePort。 群集网络名称与群集 IP 资源名称相同。

验证侦听器的配置

如果正确配置了群集资源和依赖项,应能够查看 SQL Server Management Studio 中的侦听器。 若要设置侦听器端口,请执行以下操作:

  1. 启动 SQL Server Management Studio,然后连接到主副本。

  2. 转到“AlwaysOn 高可用性” > “可用性组” > “可用性组侦听器”。
    你现在应看到在故障转移群集管理器中创建的侦听器名称。

  3. 右键单击侦听器名称,然后单击“属性”。

  4. 在“端口”框中,通过使用先前使用过的 $EndpointPort 为可用性组侦听器指定端口号(默认值为 1433),然后单击“确定”。

现在,在 Resource Manager 模式下运行的 Azure 虚拟机中有了一个可用性组。

测试与侦听器的连接

若要测试连接,请执行以下操作:

  1. 通过 RDP 连接到同一虚拟网络中不拥有副本的 SQL Server 实例。 此服务可以是群集中的其他 SQL Server 实例。

  2. 使用 sqlcmd 实用工具测试连接。 例如,以下脚本通过侦听器与 Windows 身份验证来与主副本建立 sqlcmd 连接:

     sqlcmd -S <listenerName> -E
    

SQLCMD 连接将自动连接到托管主副本的 SQL Server 实例。

为其他可用性组创建一个 IP 地址

每个可用性组使用单独的侦听器。 每个侦听器都有自己的 IP 地址。 使用同一个负载均衡器以保留其他侦听器的 IP 地址。 创建可用性组后,请将 IP 地址添加到负载均衡器,然后配置侦听器。

若要使用 Azure 门户将 IP 地址添加到负载均衡器,请执行以下操作:

  1. 在 Azure 门户中,打开包含负载均衡器的资源组,然后单击负载均衡器。

  2. 在“设置”下面,单击“前端 IP 池”,然后单击“添加”。

  3. 在“添加前端 IP 地址”下,为前端分配名称。

  4. 验证“虚拟网络”和“子网”是否与 SQL Server 实例相同。

  5. 设置侦听器的 IP 地址。

    Tip

    可将 IP 地址设置为静态,并键入子网中当前未使用的地址。 也可将 IP 地址设置为动态,并保存新的前端 IP 池。 执行此操作时,Azure 门户会自动向池分配可用的 IP 地址。 然后可以重新打开前端 IP 池,并将分配更改为静态。

  6. 保存侦听器的 IP 地址。

  7. 使用以下设置添加运行状况探测:

    设置
    Name 用于标识探测的名称。
    协议 TCP
    端口 一个未使用的 TCP 端口,必须在所有虚拟机上可用。 此端口不能用于任何其他用途。 两个侦听器不能使用相同的探测端口。
    时间间隔 探测尝试之间的时间长短。 使用默认值 (5)。
    不正常阈值 在将虚拟机视为运行状况不正常之前连续阈值应失败的次数。
  8. 单击“确定”保存探测。

  9. 创建负载均衡规则。 单击“负载均衡规则”,然后单击“+ 添加”。

  10. 使用以下设置配置新的负载均衡规则:

    设置
    Name 用于标识负载均衡规则的名称。
    前端 IP 地址 选择所创建的 IP 地址。
    协议 TCP
    端口 使用 SQL Server 实例正在使用的端口。 在不更改的情况下,默认实例使用端口 1433。
    后端端口 使用与“端口”相同的值。
    后端池 包含具有 SQL Server 实例的虚拟机的池。
    运行状况探测 选择所创建的探测。
    会话持久性
    空闲超时(分钟) 默认值 (4)
    浮动 IP (直接服务器返回) Enabled

将可用性组配置为使用新 IP 地址

若要完成配置群集,请重复配置第一个可用性组时所遵照的步骤。 也就是说,将群集配置为使用新 IP 地址

为侦听器添加了 IP 地址后,可执行以下操作配置其他可用性组:

  1. 验证两个 SQL Server 虚拟机上新 IP 地址的探测端口是否处于打开状态。

  2. 在群集管理器中,添加客户端接入点

  3. 配置可用性组的 IP 资源

    Important

    创建 IP 地址时,请使用已添加到负载均衡器的 IP 地址。

  4. 使 SQL Server 可用性组资源依赖于客户端接入点

  5. 使客户端接入点资源依赖于 IP 地址

  6. 在 PowerShell 中设置群集参数

将可用性组配置为使用新 IP 地址时,请配置到侦听器的连接。

后续步骤