Compartir a través de

教程:手动配置可用性组 - Azure VM 上的 SQL Server

适用于:Azure VM 上的 SQL Server

提示

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

本教程说明如何在单个子网内的 Azure VM 上为 SQL Server 创建 Always On 可用性组。 完整教程将创建一个数据库副本位于两个 SQL Server 实例上的可用性组。

本文手动配置可用性组环境。 还可以使用 Azure 门户PowerShell 或 Azure CLI 自动执行这些步骤。

估计所需时间:如果满足先决条件,完成本教程大约需要 30 分钟。

先决条件

本教程假设你已基本了解 SQL Server Always On 可用性组。 如需更多信息,请参阅 Always On 可用性组概述 (SQL Server)

开始本教程中的流程之前,需要完成在 Azure 虚拟机中创建 Always On 可用性组的先决条件。 如果已完成这些先决条件,可跳到创建群集

下表总结了完成本教程之前所需的先决条件:

要求 说明
两个 SQL Server 实例 - 位于 Azure 可用性集中
- 位于单个域中
- 已安装故障转移群集
Windows Server 用于群集见证的文件共享
SQL Server 服务帐户 域帐户
SQL Server 代理服务帐户 域帐户
防火墙端口已打开 - SQL Server:对于默认实例,为 1433
- 数据库镜像终结点:5022 或任何可用端口
- 可用性组负载均衡器 IP 地址运行状况探测:59999 或任何可用端口
- 群集核心负载均衡器 IP 地址运行状况探测:58888 或任何可用端口
故障转移群集 对于两个 SQL Server 实例而言都是必需的
安装域帐户 - 每个 SQL Server 实例上的本地管理员
- 每个 SQL Server 实例的 sysadmin 固定服务器角色的成员
网络安全组 (NSG) 如果环境使用网络安全组,请确保当前配置允许网络流量通过配置防火墙中所述的端口。

创建群集

第一个任务是创建包含两个 SQL Server VM 和一个见证服务器的 Windows Server 故障转移群集:

  1. 使用远程桌面协议 (RDP) 连接到第一个 SQL Server VM。 使用一个在两个 SQL Server VM 和该见证服务器上都是管理员帐户的域帐户。

    提示

    先决条件中,你创建了一个名为 CORP\Install 的帐户。 请使用此帐户。

  2. 在“服务器管理器”仪表板上,选择“工具”,然后选择“故障转移群集管理器”。

  3. 在左窗格上,右键单击“故障转移群集管理器”,然后选择“创建群集”。

    屏幕截图显示了故障转移群集管理器,以及用于在快捷菜单上创建群集的选项。

  4. 在“创建群集向导”中,逐页完成下表中的设置来创建一个单节点群集:

    设置
    开始之前 使用默认值。
    选择服务器 在“输入服务器名称”中输入第一个 SQL Server VM 的名称,然后选择“添加”。
    验证警告 选择“否。不需要 Microsoft 对该群集的支持,因此不希望运行验证测试。选择‘下一步’时,继续创建群集。”
    用于管理群集的访问点 在“群集名称”中输入群集名称(例如“SQLAGCluster1”)。
    确认 除非使用的是存储空间,否则请使用默认值。

设置 Windows Server 故障转移群集的 IP 地址

注意

在 Windows Server 2019 上,群集将创建“分布式服务器名称”值,而不是“群集网络名称”值。 如果使用的是 Windows Server 2019,请跳过本教程中引用群集核心名称的任何步骤。 可以使用 PowerShell 创建群集网络名称。 有关详细信息,请查看博客文章 - 故障转移群集:群集网络对象

  1. 在“故障转移群集管理器”中,向下滚动到“群集核心资源”,并展开群集详细信息。 “名称”和“IP 地址”资源都应处于“已失败”状态。

    由于为该群集分配了与计算机本身相同的 IP 地址,IP 地址资源无法联机。 这是一个重复的地址。

  2. 右键单击失败的“IP 地址”资源,然后选择“属性” 。

    故障转移群集管理器的屏幕截图,其中显示了用于打开 IP 地址属性的选项。

  3. 选择“静态 IP 地址”。 指定虚拟机所在子网中的可用地址。

  4. 在“群集核心资源”部分,右键单击群集名称,并选择“联机”。 等到这两个资源均已联机。

    当该群集名称资源联机时,它会用新的 Active Directory 计算机帐户更新域控制器服务器。 稍后使用此 Active Directory 帐户运行可用性组的群集服务。

