使用高级灾难恢复 (DR)

本页面介绍了如何使用高级灾难恢复 (DR)。高级灾难恢复提供以下两个主要功能:

  • 副本故障切换,您可以利用此功能在发生区域性故障时立即将主实例故障切换到灾难恢复副本。 对于 Cloud SQL for SQL Server,灾难恢复副本是可级联副本。
  • 切换,您可以利用此功能反转主实例和灾难恢复副本的角色,而不会丢失任何数据。您可以在副本故障切换后使用切换将部署恢复到其原始部署状态,也可以使用切换来测试灾难恢复。

只有 Cloud SQL 企业 Plus 版实例支持高级灾难恢复。

准备工作

如果您打算使用 Google Cloud SDK,则必须使用 470.0.0 版或更高版本以及 gcloud beta 命令。如需查看 Google Cloud SDK 的版本,请运行 gcloud --version。如需更新 Google Cloud SDK,请运行 gcloud components update

如需安装 Google Cloud SDK,请参阅安装 gcloud CLI

创建灾难恢复副本

在使用高级灾难恢复之前,请在与主实例不同的区域中创建主实例的可级联副本

执行切换

创建灾难恢复副本后,您可以执行切换操作。但最佳做法是避免在以下情况下执行切换操作:

  • 主实例正在使用中。
  • 正在进行管理操作,例如自动备份或者启用或停用高可用性 (HA)。

为避免超时,请考虑在事务量较低时执行切换。

切换完成后,操作会在新的主实例升级后立即备份新的主实例(以前的灾难恢复副本)。此备份完成后,系统将在新的主实例上完全启用时间点恢复 (PITR)。此备份可能需要 5 到 15 分钟才能完成,具体取决于磁盘大小。只有在此备份完成后,PITR 保护才会开始。如需详细了解将 PITR 与高级灾难恢复搭配使用的注意事项,请参阅将 PITR 与高级灾难恢复搭配使用

切换操作完成后,您会发现复制方向反转。

准备工作

在执行切换操作之前,请执行以下操作:

  • 创建灾难恢复副本(如果您尚未创建)。
  • 验证主实例和灾难恢复副本是否处于在线状态。
  • 按需备份主实例。此备份可作为一种预防措施,以防您需要从任何意外故障中恢复。

执行切换操作

控制台

如需执行切换操作,请执行以下操作:

  1. 在 Google Cloud 控制台中,转到 Cloud SQL 实例页面。

    转到“Cloud SQL 实例”

  2. 点击灾难恢复副本实例。系统会显示灾难恢复副本的概览页面。
  3. 点击切换按钮。
  4. Perform switchover between the primary and DR replica(在主实例和灾难恢复副本之间执行切换)页面上的实例 ID 字段中,输入主实例的名称。
  5. 点击切换

gcloud

如需执行切换操作,请运行以下命令:

gcloud beta sql instances switchover REPLICA_NAME

执行以下变量替换操作:

  • REPLICA_NAME:希望供主实例用来切换角色的指定灾难恢复副本的名称。

REST v1

在使用任何请求数据之前,请先进行以下替换:

  • PROJECT_ID:主实例和灾难恢复副本的 Google Cloud 项目的 ID 或项目编号。
  • REPLICA_NAME:灾难恢复副本的名称。

HTTP 方法和网址:

POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/REPLICA_NAME/switchover

如需发送您的请求,请展开以下选项之一:

您应该收到类似以下内容的 JSON 响应:

REST v1beta4

在使用任何请求数据之前,请先进行以下替换:

  • PROJECT_ID:主实例和灾难恢复副本的 Google Cloud 项目的 ID 或项目编号。
  • REPLICA_NAME:灾难恢复副本的名称。

HTTP 方法和网址:

POST https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/REPLICA_NAME/switchover

如需发送您的请求,请展开以下选项之一:

您应该收到类似以下内容的 JSON 响应:

通过调用副本故障切换执行灾难恢复

如果发生区域性故障或灾难,您可以通过对指定的灾难恢复副本调用副本故障切换操作来执行灾难恢复。如需执行副本故障切换,请提升灾难恢复副本。与切换相比,提升灾难恢复副本的过程很快。

由于灾难恢复副本会立即充当主实例,因此由于复制延迟,副本可能不会拥有旧主实例中的所有数据。因此,副本故障切换可能会导致数据丢失。

