你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

为 Azure SQL 托管实例配置故障转移组

适用于: Azure SQL 托管实例

本文介绍如何使用 Azure 门户和 Azure PowerShell 为 Azure SQL 托管实例配置故障转移组

若要使端到端 PowerShell 脚本在故障转移组中创建这两个实例,请查阅使用 PowerShell 将实例添加到故障转移组

先决条件

要配置故障转移组,你需要事先具有恰当的权限以及一个要用作主实例的 SQL 托管实例。 要开始,请查阅创建实例

在创建辅助实例和故障转移组之前,请务必检查限制

配置要求

若要在主 SQL 托管实例和辅助 SQL 托管实例之间配置一个故障转移组,请考虑以下要求:

  • 辅助托管实例必须为空,即不包含任何用户数据库。
  • 这两个实例需位于相同的服务层级,并且具有相同的存储大小。 强烈建议让两个实例具有相同的计算大小,以确保辅助实例可以持续处理从主实例复制的更改(包括峰值活动的周期),虽然这不是必需的。
  • 主 IP 实例虚拟网络的地址范围不得与辅助托管实例的虚拟网络的地址范围以及与主虚拟网络或辅助虚拟网络对等互连的任何其他虚拟网络对等互连重叠。
  • 这两个实例必须位于相同的 DNS 区域中。 创建辅助托管实例时,必须指定主实例的 DNS 区域 ID。 如果你没有指定,则在每个虚拟网络中创建第一个实例时,将生成随机字符串形式的区域 ID,同一个 ID 将分配到同一子网中的所有其他实例。 分配后,无法修改 DNS 区域。
  • 两个实例子网的网络安全组 (NSG) 规则必须打开端口 5022 和端口范围 11000-11999 的入站和出站 TCP 连接,以方便两个实例之间的通信。
  • 出于性能原因,托管实例应部署到配对区域中。 与未配对区域相比,驻留在异地配对区域中的托管实例受益于明显更高的异地复制速度。
  • 这两个实例必须使用相同的更新策略

创建辅助实例

创建辅助实例时,所使用的虚拟网络的 IP 地址空间不得与主实例的 IP 地址空间范围重叠。 另外,配置新的辅助实例时,必须指定主实例的区域 ID。

可以使用 Azure 门户 和 PowerShell 来配置辅助虚拟网络并创建辅助实例。

创建虚拟网络

要在 Azure 门户中为辅助实例创建虚拟网络,请按照以下步骤操作:

  1. 检查主实例的地址空间。 在 Azure 门户中转到主实例的虚拟网络资源,然后在“设置”下选择“地址空间”。 检查地址范围下的范围:

    Azure 门户中主虚拟网络的地址空间的屏幕截图。

  2. 转到创建虚拟网络页,创建一个计划用于辅助实例的新的虚拟网络。

  3. 在“创建虚拟网络”页的“基本信息”选项卡上:

    1. 选择要用于辅助实例的“资源组”。 如果资源组不存在,则创建一个新的资源组。
    2. 提供虚拟网络的名称,例如 vnet-sql-mi-secondary
    3. 选择与主实例所在的区域配对的区域。
  4. 在“创建虚拟网络”页的“IP 地址”选项卡上:

    1. 使用“删除地址空间”,删除现有的 IPv4 地址空间。
    2. 删除地址空间后,选择“添加 IPv4 地址空间”,添加新的空间,然后提供与主实例虚拟网络使用的地址空间不同的 IP 地址空间。 例如,如果当前的主实例使用的地址空间是 10.0.0.16,则输入 10.1.0.0/16 表示你要用于辅助实例的虚拟网络的地址空间。
    3. 使用“+ 添加子网”,添加具有默认值的默认子网。
    4. 使用“+ 添加子网”,添加一个名为 ManagedInstance 的空子网,该子网专用于辅助实例,使用与默认子网不同的地址范围。 例如,如果主实例使用的地址范围是 10.0.0.0 - 10.0.255.255,则为辅助实例的子网提供子网范围 10.1.1.0 - 10.1.1.255

    Azure 门户中新虚拟网络的地址空间的屏幕截图。

  5. 使用“查看 + 创建”以检查设置,然后使用“创建”以创建新的虚拟网络。