将其他 SQL Server 实例添加到群集

  1. 在浏览器树中,右键单击群集,并选择“添加节点”。

    故障转移群集管理器的屏幕截图,其中显示了用于将节点添加到群集的选项。

  2. 在“添加节点向导”中,选择“下一步” 。

  3. 在“选择服务器”页上,添加第二个 SQL Server VM。 在“输入服务器名称”中输入 VM 的名称,然后选择“添加”>“下一步”。

  4. 在“验证警告”页上,选择“否”。 (在生产方案中,应执行验证测试。)然后选择“下一步”。

  5. 如果正在使用存储空间,则在“确认”页上,取消选中“将所有符合条件的存储添加到群集”复选框。

    “添加节点向导”中确认向群集添加节点的页面的屏幕截图。

    警告

    如果未清除“将所有符合条件的存储添加到群集”,Windows 会在群集进程中分离虚拟磁盘。 这样一来,这些虚拟磁盘将不在磁盘管理器或对象资源管理器中显示,除非从群集中移除存储,再通过 PowerShell 将其重新附加。

  6. 选择“下一步”。

  7. 选择“完成”。

    故障转移群集管理器显示群集具有一个新的节点,并在“节点”容器中列出该节点。

  8. 从远程桌面会话注销。

为群集仲裁添加文件共享

在本示例中,Windows 群集将使用文件共享来创建群集仲裁。 本教程使用 NodeAndFileShareMajority 仲裁。 有关详细信息,请参阅 Configure and manage quorum(配置和管理仲裁)。

  1. 使用远程桌面会话连接到文件共享见证服务器 VM。

  2. 在“服务器管理器”中,选择“工具”。 打开“计算机管理”。

  3. 选择“共享文件夹”。

  4. 右键单击“共享”,然后选择“新建共享”。

    屏幕截图显示用于在计算机管理中创建新共享的选项。

    使用“创建共享文件夹向导”创建共享。

  5. 在“文件夹路径”页上,选择“浏览”。 找到或创建共享文件夹的路径,然后选择“下一步”。

  6. 在“名称、说明和设置”页上,验证共享名称和路径。 选择“下一页”。

  7. 在“共享文件夹权限”页上,设置“自定义权限”。 选择“自定义”。

  8. 在“自定义权限”对话框中,选择“添加”。

  9. 请确保用于创建群集的帐户具有完全控制权。

    用于自定义权限的对话框的屏幕截图,其中显示了安装帐户对共享拥有完全控制权。

  10. 选择“确定”

  11. 在“共享文件夹权限”页上,选择“完成”。 然后,再次选择“完成”。

  12. 注销服务器。

配置群集仲裁

注意

根据可用性组的配置,可能需要更改参与 Windows Server 故障转移群集的节点的仲裁投票。 有关详细信息,请参阅在 Azure VM 上为 SQL Server 配置群集仲裁

  1. 使用远程桌面会话连接到第一个群集节点。

  2. 在故障转移群集管理器中,右键单击群集,点到“更多操作”,然后选择“配置群集仲裁设置”。

    故障转移群集管理器的屏幕截图,其中显示了用于配置群集仲裁设置的选项。

  3. 在“配置群集仲裁向导”中,选择“下一步”。

  4. 在“选择仲裁配置选项”页上,选中“选择仲裁见证”,然后选择“下一步”。

  5. 在“选择仲裁见证”页上,选择“配置文件共享见证”。

    提示

    Windows Server 2016 支持云见证。 如果选择此类见证,则无需文件共享见证。 有关详细信息,请参阅部署故障转移群集的云见证。 本教程使用早期操作系统也支持的文件共享见证。

  6. 在“配置文件共享见证”中,输入所创建的共享的路径。 然后,选择“下一步”。

  7. 在“确认”页上,验证这些设置。 然后,选择“下一步”。

  8. 选择“完成”。

现已使用文件共享见证配置群集核心资源。

启用可用性组

