Compartir a través de

为故障转移群集实例配置 DNN

适用于:Azure VM 上的 SQL Server

在 Azure 虚拟机(VM)上,分布式网络名称(DNN)将流量路由到相应的群集资源。 它提供了一种比虚拟网络名称 (VNN) 更简单的方法来连接到 SQL Server 故障转移群集实例 (FCI),不需要使用 Azure 负载均衡器。

本文介绍了如何配置 DNN 资源,以使用 Azure VM 上的 SQL Server 将流量路由到故障转移群集实例,以实现高可用性和灾难恢复 (HADR)。

对于备用连接选项,请考虑改为使用 虚拟网络名称(VNN)和 Azure 负载均衡器

概述

当与 SQL Server VM 上的 Always On 故障转移群集实例一起使用时,分布式网络名称 (DNN) 将虚拟网络名称 (VNN) 替换为连接点。 配置 DNN 消除了将流量路由到 VNN 的 Azure 负载均衡器的需求,从而简化了部署、维护,并改进了故障转移。

对于 FCI 部署,VNN 仍然存在,但是客户端会连接到 DNN DNS 名称而非 VNN 名称。

提示

通过在同一 Azure 虚拟网络中的多个子网中创建 SQL Server 虚拟机 (VM),可以简化部署,使故障转移群集实例不再需要 Azure 负载均衡器或分布式网络名称 (DNN)。

先决条件

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

注意

同一群集上的每个可用性组或故障转移群集实例都需要拥有其独立的连接点,无论是 VNN 侦听器还是 DNN 侦听器。

创建 DNN 资源

DNN 资源在 SQL Server FCI 所在的群集组中创建。 请使用 PowerShell 在 FCI 群集组中创建 DNN 资源。

以下 PowerShell 命令将 DNN 资源添加到资源名称为 <dnnResourceName> 的 SQL Server FCI 群集组。 资源名称用于独一无二地标识资源。 请使用对你来说有意义且在整个群集中独一无二的资源名称。 资源类型必须为 Distributed Network Name

-Group 值必须是群集组的名称,该群集组对应于你要在其中添加分布式网络名称的 SQL Server FCI。 对于默认实例,典型格式为 SQL Server (MSSQLSERVER)

Add-ClusterResource -Name <dnnResourceName> `
-ResourceType "Distributed Network Name" -Group "<WSFC role of SQL Server instance>"

例如,若要为默认 SQL Server FCI 创建 DNN 资源 dnn-demo,请使用以下 PowerShell 命令:

Add-ClusterResource -Name dnn-demo `
-ResourceType "Distributed Network Name" -Group "SQL Server (MSSQLSERVER)"

设置群集 DNN DNS 名称

为群集中的 DNN 资源设置域名系统 (DNS) 名称。 然后,群集使用此值将流量路由到当前承载着 SQL Server FCI 的节点。

客户端使用 DNS 名称连接到 SQL Server FCI。 你可以选择一个唯一值。 或者,如果你已经有一个 FCI,并且不想更新客户端连接字符串。 可以将 DNN 配置为使用客户端正在使用的当前 VNN。 为此,你需要重命名 VNN,然后在 DNS 中设置 DNN。

使用此命令设置 DNN 的 DNS 名称:

Get-ClusterResource -Name <dnnResourceName> | `
Set-ClusterParameter -Name DnsName -Value <DNSName>

DNSName 值是客户端用来连接到 SQL Server FCI 的值。 例如,若要使客户端连接到 FCIDNN,请使用以下 PowerShell 命令:

Get-ClusterResource -Name dnn-demo | `
Set-ClusterParameter -Name DnsName -Value FCIDNN

客户端现在必须在连接到 SQL Server FCI 时,将 FCIDNN 输入到其连接字符串中。

警告

请勿删除当前虚拟网络名称(VNN),因为它是 FCI 基础结构的必要组件。

重命名 VNN

如果你有现有的虚拟网络名称,并且希望客户端继续使用该值连接到 SQL Server FCI,则必须将当前 VNN 重命名为一个占位符值。 重命名当前的 VNN 后,可以将 DNN 的 DNS 名称值设置为 VNN。 如果业务不需要当前 VNN,请跳过本部分。

重命名 VNN 存在一些限制。 有关详细信息,请参阅重命名 FCI

重命名 VNN 后, 设置群集 DNN DNS 名称

联机设置 DNN 资源

在适当命名 DNN 资源并在群集中设置 DNS 名称值后,请使用 PowerShell 在群集中联机设置 DNN 资源:

Start-ClusterResource -Name <dnnResourceName>