创建辅助实例

虚拟网络准备好后,按照以下步骤在 Azure 门户中创建辅助实例:

  1. 转到 Azure 门户中的创建 Azure SQL 托管实例

  2. 在“创建 Azure SQL 托管实例”页的“基本信息”选项卡上:

    1. 为与主实例配对的辅助实例选择一个区域。
    2. 选择一个与主实例的服务层级匹配的服务层级。
  3. 在“创建 Azure SQL 托管实例”页的“网络”选项卡上,使用“虚拟网络/子网”下的下拉列表选择之前创建的虚拟网络和子网:

    屏幕截图突出显示在 Azure 门户中创建用于辅助实例的网络。

  4. 在“创建 Azure SQL 托管实例”页的“其他设置”选项卡上,选择“是”以“用作故障转移辅助托管实例”,然后从下拉列表中选择相应的主实例。

    Azure 门户的屏幕截图,其中在“其他设置”页上将主托管实例指定为故障转移辅助实例。

  5. 根据业务需求配置实例的其余部分,然后使用“查看 + 创建”创建该实例。

在实例之间建立连接

为确保异地复制通信流不间断,必须在托管主实例和辅助实例的虚拟网络子网之间建立连接。 有多种方法可以连接不同 Azure 区域中的托管实例,其中包括:

建议使用全局虚拟网络对等互连,作为在故障转移组中的实例之间建立连接的最高性能和最可靠的方法。 全局虚拟网络对等互连使用 Microsoft 主干基础结构,在对等互连的虚拟网络之间提供低延迟、高带宽的专用连接。 在对等互连的虚拟网络之间通信不需公共 Internet、网关或额外加密。

重要

连接涉及其他网络设备的实例的替代方法可能会使连接故障排除或复制速度问题复杂化,可能需要网络管理员的积极参与,并可能显著延长解决时间。

如果使用机制(而不是使用建议的全局虚拟网络对等互连)来建立实例之间的连接,则需要确保:

  • 网络设备(如防火墙或网络虚拟设备 (NVA))不会阻止端口 5022 (TCP) 和端口范围 11000-11999 的入站和出站连接上的流量。
  • 路由已正确配置,并且避免了非对称路由。
  • 如果在跨区域的中心辐射型网络拓扑中部署故障转移组,以避免连接和复制速度问题,复制流量应直接在两个托管实例子网之间传输,而不是通过中心网络来定向。