接下来,启用 Always On 可用性组。 在两个 SQL Server VM 上都完成这些步骤。

  1. 从“开始”屏幕打开“SQL Server 配置管理器”。

  2. 在浏览器树中,选择“SQL Server 服务”。 然后右键单击“SQL Server (MSSQLSERVER)”服务,并选择“属性”。

  3. 选择“Always On 高可用性”选项卡,然后选择“启用 Always On 可用性组”。

    屏幕截图显示用于启用 Always On 可用性组的选项。

  4. 选择“应用”。 在弹出对话框中选择“确定”。

  5. 重新启动 SQL Server 服务。

启用 FILESTREAM 功能

如果不对可用性组中的数据库使用 FILESTREAM,请跳过此步骤并转到下一步“创建数据库”。

如果计划将数据库添加到使用 FILESTREAM 的可用性组,则需要启用 FILESTREAM,因为该功能默认处于禁用状态。 使用 SQL Server 配置管理器在两个 SQL Server 实例上启用该功能。

若要启用 FILESTREAM 功能,请执行以下步骤:

  1. 使用属于 sysadmin 固定服务器角色成员的域帐户(例如在先决条件文档中创建的“CORP\Install”域帐户)启动对第一个 SQL Server VM(如 SQL-VM-1)的 RDP 文件

  2. 从其中一个 SQL Server VM 的“开始”菜单启动“SQL Server 配置管理器”。

  3. 在浏览器树中,突出显示“SQL Server 服务”,右键单击“SQL Server (MSSQLSERVER)”服务,并选择“属性”。

  4. 选中“FILESTREAM”选项卡,然后选中复选框“针对 Transact-SQL 访问启用 FILESTREAM”:

  5. 选择“应用”。 在弹出对话框中选择“确定”。

  6. 在 SQL Server Management Studio 中,选择“新建查询”以显示查询编辑器。

  7. 在查询编辑器中,输入以下 Transact-SQL 代码:

    EXEC sp_configure filestream_access_level, 2
    RECONFIGURE
    
  8. 选择“执行”。

  9. 重新启动 SQL Server 服务。

  10. 为其他 SQL Server 实例重复这些步骤。

在第一个 SQL Server 实例上创建数据库

  1. 使用属于 sysadmin 固定服务器角色的域帐户打开第一个 SQL Server VM 的 RDP 文件。
  2. 打开 SQL Server Management Studio (SSMS) 并连接到第一个 SQL Server 实例。
  3. 在“对象资源管理器”中,右键单击“数据库”,然后选择“新建数据库” 。
  4. 在“数据库名称”中,输入“MyDB1”,然后选择“确定”。

创建备份共享

  1. 在“服务器管理器”中的第一个 SQL Server VM 上,选择“工具”。 打开“计算机管理”。

  2. 选择“共享文件夹”。

  3. 右键单击“共享”,然后选择“新建共享”。

    屏幕截图显示用于开始备份共享创建过程的选项。

    使用“创建共享文件夹向导”创建共享。

  4. 在“文件夹路径”页上,选择“浏览”。 找到或创建数据库备份的共享文件夹的路径,然后选择“下一步”。

  5. 在“名称、说明和设置”页上,验证共享名称和路径。 然后,选择“下一步”。

  6. 在“共享文件夹权限”页上,设置“自定义权限”。 然后,选择“自定义”。

  7. 在“自定义权限”对话框中,选择“添加”。

  8. 选中“完全控制”以授予对 SQL Server 服务帐户 (Corp\SQLSvc) 共享的完全访问权限:

    “自定义权限”对话框的屏幕截图。请确保两个服务器的 SQL Server 服务帐户都具有完全控制权。

  9. 选择“确定”

  10. 在“共享文件夹权限”页上,选择“完成”。 再一次选择“完成”。

对数据库进行完整备份

需要备份新数据库才能初始化日志链。 如果不对新数据库进行备份,则无法在可用性组中包含该数据库。

  1. 在“对象资源管理器”中,右键单击数据库,点到“任务”,然后选择“备份”。

  2. 选择“确定”以完整备份到默认备份位置。

创建可用性组

