提升副本以实现区域性迁移或灾难恢复

本页面介绍如何使用和升级跨区域只读副本(也就是在不同于主实例所在区域的区域中创建的副本)以进行区域迁移或灾难恢复。

概览

提升跨区域副本有两个常见场景:

  • 区域迁移:执行计划迁移过程以将数据库迁移到不同区域。
  • 灾难恢复:在主要实例的区域不可用的情况下,通过故障切换技术将实例转移到其他区域。

这两种使用场景都需要设置跨区域复制功能,然后提升副本。它们之间的主要区别在于副本升级的是计划升级(针对区域迁移)还是非计划升级(由于主实例已经变得不可用,需要通过故障切换技术来转移到副本区域)。

区域迁移

您可以使用跨区域副本将数据库迁移到其他区域,并将停机时间缩至最短。总体思路是在其他区域中创建副本,等待副本完成同步,升级副本,然后将客户端定向到新升级的实例。

升级所涉及的步骤与升级区域副本相同;按照这些说明操作,确保新升级的实例包含提交到原始主实例的所有事务。升级副本并验证新升级的实例是否正常运行后,更新所有数据库客户端即可连接到新实例。

灾难恢复 (DR)

跨区域副本可以在灾难恢复过程中使用。如果主实例的区域长时间不可用,您可以升级跨区域副本以故障切换到其他区域。

如需详细了解灾难恢复,请参阅 Cloud SQL 中的灾难恢复简介

验证故障切换条件

由于复制是异步进行的,因此发生区域性服务中断并尝试故障切换时,提交到主实例的某些最新事务可能会丢失(不会复制到副本)。每当主实例变得不可用时,以下步骤都将展示:(1) 如何确定在跨区域故障切换过程中可能丢失的数据量(如果有),以及 (2)如何确保提升的副本尽可能反映最近的写入内容。

首先,检查监控信息中心中的 Lag Bytes 值。如果主实例所在区域发生区域性服务中断,系统会针对主实例报告 Lag Bytes

然后,按照复制状态页面中的说明,使用 PostgreSQL 客户端连接到副本实例(请参阅 mysql 客户端标签页)。请参阅有关 pg_catalog.pg_last_wal_receive_lsn()pg_catalog.pg_last_wal_replay_lsn() 指标的说明。验证副本已处理从主实例收到的所有事务。 这样可以确保副本在升级后会反映主实例不可用之前收到的所有事务。

提升读取副本

确定满足故障切换条件后,您可以将其中一个副本提升为可写的独立实例。请考虑以下场景:

  • 区域 A (us-central1) 具有一个高可用性主实例 (db-a-0)
  • 区域 B (us-west1) 具有 db-a-0 的高可用性跨区域副本 (db-b-1)
  • 区域 C (us-east1) 具有 db-a-0 的跨区域副本 (db-c-1)

您可以选择将区域 B 中的 db-b-1 提升为独立的可写实例。

如需了解详细说明,请参阅提升副本

确保机器类型合适

通过监控实例上的指标(例如 CPU 和内存用量),确保新提升的实例的机器类型适合其工作负载。如果新提升的实例小于其先前的主实例,我们建议您调整提升的实例的大小以与先前的主实例匹配,以便它可以处理相同的负载量。

为已提升的实例启用高可用性

对于灾难恢复配置,我们建议您将要提升的副本配置为高可用性副本。或者,将新提升的实例配置为高可用性。如果您选择不将读取副本配置为高可用性,则还可以在提升时将实例配置为高可用性。

提升时,系统会自动为读取副本配置备份。为高可用性配置读取副本的方式与为主实例配置的方式相同。如需了解详情,请参阅配置实例以实现高可用性

重新创建其他副本

将副本升级为主实例后,您需要重新创建上述主实例的任何其他副本。例如,请考虑上文中提到的配置,下面再重复一遍:

  • 区域 A (us-central1) 具有一个高可用性主实例 (db-a-0)
  • 区域 B (us-west1) 具有 db-a-0 的跨区域副本 (db-b-1)
  • 区域 C (us-east1) 具有 db-a-0 的跨区域副本 (db-c-1)

如果主实例 (db-a-0) 不再可用,您可以将区域 B 中的副本提升为主实例。如需再次向区域 A 和 C 中添加额外的副本,请删除旧实例(A 中之前的主实例和 C 中的副本),然后根据 B 中的新主实例创建新的只读副本

生成的配置将如下所示:

  • 区域 A (us-central1) 现在具有一个跨区域副本 (db-a-1)
  • 区域 B (us-west1) 现在具有主实例 (db-b-1)
  • 区域 C (us-east1) 现在具有一个新的跨区域副本 (db-c-2)