本文介绍如何使用 Azure 门户 和 PowerShell 在两个实例的网络之间配置全局虚拟网络对等互连。

  1. Azure 门户中转到主托管实例的“虚拟网络”资源。

  2. 在“设置”下选择“对等互连”,打开“对等互连”页,然后使用命令栏中的“+ 添加”打开“添加对等互连”页。

    Azure 门户中虚拟网络 A 的对等互连页的屏幕截图。

  3. 在“添加对等互连”页中,为以下设置输入或选择值:

    设置 说明
    远程虚拟网络摘要
    对等互连链接名称 对等互连的名称在虚拟网络中必须唯一。 本文使用的是 Fog-peering
    虚拟网络部署模型 选择“资源管理器”。
    我知道我的资源 ID 可以取消选中此框,除非知道资源 ID。
    订阅 从下拉列表中选择“订阅”。
    虚拟网络 从下拉列表中选择辅助实例的虚拟网络。
    远程虚拟网络对等互连设置
    允许“辅助虚拟网络”访问“主虚拟网络” 选中此框,允许在两个网络之间进行通信。 启用虚拟网络之间的通信可允许资源连接到任意虚拟网络,并以相同的带宽和延迟互相进行通信,就如同它们是连接到同一个虚拟网络一样。 这两个虚拟网络中的资源之间的所有通信都在 Azure 专用网络上进行。
    允许“辅助虚拟网络”接收来自“主虚拟网络”的转发流量 可以选中或取消选中此框,这两种方法都适用于本指南。 有关详细信息,请参阅创建对等互连
    允许“辅助虚拟网络”中的网关或路由服务器将流量转发到“主虚拟网络” 可以选中或取消选中此框,这两种方法都适用于本指南。 有关详细信息,请参阅创建对等互连
    启用“辅助虚拟网络”,以使用“主虚拟网络”的远程网关或路由服务器 取消选中此框。 有关其他可用选项的详细信息,请参阅创建对等互连
    本地虚拟网络摘要
    对等互连链接名称 远程虚拟网络使用的同一对等互连的名称。 本文使用的是 Fog-peering
    允许“主虚拟网络”访问“辅助虚拟网络” 选中此框,允许在两个网络之间进行通信。 启用虚拟网络之间的通信可允许资源连接到任意虚拟网络,并以相同的带宽和延迟互相进行通信,就如同它们是连接到同一个虚拟网络一样。 这两个虚拟网络中的资源之间的所有通信都在 Azure 专用网络上进行。
    允许“主虚拟网络”接收来自“辅助虚拟网络”的转发流量 可以选中或取消选中此框,这两种方法都适用于本指南。 有关详细信息,请参阅创建对等互连
    允许“主虚拟网络”中的网关或路由服务器将流量转发到“辅助虚拟网络” 可以选中或取消选中此框,这两种方法都适用于本指南。 有关详细信息,请参阅创建对等互连
    启用“主虚拟网络”,以使用“辅助虚拟网络”的远程网关或路由服务器 取消选中此框。 有关其他可用选项的详细信息,请参阅创建对等互连
  4. 使用“添加”来配置与所选虚拟网络的对等互连,并自动导航回“对等互连”页,该页面显示两个网络已连接:

    Azure 门户中对等互连页上虚拟网络对等互连状态的屏幕截图。

配置端口和 NSG 规则

无论两个实例之间选择的连接机制为何,网络都必须满足以下异地复制流量的要求:

  • 分配给托管实例子网的路由表和网络安全组不会在两个对等互连的虚拟网络之间共享。
  • 托管每个实例的两个子网上的网络安全组 (NSG) 规则允许端口 5022 和端口范围 11000-11999 上的入站和出站流量流向其他实例。

可以使用 Azure 门户和 PowerShell 配置端口通信和 NSG 规则。

若要在 Azure 门户中打开网络安全组 (NSG) 端口,请执行以下步骤:

  1. 转到主实例的网络安全组资源。

  2. 在“设置”下,选择“入站安全规则”。 检查你是否已经有了允许端口 5022 和范围 11000-11999 的流量的规则。 如果是,并且源满足业务需求,请跳过此步骤。 如果规则不存在,或者要使用其他源(例如更加安全的 IP 地址),请删除现有规则,然后从命令栏中选择“+ 添加”,从而打开“添加入站安全规则”窗格:

    在 Azure 门户中为 NSG 添加入站安全规则的屏幕截图。

  3. 在“添加入站安全规则”窗格中,输入或选择以下设置的值:

    设置 建议的值 说明
    Source IP 地址或服务标记 通信源的筛选器。 IP 地址是最安全的,建议用于生产环境。 而服务标记则适用于非生产环境。
    源服务标记 如果选择了服务标记作为源,则提供 VirtualNetwork 作为源标记。 默认标记是表示 IP 地址类别的预定义标识符。 VirtualNetwork 标记表示所有虚拟和本地网络地址空间。
    源 IP 地址 如果选择了 IP 地址作为源,则提供辅助实例的 IP 地址。 使用 CIDR 表示法(例如 192.168.99.0/24 或 2001:1234::/64)或 IP 地址(例如 192.168.99.0 或 2001:1234::)提供地址范围。 还可以使用 IPv4 或 IPv6 提供 IP 地址或地址范围的逗号分隔列表。
    源端口范围 5022 这指定此规则允许哪些端口流量。
    服务 自定义 该服务会指定此规则的目标协议和端口范围。
    目标端口范围 5022 这指定此规则允许哪些端口流量。 此端口应与源端口范围相匹配。
    操作 允许 允许在指定端口上进行通信。
    协议 TCP 确定端口通信协议。
    优先级 1200 规则按优先级顺序进行处理:数字越低,优先级越高。
    名称 allow_geodr_inbound 规则的名称。
    说明 可选 可以选择提供说明,或将此字段留空。

    选择“添加”,保存设置并添加新规则。

  4. 重复这些步骤,为端口范围 11000-11999 添加另一个入站安全规则,其名称可以是 allow_redirect_inbound,优先级略高于 5022 规则,例如 1100

  5. 设置下,选择出站安全规则。 检查你是否已经有了允许端口 5022 和范围 11000-11999 的流量的规则。 如果是,并且源满足业务需求,请跳过此步骤。 如果规则不存在,或者要使用其他源(例如更加安全的 IP 地址),请删除现有规则,然后从命令栏中选择“+ 添加”,从而打开“添加出战安全规则”窗格。

  6. 对于“添加出站安全规则”窗格中的端口 5022 和范围 11000-11999,请使用与入站端口相同的配置。

  7. 转到辅助实例的网络安全组,重复这些步骤,使两个网络安全组都具有以下规则:

    • 允许端口 5022 上的入站流量
    • 允许端口范围 11000-11999 上的入站流量
    • 允许端口 5022 上的出站流量
    • 允许端口范围 11000-11999 上的出站流量