现在,可以通过执行以下任务来创建和配置可用性组:

  • 在第一个 SQL Server 实例上创建数据库。
  • 获取数据库的完整备份和事务日志备份。
  • 使用 NO RECOVERY 选项将完整备份和日志备份还原到第二个 SQL Server 实例。
  • 通过同步提交、自动故障转移和可读辅助副本来创建可用性组 (MyTestAG)。

创建可用性组

  1. 使用远程桌面连接到 SQL Server VM 并打开 SQL Server Management Studio。

  2. 在 SSMS 中的“对象资源管理器”中,右键单击“Always On 高可用性”,并选择“新建可用性组向导”。

    SSMS 中的对象资源管理器的屏幕截图,其中包含用于启动“新建可用性组向导”的快捷方式命令。

  3. 在“简介” 页上,选择“下一步” 。 在“指定可用性组选项”页上的“可用性组名称”框中,输入可用性组的名称。 例如,输入 MyTestAG。 然后,选择“下一步”。

    屏幕截图显示在 SSMS 中的“新建可用性组向导”中指定可用性组名称。

  4. 在“选择数据库”页上,选择数据库,并选择“下一步”。

    注意

    这些数据库满足可用性组的先决条件,因为已针对预定主要副本进行了至少一次完整备份。

    屏幕截图显示在 SSMS 中的“新建可用性组向导”中选择数据库。

  5. 在“指定副本”页上,选择“添加副本”。

    屏幕截图显示用于在 SSMS 中的“新建可用性组向导”中添加副本的按钮。

  6. 在“连接到服务器”对话框的“服务器名称”处,输入第二个 SQL Server 实例的名称。 然后选择“连接” 。

    返回到“指定副本”页,此时应会看到“可用性副本”下列出了第二个服务器。 对副本进行如下配置。

    屏幕截图显示两个服务器在 SSMS 中“的新建可用性组向导”中列为副本。

  7. 选择“终结点”,查看此可用性组的数据库镜像终结点。 使用设置数据库镜像终结点的防火墙规则时所使用的相同的端口。

    屏幕截图显示 SSMS 中的“新建可用性组向导”中的“终结点”选项卡。

  8. 在“选择初始数据同步”页上,选择“完全同步”,并指定一个共享网络位置。 具体位置,使用创建的备份共享。 在本示例中为 \\<第一个 SQL Server 实例>\Backup\。 选择“下一页”。

    注意

    完全同步对 SQL Server 第一个实例上的数据库进行完整备份,并将其还原到第二个实例。 对于大型数据库,不建议进行完全同步,因为这可能需要很长时间。

    可以通过使用 NO RECOVERY 对数据库进行手动备份和还原来降低该时间。 如果配置可用性组之前,已在第二个 SQL Server 实例上使用 NO RECOVERY 对数据库进行还原,请选择“仅联接”。 若要在配置可用性组之后进行备份,请选择“跳过初始数据同步”。

    屏幕截图显示 SSMS 中的“新建可用性组向导”中用于数据同步的选项。

  9. 在“验证”页中,选择“下一步”。 此页面应与下图类似:

    显示 SSMS 中“新建可用性组向导”中的验证结果的页面屏幕截图。

    注意

    因为尚未配置可用性组侦听程序,所以会出现一个侦听器配置警告。 在 Azure 虚拟机上,要创建 Azure 负载均衡器之后才创建侦听器,因此可以忽略此警告。

  10. 在“摘要”页上,选择“完成”,然后等待向导配置完新的可用性组。 在“进度”页上,可选择“更多详细信息”查看详细进度。

    向导完成配置后,请检查“结果”页,确认已成功创建可用性组。

    屏幕截图显示 SSMS 中的新建可用性组向导成功完成。

  11. 选择“关闭”以关闭向导。

查看可用性组

  1. 在“对象资源管理器”中,展开“AlwaysOn 高可用性”,并展开“可用性组”。 此时,应在此容器中看到新的可用性组。 右键单击可用性组,然后选择“显示面板”。

    SSMS 中对象资源管理器的屏幕截图,其中显示了用于打开可用性组仪表板的选项。

    可用性组仪表板应类似于以下屏幕截图:

    SSMS 中的“可用性组”仪表板的屏幕截图。

    仪表板会显示副本、每个副本的故障转移模式以及同步状态。

  2. 在“故障转移群集管理器”中,选择群集。 选择“角色”。

    使用的可用性组名称是群集上的一个角色。 该可用性组不具有客户端连接的 IP 地址,原因是你未配置侦听器。 创建 Azure 负载均衡器后再配置该侦听器。

    “故障转移群集管理器”中的可用性组的屏幕截图。

    警告

    请勿尝试从故障转移群集管理器对可用性组进行故障转移。 所有故障转移操作都应在 SSMS 中的可用性组仪表板上执行。 详细了解关于将故障转移群集管理器用于可用性组的限制