在升级过程中,副本故障切换会在灾难恢复副本成为新的主实例后立即备份新的主实例(以前的灾难恢复副本)。此备份完成后,系统将在新的主实例上完全启用时间点恢复 (PITR)。此备份可能需要 5 到 15 分钟才能完成,具体取决于新(和旧)主实例的磁盘大小。在此备份期间,PITR 不可用。

当旧的主实例恢复在线状态后,副本故障切换过程将执行备份。执行此备份后,系统会将旧的主实例重新创建为新主实例的读取副本。在此过程中,旧主实例会丢失任何尚未保存到 Cloud Storage 的旧 PITR 事务日志。因此,副本故障切换无法保证用于旧主实例上的 PITR 的所有事务日志都会保留。

如需详细了解将 PITR 与高级灾难恢复搭配使用的注意事项,请参阅将 PITR 与高级灾难恢复搭配使用

准备工作

在执行副本故障切换之前,请执行以下操作:

  • 创建灾难恢复副本(如果您尚未创建)。
  • 确保灾难恢复副本处于在线状态且运行状况良好。

执行副本故障切换操作

控制台

如需执行副本故障切换操作,请执行以下操作:

  1. 在 Google Cloud 控制台中,转到 Cloud SQL 实例页面。

    转到“Cloud SQL 实例”

  2. 点击灾难恢复副本实例。系统会显示灾难恢复副本的概览页面。
  3. 点击副本故障切换按钮。
  4. Perform replica failover between the primary and DR replica(在主实例和灾难恢复副本之间执行副本故障切换)页面上的实例 ID 字段中,输入主实例的名称以确认您要继续执行该操作。
  5. 如需启动副本故障切换,请点击副本故障切换

gcloud

如需调用副本故障切换以切换到灾难恢复副本,请使用以下命令:

gcloud sql instances promote-replica \
   REPLICA_NAME --failover

执行以下变量替换操作:

  • REPLICA_NAME:灾难恢复副本的名称

REST v1

在使用任何请求数据之前,请先进行以下替换:

  • PROJECT_ID:主实例和灾难恢复副本的 Google Cloud 项目的 ID 或项目编号。
  • REPLICA_NAME:灾难恢复副本的名称。
  • ENABLE_REPLICA_FAILOVER:设置为 true 以使用副本故障切换。如果设置为 false,则 API 会使用常规 promoteReplica 方法,而不使用副本故障切换。

HTTP 方法和网址:

POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/REPLICA_NAME/promoteReplica?failover=ENABLE_REPLICA_FAILOVER

如需发送您的请求,请展开以下选项之一:

您应该收到类似以下内容的 JSON 响应:

REST v1beta4

在使用任何请求数据之前,请先进行以下替换:

  • PROJECT_ID:主实例和灾难恢复副本的 Google Cloud 项目的 ID 或项目编号。
  • REPLICA_NAME:灾难恢复副本的名称。
  • ENABLE_REPLICA_FAILOVER:设置为 true 以使用副本故障切换。如果设置为 false,则 API 会使用常规 promoteReplica 方法,而不使用副本故障切换。

HTTP 方法和网址:

POST https://sqladmin.googleapis.com/v1beta4/projects/PROJECT_ID/instances/REPLICA_NAME/promoteReplica?failover=ENABLE_REPLICA_FAILOVER

如需发送您的请求,请展开以下选项之一:

您应该收到类似以下内容的 JSON 响应:

检查副本故障切换的状态

副本故障切换分两个阶段进行。第一阶段是升级灾难恢复副本。第二个阶段是将旧的主实例重新创建为读取副本。

如需检查副本故障切换的状态,请检查每个阶段的状态。

  1. 检查第一个阶段的状态。

    控制台

    如需检查灾难恢复副本是否已提升为独立实例,请执行以下操作:

    1. 在 Google Cloud 控制台中,转到 Cloud SQL 实例页面。

      转到“Cloud SQL 实例”

    2. 找到您已升级的灾难恢复副本的名称。
    3. 验证 SQL Server VERSION 是否显示在新的主实例的类型列中。

    gcloud

    您可以通过运行以下命令来检查状态:

    gcloud sql instances describe DR_REPLICA_NAME

    执行以下变量替换操作:

    • DR_REPLICA_NAME:升级后的灾难恢复副本的名称

    在输出中,检查以下字段是否出现以及副本是否已成为独立的 Cloud SQL 主实例:

    instanceType: CLOUD_SQL_INSTANCE
    

  2. 如需验证第二个阶段是否已完成,请检查实例上的操作日志中是否出现消息 RECONFIGURE_OLD_PRIMARY

    此消息是否显示取决于旧的主实例何时恢复在线状态,如果发生灾难,可能需要几分钟或几天的时间。

    如需详细了解如何检查实例的操作日志,请参阅查看实例日志