创建故障转移组

使用 Azure 门户或 PowerShell 为托管实例创建故障转移组。

使用 Azure 门户为 SQL 托管实例创建故障转移组。

  1. Azure 门户的左侧菜单中选择“Azure SQL”。 如果 Azure SQL 不在列表中,请选择“所有服务”,然后在搜索框中键入“Azure SQL” 。 (可选)选择“Azure SQL”旁边的星号,将其作为收藏项添加到左侧导航栏。

  2. 选择要添加到故障转移组中的主托管实例。

  3. 在“数据管理”下,选择“故障转移组”,然后使用“添加组”以打开“实例故障转移组”页:

    显示在 Azure 门户中添加故障转移组页的屏幕截图。

  4. 在“实例故障转移组”页上:

    1. 预先选择“主托管实例”
    2. 在“故障转移组名称”下,输入一个故障转移组的名称。
    3. 在“辅助托管实例”下,选择要用作故障转移组中的辅助实例的托管实例。
    4. 从下拉列表中选择“读/写故障转移策略”建议手动控制故障转移。
    5. 将“启用故障转移权限”保留为“关闭”,除非打算将此副本仅用于灾难恢复
    6. 使用“创建”,保存设置并创建故障转移组。

    显示在 Azure 门户中创建故障转移组的屏幕截图。

  5. 开始部署故障转移组后,你将返回到“故障转移组”页面。 刷新页面将,显示部署完成后的新故障转移组。

测试故障转移

使用 Azure 门户或 PowerShell 测试故障转移组的故障转移。

注意

如果实例位于不同的订阅或资源组中,从辅助实例启动故障转移。

使用 Azure 门户测试故障转移组的故障转移。

  1. 转到 Azure 门户中的主托管实例或辅助托管实例。

  2. 数据管理下,选择故障转移组

  3. 在“故障转移组”窗格中,记下哪个实例是主实例,哪个实例是辅助实例。

  4. 在“故障转移组”窗格上,从命令栏中选择“故障转移”。 在有关 TDS 会话断开连接的警告上选择“是”,并记下许可含义。

    显示在 Azure 门户中转移故障转移组的屏幕截图。

  5. 在“故障转移组”窗格上,故障转移成功后,实例会切换角色,从而使之前的辅助实例成为新的主实例,而之前的主实例将成为新的辅助实例。

    重要

    如果角色未切换,请检查实例与相关 NSG 之间的连接以及防火墙规则。 仅当角色切换后才继续执行下一步。

  6. (可选)在“故障转移组”窗格上,使用“故障转移”切换回角色,从而使原始主实例重新成为主实例。

修改现有故障转移组

可以使用 Azure 门户、PowerShell、Azure CLI 和 REST API 修改现有故障转移组,例如更改故障转移策略

