迁移到托管式灾难恢复

本页面介绍了如何从 BigQuery 跨区域复制迁移到 BigQuery 托管式灾难恢复。

概览

BigQuery 跨区域复制 (CRR) 和托管式灾难恢复 (DR) 都是旨在提高数据可用性和灾难恢复能力的功能。不过,它们处理区域级服务中断的方式有所不同。如果主区域不可用,CRR 不允许提升次要副本。相比之下,灾难恢复可提供更全面的保护,即使主区域不可用,也能故障切换到次要副本。使用 CRR 时,仅复制存储空间;而使用灾难恢复时,存储空间和计算容量都会复制。

下表介绍了 CRR 和灾难恢复的功能:

功能 CRR DR
初始复制流程 使用 CRR 初始复制数据集。 在将 CRR 数据集迁移到灾难恢复数据集之前,初始加载已通过 CRR 进行复制。
升级复制 使用标准复制。 使用增强型复制
升级过程 在数据集级进行升级。 在预留级进行升级(预留故障切换和数据集升级)。一个故障切换预留可以附加多个数据集。 灾难恢复不支持数据集级升级。
升级执行 通过针对每个数据集的界面或基于 SQL 的 DDL 命令。不支持 CLI、客户端库、API 或 Terraform。 通过针对每个 EPE 预留的界面或基于 SQL 的 DDL 命令。不支持 CLI、客户端库、API 或 Terraform。
故障切换模式 软故障切换。 硬故障切换。
版本要求 任何容量模型。 企业 Plus 版
限制 CRR 限制 包括 CRR 限制灾难恢复限制
写入权限 在任何容量模型下运行的作业都可以写入主要区域中的复制数据集。次要区域始终为只读。 只有在企业 Plus 版预留下运行的作业才能写入主要区域中的复制数据集。次要数据集和预留副本始终处于只读状态。
读取权限 在任何容量模型下运行的作业都可以从复制的数据集中读取。 在任何容量模型下运行的作业都可以从复制的数据集中读取。

迁移影响

以下部分概述了迁移到灾难恢复时发生的费用和功能变化。

费用影响

从 CRR 迁移到 DR 时,请考虑以下费用影响:

  • 灾难恢复仅支持企业 Plus 版的写入权限,这会产生更高的计算费用。您可以从任何容量模型读取数据,因此现有作业的读取费用不会发生变化。

  • 灾难恢复使用增强型复制,这会产生额外费用,具体取决于区域对。

  • CRR 和灾难恢复的存储价格相同。

如需详细了解价格,请参阅价格

功能影响

从 CRR 迁移到灾难恢复时,请考虑以下功能影响:

  • 灾难恢复仅支持在预留级进行故障切换。依赖于数据集级故障切换的任何现有作业都会失败。

  • 将数据集附加到灾难恢复预留后,只有企业 Plus 版查询才能写入该数据集。任何未将企业 Plus 版用于其计算容量的现有写入作业都会失败。

准备工作

在开始迁移之前,先熟悉跨区域复制和托管式灾难恢复中的概念。

如需迁移到灾难恢复,您必须满足以下前提条件:

  • 您有一个已启用 BigQuery 的有效 Google Cloud 项目。

  • 您已使用 CRR 创建并复制数据集。

  • 数据集具有您要用于灾难恢复的相同主要位置和次要位置。

  • 您拥有使用灾难恢复所需的权限。如需详细了解权限,请参阅准备工作

从 CRR 迁移到 DR

以下部分介绍了如何将数据集从 CRR 迁移到灾难恢复。本文假设您已为 CRR 配置数据集。

创建故障切换预留

如需启用灾难恢复,您必须在主要区域中创建故障切换预留。使用适当的主要区域和次要区域配置预留。主要区域和次要区域应与您打算迁移到灾难恢复的所有 CRR 数据集的区域匹配。如需创建故障切换预留,请选择以下选项之一:

控制台

  1. 在 Google Cloud 控制台中,前往 BigQuery 页面。

    转到 BigQuery

  2. 在导航菜单中,点击容量管理,然后点击创建预留

  3. 预留名称字段中,输入预留的名称。

  4. 位置列表中,选择相应位置。

  5. 版本列表中,选择企业 Plus 版。

  6. 预留大小上限选择器列表中,选择预留大小上限。

  7. 可选:在基准槽数字段中,输入预留的基准槽数。

    可用自动扩缩槽的数量为预留大小上限值减去基准槽数值。例如,如果您创建了一个包含 100 个基准槽且预留大小上限为 400 的预留,则该预留包含 300 个自动扩缩槽。如需详细了解基准槽,请参阅将预留与基准槽和自动扩缩槽搭配使用

  8. 次要位置列表中,选择次要位置。

  9. 如需停用空闲槽共享并且仅使用指定的槽容量,请点击忽略空闲槽切换开关。

  10. 如需展开高级设置部分,请点击 展开箭头。

  11. 可选:如需设置目标作业并发,请点击开启替换自动目标作业并发切换开关,然后为目标作业并发输入值。槽明细显示在费用估算表中。预留摘要显示在容量摘要表中。

  12. 点击保存