将 PITR 与高级灾难恢复搭配使用

使用切换和副本故障切换时,灾难恢复副本升级为主实例后,会发生以下更改以支持备份和 PITR:

  • 备份配置(包括任何自动备份安排)会从旧的主实例复制到新的主实例。
  • 如果停用,则系统会通过启用 binlog 配置标志来启用 PITR。
  • 系统会获取新的备份来支持新的主实例上的 PITR。
  • 事务日志保留政策会从旧的主实例复制到新的主实例。

对于备份配置和事务日志保留政策,我们都建议您验证从旧的主实例继承的设置在新的主实例上是正确的。

开始 PITR 保护

在切换操作结束时,Cloud SQL 会安排自动备份并执行新的主实例的首次备份。如果您希望尽快开始 PITR 保护,我们建议您验证第一次备份是否成功。只有在第一次自动备份成功完成后,新升级的主实例才会获得 PITR 保护

如需详细了解如何查看实例可用的备份,请参阅查看备份列表

切换和副本故障切换期间实例的 PITR 保护

当实例参与切换或副本故障切换操作时,该实例会充当一段时间的读取副本。在实例充当读取副本的时间段内,支持 PITR 和恢复备份。如果您希望执行 PITR 以恢复到切换事件发生之前(即实例是主实例时)的某个时间点,可以发出克隆命令,以选定该实例还是主实例时的某个目标时间。您无法请求执行 PITR 以恢复到该实例充当只读副本时的某个时间。

如果由于主实例在相关时间点是只读副本而无法执行 PITR,则必须尝试对在相关时间点充当主实例的实例执行 PITR 请求。

同样,您可以恢复在副本充当主实例时所做的备份。当实例为副本时,恢复命令必须以其他独立实例为目标,而不能在副本自身上执行恢复操作。

如需确定要用于 PITR 请求的实例,请使用操作列表。实例的操作列表可以帮助确定实例何时进行了切换或副本故障切换操作。

副本故障切换期间的脑裂

当使用副本故障切换升级副本时,如果主实例继续接受写入操作,则可能会发生脑裂。副本升级后,当旧的主实例再次可用时,系统会将其重新构建为升级实例的副本,并进行最终备份。此备份可用于恢复任何未写入升级副本的脑裂数据。

删除副本上的备份和事务日志

如果启用了 PITR 和备份的主实例成为读取副本,则在其充当副本期间,系统会保留并应用自其作为主实例时起的最近一次备份和 PITR 保留政策。即使新的主实例没有进行备份,系统也会根据上次配置的政策在读取副本上删除用于 PITR 的旧备份和事务日志。

例如,如果实例配置为具有每日自动备份,并保留 7 个包含 7 天 PITR 日志的备份,则当此实例成为读取副本时,任何超过 7 天的备份都将被删除,删除频率为每天一次。

如果您需要更快地删除备份,可以手动移除备份。如需了解详情,请参阅删除备份

限制

  • 使用 Private Service Connect 的 Cloud SQL 实例不支持高级灾难恢复。
  • 如果主实例将用于时间点恢复 (PITR) 的事务日志存储在磁盘上,则您无法将 Cloud SQL 企业 Plus 版读取副本实例指定为灾难恢复副本。如需检查实例将用于 PITR 的日志存储在何处,请参阅检查用于 PITR 的事务日志的存储位置
  • 您不能将外部副本指定为灾难恢复副本。

问题排查

问题 问题排查
切换操作失败。
    确保实例满足所有规定的灾难恢复副本(可级联副本)要求
  • 检查数据库上的事务量。 如果事务量较高,则操作可能会超时。请考虑在事务负载较低时重试操作。
切换操作失败,主实例卡在只读模式下。 执行数据库重启,使主实例恢复写入模式。
切换操作已完成,但 Google Cloud 控制台未显示实例的新反转角色。 刷新浏览器以显示更新后的拓扑。
副本故障切换操作失败。
  • 确保您已为主实例创建了灾难恢复副本,并且灾难恢复副本处于在线状态。
  • 如果故障切换到灾难恢复副本的操作失败,则改为升级到常规(非灾难恢复)读取副本。

后续步骤