要使用 Azure 门户修改现有的故障转移组,请遵照以下步骤执行:

  1. 转到 Azure 门户中的 SQL 托管实例

  2. 在“数据管理”下,选择“故障转移组”以打开“故障转移组”窗格。

  3. 在“故障转移组”窗格中,从命令栏中选择“编辑配置”以打开“编辑故障转移组”窗格:

    Azure 门户中的“故障转移组”窗格屏幕截图,其中突出显示了“编辑配置”。

定位侦听器终结点

配置故障转移组后,更新应用程序的连接字符串,以指向“读/写”侦听器终结点,以便应用程序在故障转移后继续连接到主实例。 通过使用侦听器终结点,无需在每次故障转移组故障转移时都手动更新连接字符串,因为流量始终会被路由到当前的主数据库。 还可以将只读工作负载指向“只读”侦听器终结点。

重要

虽然支持使用实例专用连接字符串连接到故障转移组中的实例时,但强烈建议不要这样做。 应改用侦听器端点。

若要在 Azure 门户中找到侦听器终结点,请转到你的 SQL 托管实例,然后在“数据管理”下选择“故障转移组”

向下滚动,查找侦听器终结点:

  • “读/写”侦听器终结点,其形式是 fog-name.dns-zone.database.windows.net,会将流量路由到主实例。
  • “只读”侦听器终结点,其形式是 fog-name.secondary.dns-zone.database.windows.net,会将流量路由到辅助实例。

显示在 Azure 门户中查找故障转移组连接字符串的位置的屏幕截图。

在不同订阅的实例之间创建故障转移组

只要订阅与同一个 Microsoft Entra 租户关联,就可以在两个不同订阅中的 SQL 托管实例之间创建故障转移组。

  • 使用 PowerShell API 时,可以通过为辅助 SQL 托管实例指定 PartnerSubscriptionId 参数来执行此操作。
  • 使用 REST API 时,properties.managedInstancePairs 参数中包含的每个实例 ID 都可以具有自己的订阅 ID。
  • Azure 门户不支持创建跨不同订阅的故障转移组。

重要

Azure 门户不支持创建跨不同订阅的故障转移组。 对于跨不同订阅和/或资源组的故障转移组,不能通过 Azure 门户从主 SQL 托管实例手动启动故障转移。 改为从异地辅助实例启动它。

防止关键数据丢失

由于广域网的延迟时间较长,异地复制使用了异步复制机制。 如果主数据库发生故障,异步复制会导致数据丢失不可避免。 为了防止这些关键事务数据丢失,应用程序开发人员可以在提交事务后立即调用 sp_wait_for_database_copy_sync 存储过程。 调用 sp_wait_for_database_copy_sync 会阻止调用线程,直到最后提交的事务已传输并强制执行到辅助数据库的事务日志中。 但是,它不会等待传输的事务在辅助数据库上进行重播(恢复)。 sp_wait_for_database_copy_sync 范围限定为特定异地复制链接。 对主数据库具有连接权限的任何用户都可以调用此过程。

注意

sp_wait_for_database_copy_sync 防止特定事务异地故障转移后数据丢失,但不保证完全同步进行读取访问。 sp_wait_for_database_copy_sync 过程调用导致的延迟可能很明显,具体取决于调用时主数据库上尚未传输的事务日志大小。

更改次要区域

假设实例 A 是主实例,实例 B 是现有的辅助实例,实例 C 是第三个区域中的新辅助实例。 若要进行转换,请执行以下步骤:

  1. 在同一个 DNS 区域中创建大小与 A 相同的实例 C。
  2. 删除实例 A 与 B 之间的故障转移组。此时,尝试登录开始失败,因为故障转移组侦听器的 SQL 别名已删除,因此网关无法识别故障转移组名称。 辅助数据库从主实例断开连接,并成为读写数据库。
  3. 在实例 A 与 C 之间创建同名的故障转移组。按照配置故障转移组指南中的说明操作。 这是一个与数据大小相关的操作,实例 A 中的所有数据库都已设定种子并同步后,则此操作完成。
  4. 如果不需要实例 B,请将其删除,以免产生不必要的费用。

注意

完成步骤 2 到 3 后,如果实例 A 发生灾难性故障,其中的数据库将仍不受保护。

更改主要区域