此时,你有一个包含两个 SQL Server 副本的可用性组。 你可在这两个实例之间移动该可用性组。 但无法连接到该可用性组,因为你没有侦听器。

在 Azure 虚拟机中,侦听器需要负载均衡器。 下一步是在 Azure 中创建负载均衡器。

创建 Azure 负载均衡器

注意

将可用性组部署到多个子网不需要负载均衡器。 在单子网环境中,在 Windows 2016 及更高版本上使用 SQL Server 2019 CU8 及更高版本的客户可以将传统的虚拟网络名称 (VNN) 侦听器和 Azure 负载均衡器替换为分布式网络名称 (DNN) 侦听器。 如果要使用 DNN,请跳过为可用性组配置 Azure 负载均衡器的所有教程步骤。

在单子网的 Azure 虚拟机上,SQL Server 可用性组需要一个负载均衡器。 负载均衡器保留可用性组侦听程序和 Windows Server 故障转移群集的 IP 地址。 本部分概述如何在 Azure 门户中创建负载均衡器。

Azure 中的负载均衡器可以是标准负载均衡器,也可以是基本负载均衡器。 标准负载均衡器的功能比基本负载均衡器的功能更多。 对于可用性组,如果使用可用性区域(而不是可用性集),则需要标准负载均衡器。 有关 SKU 之间的差异的详细信息,请参阅 Azure 负载均衡器 SKU

重要

2025 年 9 月 30 日,Azure 负载均衡器的基本 SKU 将停用。 有关详细信息,请查看官方公告。 如果当前使用的是基本负载均衡器,请在停用日期之前将其升级到标准负载均衡器。 有关指导,请查看升级负载均衡器

  1. 在 Azure 门户中,转到包含 SQL Server VM 的资源组,并选择“+ 添加”。

  2. 搜索“负载均衡器”。 选择 Microsoft 发布的负载均衡器。

    屏幕截图显示选择 Microsoft 发布的负载均衡器。

  3. 选择“创建”。

  4. 在“创建负载均衡器”页上,为负载均衡器配置以下参数:

    设置 输入或选择
    订阅 使用虚拟机所在的同一个订阅。
    资源组 使用虚拟机所在的同一资源组。
    名称 为负载均衡器使用文本名称,例如“sqlLB”。
    区域 使用与虚拟机相同的区域。
    SKU 选择“标准”。
    类型 选择“内部”。

    此页应如下所示:

    Azure 门户的屏幕截图,其中显示了为负载均衡器选择的参数。

  5. 选择“下一步: 前端 IP 配置”。

  6. 选择“+ 添加前端 IP 配置”。

    屏幕截图显示用于在 Azure 门户中创建前端 IP 配置的按钮。

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

    • 名称:输入标识前端 IP 配置的名称。
    • 虚拟网络:选择与虚拟机相同的网络。
    • 子网:选择与虚拟机相同的子网。
    • 分配:选择“静态”。
    • IP 地址:使用子网中的可用地址。 将该地址用于可用性组侦听程序。 此地址不同于群集 IP 地址。
    • 可用性区域:(可选)选择一个要将 IP 地址部署到的可用性区域。

    下图显示了“添加前端 IP 配置”对话框:

    Azure 门户的屏幕截图,其中显示了用于前端 IP 配置的对话框。

  8. 选择 添加

  9. 选择“查看 + 创建”以验证配置。 然后,选择“创建”以创建负载均衡器和前端 IP 地址。

若要配置负载均衡器,需要创建一个后端池、一个探测,并设置负载均衡规则。