例如,若要启动 DNN 资源 dnn-demo,请使用以下 PowerShell 命令:

Start-ClusterResource -Name dnn-demo

配置可能的所有者

默认情况下,群集会将 DNN DNS 名称绑定到群集中的所有节点。 但是,群集中不属于 SQL Server FCI 的节点应从 DNN 可能的所有者列表中排除。

若要更新可能的所有者,请执行以下步骤:

  1. 在故障转移群集管理器中转到你的 DNN 资源。

  2. 右键单击该 DNN 资源并选择“属性”。

    DNN 资源的快捷菜单,其中突出显示了“属性”命令。

  3. 清除不参与故障转移群集实例的任何节点的复选框。 DNN 资源的可能所有者的列表应与 SQL Server 实例资源的可能所有者的列表匹配。 例如,假设 Data3 不参与 FCI,下图是从 DNN 资源的可能所有者列表中删除 Data3 的示例:

    对于 DNN 资源的可能所有者,清除不参与 FCI 的节点旁边的复选框

  4. 选择“确定”保存设置

重启 SQL Server 实例

使用故障转移群集管理器重启 SQL Server 实例。 执行以下步骤:

  1. 在故障转移群集管理器中转到你的 SQL Server 资源。
  2. 右键单击该 SQL Server 资源,使其脱机。
  3. 等待所有关联资源完全脱机。 然后右键单击 SQL Server 资源,然后再次将其联机。

更新连接字符串

更新连接到 SQL Server FCI DNN 的任何应用程序的连接字符串,让 MultiSubnetFailover=True 包含在连接字符串中。 如果客户端不支持 MultiSubnetFailover 参数,则它与 DNN 不兼容。

下面是 DNS 名称为 FCIDNN 的 SQL FCI DNN 的连接字符串的示例:

Data Source=FCIDNN, MultiSubnetFailover=True

此外,如果 DNN 未使用原始 VNN,则连接到 SQL Server FCI 的 SQL 客户端需要将其连接字符串更新为 DNN DNS 名称。 若要规避此要求,可以将 DNS 名称值更新为 VNN 的名称。 但首先需要 将现有 VNN 替换为占位符

测试故障转移

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

若要测试故障转移,请执行以下步骤:

  1. 使用 Bastion 连接到其中一个 SQL Server 群集节点。
  2. 打开“故障转移群集管理器”。 选择“角色”。 观察哪个节点拥有 SQL Server FCI 角色。
  3. 右键单击“SQL Server FCI”角色。
  4. 选择“移动”,再选择“最佳节点” 。

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

测试连接

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

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

避免 IP 冲突

可以执行此可选步骤,防止 FCI 资源使用的虚拟 IP (VIP) 地址被分配到 Azure 中的另一个资源。

尽管客户现在使用 DNN 连接到 SQL Server FCI,但无法删除虚拟网络名称(VNN)和虚拟 IP,因为它们是 FCI 基础结构的必要组件。 但是,不再有负载均衡器在 Azure 中保留虚拟 IP 地址。 因此,可能会为虚拟网络上的另一个资源分配与 FCI 使用的虚拟 IP 地址相同的 IP 地址。 这种情况可能会导致出现重复的 IP 冲突问题。

请配置 APIPA 地址或配置专用网络适配器来保留 IP 地址。

APIPA 地址

为避免使用重复的 IP 地址,请配置 APIPA 地址(也称为链路本地地址)。 为此,请运行以下命令:

Get-ClusterResource "virtual IP address" | Set-ClusterParameter
    -Multiple @{"Address"="169.254.1.1";"SubnetMask"="255.255.0.0";"OverrideAddressMatch"=1;"EnableDhcp"=0}

在此命令中,"virtual IP address" 是群集化 VIP 地址资源的名称,"169.254.1.1" 是为 VIP 地址选择的 APIPA 地址。 请选择最适合你的业务的地址。 设置 OverrideAddressMatch=1 以允许 IP 地址在任何网络(包括 APIPA 地址空间)中。

专用网络适配器

或者,可以在 Azure 中配置网络适配器来保留虚拟 IP 地址资源使用的 IP 地址。 但是,此配置会占用子网地址空间中的地址,并且需要额外工作量以确保网络适配器不用于任何其他用途。

限制

  • 连接到 DNN 侦听器的客户端必须支持连接字符串中的 MultiSubnetFailover=True 参数。
  • 将其他 SQL Server 功能与包含 DNN 的 FCI 一起使用时,可能有更多注意事项。 有关详细信息,请参阅包含 DNN 的 FCI 的互操作性