新预留会显示在槽预留标签页中。

SQL

如需创建预留,请使用 CREATE RESERVATION 数据定义语言 (DDL) 语句

  1. 在 Google Cloud 控制台中,前往 BigQuery 页面。

    转到 BigQuery

  2. 在查询编辑器中,输入以下语句:

    CREATE RESERVATION
      `ADMIN_PROJECT_ID.region-LOCATION.RESERVATION_NAME`
    OPTIONS (
      slot_capacity = NUMBER_OF_BASELINE_SLOTS,
      edition = ENTERPRISE_PLUS,
      secondary_location = SECONDARY_LOCATION);

    替换以下内容:

    • ADMIN_PROJECT_ID:拥有预留资源的管理项目的项目 ID。
    • LOCATION:预留的位置。如果您选择 BigQuery Omni 位置,则您的版本选项仅限于企业版。
    • RESERVATION_NAME:预留的名称。

      该名称必须以小写字母或数字开头和结尾,并且只能包含小写字母、数字和短划线。

    • NUMBER_OF_BASELINE_SLOTS:要分配给预留的基准槽数。您不能在同一预留中设置 slot_capacity 选项和 edition 选项。
    • SECONDARY_LOCATION:预留的次要位置。如果发生服务中断,则附加到此预留的任何数据集都会故障切换到此位置。

  3. 点击 运行

如需详细了解如何运行查询,请参阅运行交互式查询

将数据集附加到预留

创建故障切换预留后,将跨区域数据集附加到该预留。这会为所有附加的数据集启用故障切换。如需将数据集附加到预留,请选择以下选项之一:

控制台

  1. 在 Google Cloud 控制台中,前往 BigQuery 页面。

    转到 BigQuery

  2. 在导航菜单中,点击容量管理,然后点击槽预留标签页。

  3. 点击要向其附加数据集的预留。

  4. 点击灾难恢复标签页。

  5. 点击添加故障切换数据集

  6. 输入要与预留关联的数据集的名称。

  7. 点击添加

SQL

如需将数据集附加到预留,请使用 ALTER SCHEMA SET OPTIONS DDL 语句

  1. 在 Google Cloud 控制台中,前往 BigQuery 页面。

    转到 BigQuery

  2. 在查询编辑器中,输入以下语句:

    ALTER SCHEMA
      `DATASET_NAME`
    SET OPTIONS (
      failover_reservation = ADMIN_PROJECT_ID.RESERVATION_NAME);

    替换以下内容:

    • DATASET_NAME:数据集的名称。

    • ADMIN_PROJECT_ID.RESERVATION_NAME:您要将数据集关联到的预留的名称。

  3. 点击 运行

如需详细了解如何运行查询,请参阅运行交互式查询

验证配置

如需验证配置的状态,请查询 INFORMATION_SCHEMA.SCHEMATA_REPLICAS 视图

PROJECT_ID.`region-REGION`.INFORMATION_SCHEMA.SCHEMATA_REPLICAS[_BY_PROJECT]

验证数据集是否已附加到正确区域中的正确预留。

请替换以下内容:
  • 可选:PROJECT_ID:您的 Google Cloud 项目的 ID。如果未指定,则使用默认项目。
  • REGION:任何数据集区域名称。 例如 `region-us`

示例

以下示例将通过使用 GoogleSQL 的实际示例,引导您完成从 CRR 迁移到灾难恢复的步骤。在此示例中,假设存在以下情况:

  • 您正在名为 myproject 的项目中工作。

  • 您已创建名为 mydataset 的数据集,并已为其配置 CRR。

  • mydataset 的主要区域为 us-central1,次要区域为 us-west1

如需开始将数据集迁移到灾难恢复,请先使用企业 Plus 版创建预留。在此示例中,预留的名称为 myreservation

CREATE RESERVATION `myproject.region-us-central1.myreservation`
OPTIONS (
  slot_capacity = 0,
  edition = ENTERPRISE_PLUS,
  autoscale_max_slots = 50,
  secondary_location = 'us-west-1');

创建预留后,您可以将数据集附加到该预留。以下示例将数据集附加到预留:

ALTER SCHEMA
  `myproject.mydataset`
SET OPTIONS (
  failover_reservation = 'myproject.myreservation');

然后,验证数据集是否已成功附加。

SELECT
  failover_reservation_project_id,failover_reservation_name,
FROM
 `myproject`.`region-us-west1`.INFORMATION_SCHEMA.SCHEMATA_REPLICAS
WHERE
 schema_name='mydataset';

此查询的结果应如下所示:

+---------------------------------+---------------------------+
| failover_reservation_project_id | failover_reservation_name |
+---------------------------------+---------------------------+
| myproject                       | myreservation             |
| myproject                       | myreservation             |
+---------------------------------+---------------------------+

后续步骤