为可用性组侦听程序添加后端池

  1. 在 Azure 门户中,转到你的资源组。 可能需要刷新视图才能看到新建的负载均衡器。

    Azure 门户的屏幕截图,其中显示了可用性组中的负载均衡器。

  2. 选择负载均衡器,选择“后端池”,然后选择“+ 添加”。

  3. 在“名称”处,为后端池提供一个名称。

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

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

  6. 在“虚拟机”下,选择将托管可用性组副本的虚拟机。 请勿包括文件共享见证服务器。

    注意

    如果未指定这两个虚拟机,则只有与主要副本的连接会成功。

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

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

设置探测

  1. 在 Azure 门户中,选择负载均衡器,然后依次选择“运行状况探测”和“+ 添加”。

  2. 对侦听器运行状况探测进行如下设置:

    设置 说明 示例
    名称 文本 SQLAlwaysOnEndPointProbe
    协议 选择 TCP TCP
    端口 任何未使用的端口 59999
    时间间隔 尝试探测之间的间隔时间(秒) 5
  3. 选择 添加

设置负载均衡规则

  1. 在 Azure 门户中,选择负载均衡器,然后依次选择“负载均衡规则”和“+ 添加”。

  2. 对侦听器的负载均衡规则进行如下设置:

    设置 说明 示例
    名称 文本 SQLAlwaysOnEndPointListener
    “前端 IP 地址” 选择地址 使用创建负载均衡器时所创建的地址。
    后端池 选择后端池 选择包含负载均衡器目标虚拟机的后端池。
    协议 选择 TCP TCP
    端口 使用可用性组侦听程序的端口 1433
    后端端口 为直接服务器返回设置浮动 IP 时,不会使用此字段 1433
    运行状况探测 为探测指定的名称 SQLAlwaysOnEndPointProbe
    会话持久性 下拉列表
    空闲超时 将 TCP 连接保持打开的分钟数 4
    浮动 IP (直接服务器返回) 流拓扑和 IP 地址映射方案 已启用

    警告

    直接服务器返回是在创建过程中设置的, 你无法更改此项。

  3. 选择“保存” 。

添加 Windows Server 故障转移群集的群集核心 IP 地址

Windows Server 故障转移群集的 IP 地址也需要位于负载均衡器上。 如果使用的是 Windows Server 2019,请跳过此过程,因为群集将创建“分布式服务器名称”值,而不是“群集网络名称”值。

  1. 在 Azure 门户中转到相同的 Azure 负载均衡器。 选择“前端 IP 配置”,然后选择“+ 添加”。 使用在群集核心资源中为 Windows Server 故障转移群集配置的 IP 地址。 将 IP 地址设置为“静态”。

  2. 在负载均衡器上,选择“运行状况探测”,然后选择“+添加” 。

  3. 对 Windows Server 故障转移群集的群集核心 IP 地址运行状况探测进行如下设置:

    设置 说明 示例
    名称 文本 WSFCEndPointProbe
    协议 选择 TCP TCP
    端口 任何未使用的端口 58888
    时间间隔 尝试探测之间的间隔时间(秒) 5
  4. 选择“添加”以设置运行状况探测。

  5. 选择“负载均衡规则”,然后选择“+ 添加”。

  6. 对群集核心 IP 地址的负载均衡规则进行如下设置:

    设置 说明 示例
    名称 文本 WSFCEndPoint
    “前端 IP 地址” 选择地址 使用为 Windows Server 故障转移群集配置 IP 地址时创建的地址。 这不同于侦听器 IP 地址。
    后端池 选择后端池 选择包含负载均衡器目标虚拟机的后端池。
    协议 选择 TCP TCP
    端口 使用群集 IP 地址的端口。 这是可用的端口,不用于侦听器探测端口。 58888
    后端端口 为直接服务器返回设置浮动 IP 时,不会使用此字段 58888
    探测 为探测指定的名称 WSFCEndPointProbe
    会话持久性 下拉列表
    空闲超时 将 TCP 连接保持打开的分钟数 4
    浮动 IP (直接服务器返回) 流拓扑和 IP 地址映射方案 已启用

    警告

    直接服务器返回是在创建过程中设置的, 你无法更改此项。

  7. 选择“确定”。

配置侦听器

下一步是在故障转移群集上配置可用性组侦听程序。

注意