假设实例 A 是主实例,实例 B 是现有的辅助实例,实例 C 是第三个区域中的新主实例。 若要进行转换,请执行以下步骤:

  1. 在同一个 DNS 区域中创建大小与 B 相同的实例 C。
  2. 从实例 B 启动手动故障转移,使其成为新的主实例。 实例 A 自动成为新的辅助实例。
  3. 删除实例 A 和 B 之间的故障转移组。此时,使用故障转移组终结点的登录尝试会失败。 A 上的辅助数据库与主数据库断开连接,并成为读写数据库。
  4. 在实例 B 和 C 之间以相同名称创建故障转移组。这是一个与数据大小相关的操作,当实例 B 中的所有数据库都已设定种子并与实例 C 同步后,此操作完成。此时,登录尝试将不再失败。
  5. 手动故障转移以将 C 实例切换到主角色。 实例 B 自动成为新的辅助实例。
  6. 如果不需要实例 A,请将其删除,以免产生不必要的费用。

注意

完成步骤 3 到 4 后,如果实例 A 发生灾难性故障,其中的数据库将仍不受保护。

重要

删除故障转移组时,也会删除侦听器终结点的 DNS 记录。 此时,其他人有可能创建同名的故障转移组。 由于故障转移组名称必须全局唯一,因此这将阻止你再次使用相同名称。 为最大程度地降低这种风险,请勿使用通用的故障转移组名称。

更改更新策略

故障转移组中的实例必须具有匹配的更新策略。 若要在属于故障转移组的实例上启用“始终保持最新”更新策略,请先在辅助实例上启用“始终保持最新”更新策略,等待更改生效,然后才能更新主实例的策略。

虽然更改故障转移组中主实例的更新策略会导致实例故障转移到另一个本地节点(类似于不属于故障转移组的实例的管理操作),但不会导致故障转移组进行故障转移,从而使主实例保持为主角色。

注意

将更新的策略更改为“始终保持最新”后,将无法再将其更改回“SQL Server 2022”更新策略。

启用依赖于系统数据库中的对象的方案

系统数据库不会复制到故障转移组中的辅助实例。 若要启用依赖于系统数据库中的对象的方案,请确保在辅助实例上创建相同的对象并让辅助实例与主实例保持同步。

例如,如果你计划在辅助实例上使用相同的登录名,请确保使用相同的 SID 创建它们。

-- Code to create login on the secondary instance
CREATE LOGIN foo WITH PASSWORD = '<enterStrongPasswordHere>', SID = <login_sid>;

有关详细信息,请参阅复制登录名和代理作业

同步实例属性和保留策略实例

故障转移组中的实例保持独立的 Azure 资源,对主实例配置所做的任何更改都不会自动复制到辅助实例。 确保同时在主要和辅助实例上执行所有相关更改。 例如,如果在主实例上更改备份存储冗余或长期备份保留策略,请确保在辅助实例上也进行更改。

缩放实例

可以在同一服务层级内将主实例和辅助实例纵向扩展或缩减到不同的计算大小,或纵向扩展或缩减到不同的服务层级。 在同一服务层级内纵向扩展时,请先纵向扩展异地辅助实例,然后再纵向扩展主实例。 在同一服务层级内纵向缩减时,按相反顺序操作:先纵向缩减主数据库,再纵向缩减辅助数据库。 将实例扩展到其他服务层级时,请遵循相同的顺序。

建议按此顺序进行,以避免出现以下问题:较低 SKU 的异地辅助实例过载,并且必须在升级或降级过程中重新设定种子。

权限

通过 Azure 基于角色的访问控制 (Azure RBAC) 管理故障转移组的权限。

SQL 托管实例参与者角色的范围限定为主要托管实例和辅助托管实例的资源组,足以对故障转移组执行所有管理操作。

下表提供了最低所需权限的精细视图,以及它们各自针对故障转移组的管理操作所需的最小范围级别

