迁移到托管式灾难恢复
本页面介绍了如何从 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 数据集的区域匹配。如需创建故障切换预留,请选择以下选项之一:
控制台
在 Google Cloud 控制台中,前往 BigQuery 页面。
在导航菜单中,点击容量管理,然后点击创建预留。
在预留名称字段中,输入预留的名称。
在位置列表中,选择相应位置。
在版本列表中,选择企业 Plus 版。
在预留大小上限选择器列表中,选择预留大小上限。
可选:在基准槽数字段中,输入预留的基准槽数。
可用自动扩缩槽的数量为预留大小上限值减去基准槽数值。例如,如果您创建了一个包含 100 个基准槽且预留大小上限为 400 的预留,则该预留包含 300 个自动扩缩槽。如需详细了解基准槽,请参阅将预留与基准槽和自动扩缩槽搭配使用。
在次要位置列表中,选择次要位置。
如需停用空闲槽共享并且仅使用指定的槽容量,请点击忽略空闲槽切换开关。
如需展开高级设置部分,请点击
展开箭头。可选:如需设置目标作业并发,请点击开启替换自动目标作业并发切换开关,然后为目标作业并发输入值。槽明细显示在费用估算表中。预留摘要显示在容量摘要表中。
点击保存。
新预留会显示在槽预留标签页中。
SQL
如需创建预留,请使用 CREATE RESERVATION
数据定义语言 (DDL) 语句。
在 Google Cloud 控制台中,前往 BigQuery 页面。
在查询编辑器中,输入以下语句:
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
:预留的次要位置。如果发生服务中断,则附加到此预留的任何数据集都会故障切换到此位置。
点击
运行。
如需详细了解如何运行查询,请参阅运行交互式查询。
将数据集附加到预留
创建故障切换预留后,将跨区域数据集附加到该预留。这会为所有附加的数据集启用故障切换。如需将数据集附加到预留,请选择以下选项之一:
控制台
在 Google Cloud 控制台中,前往 BigQuery 页面。
在导航菜单中,点击容量管理,然后点击槽预留标签页。
点击要向其附加数据集的预留。
点击灾难恢复标签页。
点击添加故障切换数据集。
输入要与预留关联的数据集的名称。
点击添加。
SQL
如需将数据集附加到预留,请使用 ALTER SCHEMA SET OPTIONS
DDL 语句。
在 Google Cloud 控制台中,前往 BigQuery 页面。
在查询编辑器中,输入以下语句:
ALTER SCHEMA `DATASET_NAME` SET OPTIONS ( failover_reservation = ADMIN_PROJECT_ID.RESERVATION_NAME);
替换以下内容:
DATASET_NAME
:数据集的名称。ADMIN_PROJECT_ID.RESERVATION_NAME
:您要将数据集关联到的预留的名称。
点击
运行。
如需详细了解如何运行查询,请参阅运行交互式查询。
验证配置
如需验证配置的状态,请查询 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 | +---------------------------------+---------------------------+