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

applies to:Azure SQL 托管实例

本文介绍如何使用 Azure 门户 和 Azure PowerShell 为 failover 组 配置 Azure SQL 托管实例。

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

先决条件

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

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

配置要求

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

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

创建辅助实例

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

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

创建虚拟网络

若要在 Azure 门户中为辅助实例创建虚拟网络,请执行以下步骤:

  1. 检查主实例的地址空间。 转到 Azure 门户中主实例的虚拟网络资源,在 Settings 下,选择 Address space。 检查地址范围下的范围:

    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 门户中的 Create Azure SQL 托管实例。

  2. 在 Create Azure SQL 托管实例1 的 Basics 选项卡上:

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

    Screenshot 突出显示您在 Azure 门户中为辅助实例创建并使用的网络。

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

    在 Azure 门户的附加设置页面上的截图中, 将主托管实例指定为故障转移的辅助实例。

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

在实例之间建立连接

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

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

重要

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

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

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

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

  1. 在 Azure 门户中,转到主托管实例的 Virtual 网络资源。

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

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

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

    设置 说明
    远程虚拟网络摘要
    对等连接名称 对等互连的名称在虚拟网络中必须是唯一的。 本文使用的是 Fog-peering。
    虚拟网络部署模型 选择“资源管理器”。
    我知道我的资源标识 可以不选中此框,除非知道资源 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 添加入站安全规则的Screenshot。

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

    设置 建议的值 说明
    来源 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 规则按优先级顺序进行处理:数字越低,优先级越高。
    名称 允许_geodr_入站 规则的名称。
    说明 可选 可以选择提供说明,或将此字段留空。

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

  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 portal 中添加故障转移组页面的截图。

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

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

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

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

测试故障转移

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

在 Azure 门户中测试您的故障转移组的故障转移。

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

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

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

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

    在 Azure 门户中执行故障转移组故障转移的截图。

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

    重要

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

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

在活动日志中跟踪故障转移

可以使用 Azure 门户中的 Activity 日志来跟踪故障转移操作的状态。 为此,请执行以下步骤:

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

  2. 选择 “活动日志 ”以打开 “活动日志 ”窗格。

  3. 清除 资源的任何筛选器。

  4. 搜索名称为 Failover Azure SQL 数据库 failover group 的操作:

    在 Azure 门户中,你的 SQL 托管实例的活动日志截图,其中故障转移操作被突出显示。

修改现有故障转移组

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

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

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

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

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

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

定位侦听器终结点

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

重要

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

若要在 Azure 门户中找到侦听器终结点,请转到 SQL 托管实例,然后在 Data management 下,选择 Failover 组。

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

  • 读/写侦听器终结点,其格式为fog-name.dns-zone.database.chinacloudapi.cn,会将流量路由到主实例。
  • “只读”侦听器终结点,格式为,将流量路由至辅助实例。

在 Azure 门户中查找故障转移组连接字符串的截图。

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

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

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

重要

可以使用 Azure PowerShell 或 REST API(而不是 Azure 门户或 Azure CLI)支持在不同资源组或订阅中的两个实例之间创建故障转移组。

防止关键数据丢失

由于广域网的延迟时间较长,异地复制使用了异步复制机制。 如果主数据库发生故障,异步复制会导致数据丢失不可避免。 为了防止这些关键事务数据丢失,应用程序开发人员可以在提交事务后立即调用 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版本后,将无法再将其更改回较低的版本更新策略。

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

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

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

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

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

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

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

缩放实例

主实例和辅助实例的配置应相同。 这包括计算大小、存储大小和服务层。 如果需要更改故障转移组的配置,可以通过相应地将每个实例缩放到同一配置来实现。

将辅助实例降级到低于主实例的服务层级或计算大小可能会导致故障转移后性能下降。

若要避免服务层级较低或资源不足的异地辅助数据库过载或不得不在升级或降级过程中重新分配的问题,请考虑以下事项:

  • 可以在同一服务层级内将主实例和辅助实例纵向扩展或缩减到不同的计算大小,或纵向扩展或缩减到不同的服务层级。
  • 在同一服务层级内进行纵向扩展时,请先对地理副本数据库进行纵向扩展,然后再对主数据库进行纵向扩展。
  • 在同一服务层级内纵向缩减时,按相反顺序操作:先纵向缩减主数据库,再纵向缩减辅助数据库。
  • 更改实例的配置时,请遵循相同的顺序。 如果要扩展资源,请先在次级系统上进行扩展。 如果要缩减规模,请先在主要部件上执行。 这适用于以下实例配置更改:
    • 升级或降级服务层。
    • 更改 vCore 数。
    • 调整存储容量。

尝试同时缩放服务层、vCore 和存储时(例如,在纵向缩减存储时纵向扩展 vCore 和服务层),请不要同时更改这三个。 请改用以下方法之一:

  • 选项 1:按照前面所述的升级/降级顺序,首先缩放服务层(保持存储和 vCore 相同)。 然后分别缩放存储和虚拟核心。
  • 选项 2:先缩放存储(保持服务层和 vCore 相同),遵循前面所述的升级/降级顺序。 然后分别调整服务层和 vCores。

此双步方法可防止资源较少的辅助副本过载,这可能会导致在缩放过程中重新分配。

权限

故障转移组的权限通过 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 主托管实例和辅助托管实例的资源组

限制

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

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

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

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

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

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

Cmdlet (命令行工具) 说明
New-AzSqlDatabaseInstanceFailoverGroup 此命令会创建故障转移组,并将其同时注册到主实例和辅助实例
Set-AzSqlDatabaseInstanceFailoverGroup 修改故障转移组的配置
Get-AzSqlDatabaseInstanceFailoverGroup (用于获取 SQL 数据库实例故障转移组的命令) 检索故障转移组的配置
Switch-AzSqlDatabaseInstanceFailoverGroup 触发故障转移组到辅助实例的故障转移
Remove-AzSqlDatabaseInstanceFailoverGroup 删除故障转移组