管理操作 权限 范围
创建/更新故障转移组 Microsoft.Sql/locations/instanceFailoverGroups/write 主托管实例和辅助托管实例的资源组
创建/更新故障转移组 Microsoft.Sql/managedInstances/write 主托管实例和辅助托管实例
对故障转移组进行故障转移 Microsoft.Sql/locations/instanceFailoverGroups/failover/action 主托管实例和辅助托管实例的资源组
对故障转移组强制执行故障转移 Microsoft.Sql/locations/instanceFailoverGroups/forceFailoverAllowDataLoss/action 主托管实例和辅助托管实例的资源组
删除故障转移组 Microsoft.Sql/locations/instanceFailoverGroups/delete 主托管实例和辅助托管实例的资源组

限制

创建新的故障转移组时,应注意以下限制:

  • 不能在同一 Azure 区域中的两个实例之间创建故障转移组。
  • 一个实例在任何时候只能参与一个故障转移组。
  • 不能在属于不同 Azure 租户的两个实例之间创建故障转移组。
  • 仅 Azure PowerShell 或 REST API(而不是 Azure 门户或 Azure CLI)支持在不同资源组或订阅中的两个实例之间创建故障转移组。 创建故障转移组后,该组在 Azure 门户中可见,Azure 门户或 Azure CLI 支持所有操作。 故障转移必须从辅助实例启动。
  • 如果所有数据库的初始种子设定未在 7 天内完成,则创建故障转移组会失败,并且所有成功复制的数据库都会从辅助实例中删除。
  • 目前不支持使用配置了托管实例链接的实例创建故障转移组。
  • 如果任一实例位于实例池中,则无法在实例之间创建故障转移组。
  • 在执行直接转换步骤之前,使用日志重播服务 (LRS) 迁移到 Azure SQL 托管实例的数据库无法添加到故障转移组。

使用故障转移组时,应注意下列限制:

  • 无法重命名故障转移组。 需要删除该组,并使用不同的名称重新创建它。
  • 故障转移组正好包含两个托管实例。 不支持将其他实例添加到故障转移组。
  • 完整备份会在以下时间自动进行:
    • 在初始种子设定之前,并且这可能会显著延迟初始种子设定进程的启动。
    • 在故障转移后,并且这可能会延迟或阻止后续的故障转移。
  • 故障转移组中的数据库不支持数据库重命名。 需要临时删除故障转移组,才能重命名数据库。
  • 系统数据库不会复制到故障转移组中的辅助实例。 因此,依赖于系统数据库中对象(例如服务器登录和代理作业)的方案要求在辅助实例上手动创建对象,并在对主实例进行更改后手动保持同步。 唯一的例外是 SQL 托管实例的服务主密钥 (SMK),它在创建故障转移组期间自动复制到辅助实例。 但是,在主实例上进行的任何后续 SMK 更改都不会复制到辅助实例。 若要了解详细信息,请参阅如何启用依赖于系统数据库中的对象的方案
  • 对于故障转移组内的实例,不支持将服务层级更改为下一代常规用途层级或从下一代常规用途层级更改服务层级。 必须先删除故障转移组再修改任一副本,然后在更改生效后重新创建故障转移组。
  • 故障转移组中的 SQL 托管实例必须具有相同的更新策略,但可以针对故障转移组中的实例更改更新策略

以编程方式管理故障转移组

也可以使用 Azure PowerShell、Azure CLI 和 REST API 以编程方式管理故障转移组。 下表描述了可用的命令集。 故障转移组包含一组用于管理的 Azure Resource Manager API,其中包括 Azure SQL 数据库 REST APIAzure PowerShell cmdlet。 这些 API 需要使用资源组,并支持 Azure 基于角色的访问控制 (Azure RBAC)。 有关如何实现访问角色的详细信息,请参阅 Azure 基于角色的访问控制 (Azure RBAC)

Cmdlet 说明
New-AzSqlDatabaseInstanceFailoverGroup 此命令会创建故障转移组,并将其同时注册到主实例和辅助实例
Set-AzSqlDatabaseInstanceFailoverGroup 修改故障转移组的配置
Get-AzSqlDatabaseInstanceFailoverGroup 检索故障转移组的配置
Switch-AzSqlDatabaseInstanceFailoverGroup 触发故障转移组到辅助实例的故障转移
Remove-AzSqlDatabaseInstanceFailoverGroup 删除故障转移组