教程:配置活动异地复制和故障转移(Azure SQL 数据库)

适用于:Azure SQL 数据库

本文介绍如何使用 Azure 门户、PowerShell 或 Azure CLI 为 Azure SQL 数据库配置活动异地复制以及启动故障转移。

主动异地复制是基于每个数据库进行配置的。 若要故障转移一组数据库,或者如果应用程序需要稳定的连接终结点,请考虑改用故障转移组。

先决条件

添加辅助数据库

以下步骤将创建异地复制伙伴关系中的新辅助数据库。

只有订阅所有者或共有者才能添加辅助数据库。

辅助数据库具有与主数据库相同的名称,并默认使用相同的服务层级和计算大小。 辅助数据库可以是单一数据库,也可以是共用数据库。 有关详细信息,请参阅基于 DTU 的购买模型概述和基于 vCore 的购买模型。 创建辅助数据库并设定种子后,会开始将数据从主数据库复制到新的辅助数据库。

如果次要副本仅用于灾难恢复 (DR),并且没有任何读取或写入工作负荷,则可以通过在配置新的活动异地复制关系时指定备用数据库来节省许可成本。 有关详细信息,请参阅免许可证备用副本。

注意

如果合作伙伴数据库已存在(例如,在终止之前的异地复制关系的情况下),命令会失败。

  1. 在 Azure 门户中,浏览到需要设置以便进行异地复制的数据库。

  2. 在 SQL 数据库页上,选择数据库,滚动到数据管理,选择副本,然后选择创建副本。

    屏幕截图显示“配置异地复制”选项。

  3. 选择异地辅助数据库的“订阅”和“资源组”。

    Azure 门户中订阅和资源组的屏幕截图。

  4. 为辅助数据库选择或创建服务器,并根据需要配置计算 + 存储选项。 你可以为辅助服务器选择任何区域,但我们建议使用配对区域。

    可以选择性地将辅助数据库添加到弹性池。 若要在池中创建辅助数据库,请选择想要使用 SQL 弹性池?旁边的是 ,并在目标服务器上选择一个池。 目标服务器上必须已存在一个存储池。 此工作流不会创建池。

  5. 选择“查看 + 创建”查看信息,然后选择“创建”。

  6. 此时会创建辅助数据库,部署过程开始。

    屏幕截图显示辅助数据库的部署状态。

  7. 完成部署时,辅助数据库会显示其状态。

    屏幕截图显示部署后的辅助数据库状态。

  8. 返回主数据库页,然后选择“副本”。 你的辅助数据库显示在异地副本下。

    屏幕截图显示 SQL 数据库的主副本和异地副本。

启动故障转移

辅助数据库可以切换为主数据库。

  1. 在 Azure 门户中,浏览到异地复制合作关系中的主数据库。

  2. 滚动到数据管理,然后选择副本。

  3. 在 异地副本 列表中,选择要成为新主数据库的数据库,选择省略号按钮,然后选择 强制故障转移。

    显示从下拉列表中选择“强制故障切换”的屏幕截图。

  4. 选择是以开始故障转移。

该命令会立即将辅助数据库切换到主数据库角色。 此过程通常会在 30 秒或更短的时间内完成。

角色切换时,两个数据库都不可用,时间最长可达 25 秒。 如果主数据库具有多个辅助数据库,则该命令自动重新配置其他辅助数据库以连接到新的主数据库。 在正常情况下,完成整个操作所需的时间应该少于一分钟。

删除辅助数据库

此操作会永久停止到辅助数据库的复制,并将辅助数据库的角色更改为常规的读写数据库。 如果与辅助数据库的连接断开,命令会成功,但辅助数据库必须等到连接恢复后才会变为可读写。

  1. 在 Azure 门户中,浏览到异地复制合作关系中的主数据库。
  2. 选择副本。
  3. 在异地副本列表中,选择要从异地复制伙伴关系中删除的数据库,选择省略号,然后选择停止复制。
  4. 确认窗口随即打开。 选择是,将数据库从异地复制合作关系中移除。 (将其设置为一个不属于任何复制关系的读写数据库。)

跨订阅异地复制

  • 要在与主副本所在订阅不同、但位于同一 Microsoft Entra 租户中的订阅内创建异地辅助副本,可以使用 Azure 门户或本节中的步骤。
  • 若要在不同 Microsoft Entra 租户内主数据库订阅的不同订阅中创建异地辅助副本,必须使用本部分所述的 SQL 身份验证和 T-SQL。 当逻辑服务器位于不同的 Azure 租户中时,不支持针对跨订阅异地复制的适用于 Azure SQL 的 Microsoft Entra 身份验证
  1. 将执行以下示例中的 T-SQL 命令的客户端计算机的 IP 地址添加到主服务器和辅助服务器的服务器防火墙。 可以通过在从同一客户端计算机连接到主服务器时执行以下查询来确认 IP 地址。

    SELECT client_net_address
    FROM sys.dm_exec_connections
    WHERE session_id = @@SPID;
    

    有关详细信息,请参阅 Azure SQL 数据库和 Azure Synapse IP 防火墙规则。

  2. 在 主 服务器上的 master 数据库中,创建一个专用于配置主动异地复制的 SQL 身份验证登录名。 将 <password> 替换为高强度密码。

    CREATE LOGIN geodrsetup
        WITH PASSWORD = '<password>';
    
  3. 在同一数据库中,为该登录名创建一个用户,并将其添加到 dbmanager 角色:

    CREATE USER geodrsetup FOR LOGIN geodrsetup;
    
    ALTER ROLE dbmanager ADD MEMBER geodrsetup;
    
  4. 记下新登录名的 SID 值。 使用以下查询获取 SID 值。

    SELECT sid
    FROM sys.sql_logins
    WHERE name = 'geodrsetup';
    
  5. 连接到主数据库(不是 master 数据库),并为同一登录名创建一个用户。

    CREATE USER geodrsetup FOR LOGIN geodrsetup;
    
  6. 在同一数据库中,将用户添加到 db_owner 角色。

    ALTER ROLE db_owner ADD MEMBER geodrsetup;
    
  7. 在 辅助 服务器上的 master 数据库中,使用与主服务器上相同的名称、密码和 SID 创建相同的登录名。 将下面的示例命令中的十六进制 SID 值替换为在步骤 4 中获得的 SID。

    CREATE LOGIN geodrsetup
        WITH PASSWORD = '<password>', SID = 0x010600000000006400000000000000001C98F52B95D9C84BBBA8578FACE37C3E;
    
  8. 在同一数据库中,为该登录名创建一个用户,并将其添加到 dbmanager 角色。

    CREATE USER geodrsetup FOR LOGIN geodrsetup;
    
    ALTER ROLE dbmanager ADD MEMBER geodrsetup;
    
  9. 使用新的 master 登录名连接到主服务器上的 geodrsetup 数据库,并在辅助服务器上启动异地辅助数据库创建。 根据需要调整数据库名称和辅助服务器名称。 执行该命令后,可以通过查询 主 数据库中的 sys.dm_geo_replication_link_status 视图,以及 主 服务器上的 master 数据库中的 sys.dm_operation_status 视图,来监控异地辅助副本的创建。 创建异地辅助数据库所需的时间取决于主数据库的大小。

    alter database [dbrep] add secondary on server [servername];
    
  10. 成功创建异地辅助数据库后,可以删除此过程创建的用户、登录名和防火墙规则。