本教程介绍如何为内部负载均衡器创建单个侦听器,该侦听器具有一个 IP 地址。 若要使用一个或多个 IP 地址创建侦听器,请参阅配置一个或多个 Always On 可用性组侦听程序

可用性组侦听器是 SQL Server 可用性组侦听的 IP 地址和网络名称。 创建可用性组侦听程序:

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

    a. 使用 RDP 连接到托管主副本的 Azure 虚拟机。

    b. 打开“故障转移群集管理器”。

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

    屏幕截图显示故障转移群集管理器中的群集网络名称。

  2. 添加客户端接入点。 客户端接入点是应用程序用来连接到可用性组中的数据库的网络名称。

    a. 在“故障转移群集管理器”中,展开群集名称,然后选择“角色”。

    b. 在“角色”窗格中,右键单击可用性组名称,然后选择“添加资源”>“客户端接入点”。

    故障转移群集管理器的屏幕截图,其中显示了选择可用性组快捷菜单上的“客户端接入点”命令。

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

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

  3. 使可用性组的群集角色脱机。 在“故障转移群集管理器”的“角色”下,右键单击角色,然后选择“停止角色”。

  4. 配置可用性组的 IP 资源:

    a. 选择“资源”选项卡,并展开创建的客户端接入点。 客户端接入点处于脱机状态。

    故障转移群集管理器的屏幕截图,其中显示了客户端接入点的脱机状态。

    b. 右键单击 IP 资源,然后选择“属性”。 记下 IP 地址的名称,将其用在 PowerShell 脚本的 $IPResourceName 变量中。

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

    故障转移群集管理器的屏幕截图,其中显示了选择的 IP 地址。

  5. 使 SQL Server 可用性组依赖于客户端接入点:

    a. 在故障转移群集管理器中,选择“角色”,然后选择可用性组。

    b. 在“资源”选项卡的“其他资源”下,右键单击可用性组资源,然后选择“属性”。

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

    故障转移群集管理器的屏幕截图,其中显示了在“依赖项”选项卡上添加名称。

    d. 选择“确定”。

  6. 使客户端接入点依赖于 IP 地址:

    a. 在故障转移群集管理器中,选择“角色”,然后选择可用性组。

    b. 在“资源”选项卡上,右键单击“服务器名称”下的客户端接入点,然后选择“属性”。

    故障转移群集管理器的屏幕截图,其中显示了侦听器名称的“属性”菜单选项。

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

    显示可用性组 IP 资源的“依赖项”选项卡屏幕截图。

    提示

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

  7. 在 PowerShell 中设置群集参数:

    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 资源名称也不同。

  8. 使可用性组的群集角色联机。 在“故障转移群集管理器”的“角色”下,右键单击角色,然后选择“启动角色”。

如有必要,请重复上述步骤,为 Windows Server 故障转移群集的 IP 地址设置群集参数:

  1. 获取 Windows Server 故障转移群集的 IP 地址名称。 在“故障转移群集管理器”中的“群集核心资源”下,找到“服务器名称”。

  2. 右键单击“IP 地址”,然后选择“属性”。

  3. 从“名称”中复制 IP 地址的名称。 它可能是群集 IP 地址。

  4. 在 PowerShell 中设置群集参数:

    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 中设置侦听器端口:

  1. 打开 SQL Server Management Studio 并连接到主要副本。

  2. 转到“Always On 高可用性”>“可用性组”>“可用性组侦听程序”。

  3. 右键单击在故障转移群集管理器中创建的侦听器名称,然后选择“属性”。

  4. 在“端口”框中,指定可用性组侦听程序的端口号。 默认值为 1433。 选择“确定”。

现在,在 Azure 资源管理器模式下运行的 Azure VM 上已有一个 SQL Server 的可用性组。

测试与侦听器的连接

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

  1. 使用 RDP 连接到同一个虚拟网络中但不拥有副本的 SQL Server VM,例如另一个副本。

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

    sqlcmd -S <listenerName> -E
    

    如果侦听器使用的端口不是默认端口 (1433),请在连接字符串中指定该端口。 例如,以下命令连接到位于端口 1435 的侦听器:

    sqlcmd -S <listenerName>,1435 -E
    

sqlcmd 实用工具会自动连接到用作可用性组的当前主要副本的 SQL Server 实例。

提示

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