代管災難復原

本文件將概略說明 BigQuery 管理災難復原功能,以及如何針對資料和工作負載導入這項功能。

總覽

在區域完全中斷服務的情況下,BigQuery 支援災難復原情境。BigQuery 災難復原功能會利用跨區域資料集複製功能管理儲存空間容錯移轉作業。在次要區域建立資料集複本後,您可以控制運算和儲存空間的容錯移轉行為,以便在服務中斷期間維持業務運作。容錯移轉後,您可以在升級區域中存取運算容量 (插槽) 和複本資料集。災難復原功能僅支援 Enterprise Plus 版

當啟動容錯移轉時,代管災難復原工具會執行硬容錯移轉。在硬體容錯移轉期間,即使先前的區域處於關閉狀態,次要區域中的預訂和資料集備用資源也會立即升級為主要備用資源,且不會等待未複製資料的複製作業。因此,在硬體容錯移轉期間可能會發生資料遺失。在備援資料庫的 replication_time 值變更之前,如果有任何工作在來源區域中提交資料,可能需要在備援資料庫發生故障後,在目的地區域中重新執行。

如要啟用災難復原功能,您必須在主要區域中建立 Enterprise Plus 版本的預留空間,這是資料集在備援前所在的區域。Enterprise Plus 預留作業系統會包含配對區域的待命運算資源。接著,您可以將資料集附加至此預留項目,為該資料集啟用容錯功能。只有在資料集已填補,且主要和次要位置與預留項目的配對位置相同時,才能將資料集附加至預留項目。資料集連結至備援預留空間後,只有 Enterprise Plus 預留空間可以寫入這些資料集,您無法在資料集上執行跨區域複製升級作業。您可以使用任何容量模式,從附加至備援預留空間的資料集讀取資料。如要進一步瞭解預留項目,請參閱「工作負載管理簡介」。

在容錯後,主要區域的運算容量會立即在次要區域中提供。無論是否使用預留量基準,這項可用性都會套用至預留量基準。

您必須主動選擇要進行測試或因應實際災難的備援程序。在 10 分鐘的時間內,您不應發生多次失敗。在資料複製情境中,補充資料是指將資料集的歷來資料填入資料集副本的程序,這些資料必須是在副本建立或啟用前存在的。資料集必須完成回填作業,您才能將資料集切換為備援。

下圖顯示受管理災難復原服務的架構:

代管的災難復原架構。

限制

以下限制適用於 BigQuery 災難復原作業:

  • BigQuery 災難復原功能適用的限制與跨區域資料集複製功能相同。

  • 容錯移轉後的自動調度資源功能取決於次要區域的運算容量可用性。在次要區域中,只有預訂基準值可用。

  • INFORMATION_SCHEMA.RESERVATIONS 檢視畫面沒有備援詳細資料。

  • 如果您有相同管理專案的多個備援保留空間,但附加的資料集使用不同的次要位置,請勿使用備援保留空間,並將資料集附加至不同的備援保留空間。

  • 如果您想將現有預留項目轉換為容錯預留項目,現有預留項目的預留項目指派不得超過 1,000 個。

  • 備援預留空間最多只能連結 1,000 個資料集。

位置

建立備援保留空間時,可使用下列區域:

位置代碼 地區名稱 地區說明
ASIA
ASIA-EAST1 台灣
ASIA-SOUTHEAST1 新加坡
AU
AUSTRALIA-SOUTHEAST1 雪梨
AUSTRALIA-SOUTHEAST2 墨爾本
CA
NORTHAMERICA-NORTHEAST1 蒙特婁
NORTHAMERICA-NORTHEAST2 多倫多
EU
EU 歐盟多個區域
EUROPE-CENTRAL2 華沙
EUROPE-NORTH1 芬蘭
EUROPE-SOUTHWEST1 馬德里
EUROPE-WEST1 比利時
EUROPE-WEST3 法蘭克福
EUROPE-WEST4 荷蘭
EUROPE-WEST8 米蘭
EUROPE-WEST9 巴黎
IN
ASIA-SOUTH1 孟買
ASIA-SOUTH2 德里
US
US 美國 (多個區域)
US-CENTRAL1 愛荷華州
US-EAST1 南卡羅來納州
US-EAST4 北維吉尼亞州
US-EAST5 哥倫布
US-SOUTH1 達拉斯
US-WEST1 奧勒岡州
US-WEST2 洛杉磯
US-WEST3 鹽湖城
US-WEST4 拉斯維加斯

區域組合必須選取 ASIAAUCAEUINUS。舉例來說,US 區域無法與 EU 區域配對。

如果您的 BigQuery 資料集位於多地區位置,則無法使用下列區域組合。這項限制可確保備援預留空間和資料在複製後位於不同地理位置。如要進一步瞭解多地區包含的地區,請參閱多地區

  • us-central1 - us 多地區
  • us-west1 - us 多地區
  • eu-west1 - eu 多地區
  • eu-west4 - eu 多地區

事前準備

  1. 請確認您具備更新預訂的 bigquery.reservations.update 身分與存取權管理 (IAM) 權限。
  2. 請確認您已設定現有資料集進行複製。詳情請參閱「複製資料集」。

強化型複製功能

災難復原功能會使用強化型複製功能,加快區域間的資料複製作業,降低資料遺失風險,盡可能減少服務停機時間,並協助在區域停機後維持服務不中斷

強化型複製功能不適用於初始回填作業。初始回填作業完成後,只要頻寬配額未超出,且沒有使用者錯誤,強化型複製功能就會在 15 分鐘內將資料集複寫至單一備援區域組合,並附上次要複本。

復原時間目標

復原時間目標 (RTO) 是指在災難發生時,BigQuery 允許的復原時間目標。如要進一步瞭解 RTO,請參閱「DR 規劃基本概念」。啟動容錯後,託管災難復原服務的 RTO 為五分鐘。由於有 RTO,在啟動容錯程序後的五分鐘內,備用區域就會提供足夠的運算能力。

復原點目標

復原點目標 (RPO) 是指資料必須能夠還原的最近時間點。如要進一步瞭解 RPO,請參閱「DR 規劃的基本概念」。代管的災難復原服務會為每個資料集定義 RPO。RPO 的目標是讓次要複本在 15 分鐘內與主機保持同步。如要達到這個 RPO,您不得超過頻寬配額,且不得有任何使用者錯誤。

配額

您必須在次要區域中選擇所需的運算資源,才能設定備援保留空間。如果次要區域沒有可用的配額,您就無法設定預訂。詳情請參閱「配額與限制」。

強化型複製功能的頻寬有配額。詳情請參閱「配額與限制」。

定價

如要設定受管理的災難復原功能,必須採用下列定價方案:

客戶只需支付主要區域的運算容量費用。您可以在次要區域使用次要運算容量 (根據保留基準),不需額外付費。除非保留作業失敗,否則閒置運算單元無法使用次要運算能力。

如果您需要在次要區域執行過時讀取作業,就必須購買額外的運算容量。

建立或變更 Enterprise Plus 預留項目

將資料集附加至保留項目之前,您必須建立 Enterprise Plus 保留項目,或變更現有保留項目,並將其設為災難復原用途。

建立保留項目

請選取下列其中一個選項:

主控台

  1. 前往 Google Cloud 控制台的「BigQuery」頁面。

    前往 BigQuery

  2. 在導覽選單中,依序點選「容量管理」和「建立預留項目」

  3. 在「Reservation name」(預留項目名稱) 欄位中,輸入預留項目的名稱。

  4. 在「位置」清單中選取位置。

  5. 在「Edition」清單中,選取 Enterprise Plus 版本。

  6. 在「預留項目大小選取器」清單中,選取預留項目大小上限。

  7. 選用:在「Baseline slots」欄位中,輸入保留項目的基準運算單元數量。

    可用的自動調度資源運算單元數量,取決於最大預留項目大小值減去基準運算單元值的結果。舉例來說,如果您建立的預留項目有 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 位置,則只能使用 Enterprise 版本。
    • RESERVATION_NAME:保留項目的名稱。

      名稱開頭和結尾須為小寫英文字母或數字,中間只能使用小寫英文字母、數字和破折號。

    • NUMBER_OF_BASELINE_SLOTS:要分配給保留項目的基準運算單元數量。您無法在同一個預留作業中設定 slot_capacityedition 選項。
    • SECONDARY_LOCATION:預訂的次要位置。發生中斷服務時,任何連結至此預留空間的資料集都會備援至這個位置。

  3. 按一下 「Run」

如要進一步瞭解如何執行查詢,請參閱「執行互動式查詢」一文。

變更現有預訂

請選取下列其中一個選項:

主控台

  1. 前往 Google Cloud 控制台的「BigQuery」頁面。

    前往 BigQuery

  2. 在導覽選單中,按一下「Capacity management」(容量管理)

  3. 按一下「Slot reservations」(運算單元保留) 分頁標籤。

  4. 找出要更新的預訂。

  5. 按一下 「Reservations actions」,然後點選「Edit」

  6. 在「次要位置」欄位中輸入次要位置。

  7. 按一下 [儲存]

SQL

如要為預訂新增或變更次要地點,請使用 ALTER RESERVATION SET OPTIONS DDL 陳述式

  1. 前往 Google Cloud 控制台的「BigQuery」頁面。

    前往 BigQuery

  2. 在查詢編輯器中輸入以下陳述式:

    ALTER RESERVATION
      `ADMIN_PROJECT_ID.region-LOCATION.RESERVATION_NAME`
    SET OPTIONS (
      secondary_location = SECONDARY_LOCATION);

    請依指示取代下列項目:

    • ADMIN_PROJECT_ID:擁有預留資源的管理專案專案 ID。
    • LOCATION:預訂的位置,例如 europe-west9
    • RESERVATION_NAME:保留項目的名稱。名稱開頭和結尾須為小寫英文字母或數字,中間只能使用小寫英文字母、數字和破折號。

    • SECONDARY_LOCATION:預訂的次要位置。發生中斷服務時,任何連結至此預留空間的資料集都會備援至這個位置。

  3. 按一下 「Run」

如要進一步瞭解如何執行查詢,請參閱「執行互動式查詢」一文。

將資料集附加至預留項目

如要為先前建立的預留空間啟用災難復原功能,請完成下列步驟。資料集必須已設定為在與保留項目相同的主要和次要區域中進行複製。詳情請參閱「跨區域資料集複製」。

主控台

  1. 前往 Google Cloud 控制台的「BigQuery」頁面。

    前往 BigQuery

  2. 在導覽選單中,依序點選「Capacity management」和「Slot Reservations」分頁標籤。

  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. 按一下 「Run」

如要進一步瞭解如何執行查詢,請參閱「執行互動式查詢」一文。

將資料集從保留項目中分離

如要停止透過預留空間管理資料集的備援行為,請將資料集從預留空間中分離。這不會變更資料集目前的主要備用資源,也不會移除任何現有的資料集備用資源。如要進一步瞭解如何在解除資料集後移除資料集副本,請參閱「移除資料集副本」。

主控台

  1. 前往 Google Cloud 控制台的「BigQuery」頁面。

    前往 BigQuery

  2. 在導覽選單中,依序點選「Capacity management」和「Slot Reservations」分頁標籤。

  3. 按一下要從中分離資料集的預留資料集。

  4. 按一下「災難復原」分頁標籤。

  5. 展開資料集主要備援機制的 「動作」選項。

  6. 按一下 [移除]

SQL

如要將資料集從預留空間中分離,請使用 ALTER SCHEMA SET OPTIONS DDL 陳述式

  1. 前往 Google Cloud 控制台的「BigQuery」頁面。

    前往 BigQuery

  2. 在查詢編輯器中輸入以下陳述式:

    ALTER SCHEMA
      `DATASET_NAME`
    SET OPTIONS (
      failover_reservation = NULL);

    請依指示取代下列項目:

    • DATASET_NAME:資料集名稱。

  3. 按一下 「Run」

如要進一步瞭解如何執行查詢,請參閱「執行互動式查詢」一文。

啟動容錯移轉

如果發生區域中斷的情況,您必須手動將保留項目容錯移轉至備援機制使用的位置。預留作業失敗時,也會影響任何相關聯的資料集。如要手動容錯移轉預訂,請按照下列步驟操作:

主控台

  1. 前往 Google Cloud 控制台的「BigQuery」頁面。

    前往 BigQuery

  2. 在導覽選單中,按一下「Disaster recovery」(災難復原)

  3. 按一下要備援的預訂名稱。

  4. 按一下「Failover」

SQL

如要新增或變更預訂的次要地點,請使用 ALTER RESERVATION SET OPTIONS DDL 陳述式,並將 is_primary 設為 TRUE

  1. 前往 Google Cloud 控制台的「BigQuery」頁面。

    前往 BigQuery

  2. 在查詢編輯器中輸入以下陳述式:

    ALTER RESERVATION
      `ADMIN_PROJECT_ID.region-LOCATION.RESERVATION_NAME`
    SET OPTIONS (
      is_primary = TRUE);

    請依指示取代下列項目:

    • ADMIN_PROJECT_ID:擁有預留資源的管理專案專案 ID。
    • LOCATION:保留項目的新主要位置,即備援前目前的次要位置,例如 europe-west9
    • RESERVATION_NAME:保留項目的名稱。名稱開頭和結尾須為小寫英文字母或數字,中間只能使用小寫英文字母、數字和破折號。

    • PRIMARY_STATUS:布林值狀態,表示預留項目是否為主要副本。

  3. 按一下 「Run」

如要進一步瞭解如何執行查詢,請參閱「執行互動式查詢」一文。

監控

如要判斷複本的狀態,請查詢 INFORMATION_SCHEMA.SCHEMATA_REPLICAS 檢視畫面。例如:

SELECT
  schema_name,
  replica_name,
  creation_complete,
  replica_primary_assigned,
  replica_primary_assignment_complete
FROM
  `region-LOCATION`.INFORMATION_SCHEMA.SCHEMATA_REPLICAS
WHERE
  schema_name="my_dataset"

下列查詢會傳回過去七天內的工作,如果這些工作的資料集是備援資料集,就會失敗:

WITH
  non_epe_reservations AS (
    SELECT project_id, reservation_name
    FROM `PROJECT_ID.region-LOCATION`.INFORMATION_SCHEMA.RESERVATIONS
    WHERE edition != 'ENTERPRISE_PLUS'
  )
SELECT *
FROM
  (
    SELECT job_id
    FROM
      (
        SELECT
          job_id,
          reservation_id,
          ARRAY_CONCAT(referenced_tables, [destination_table]) AS all_referenced_tables,
          query
        FROM
          `PROJECT_ID.region-LOCATION`.INFORMATION_SCHEMA.JOBS
        WHERE
          creation_time
          BETWEEN TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 7 DAY)
          AND CURRENT_TIMESTAMP()
      ) A,
      UNNEST(all_referenced_tables) AS referenced_table
  ) jobs
LEFT OUTER JOIN non_epe_reservations
  ON (
    jobs.reservation_id = CONCAT(
      non_epe_reservations.project_id, ':', 'LOCATION', '.', non_epe_reservations.reservation_name))
WHERE
  CONCAT(jobs.project_id, ':', jobs.dataset_id)
  IN UNNEST(
    [
      'PROJECT_ID:DATASET_ID',
      'PROJECT_ID:DATASET_ID']);

更改下列內容:

  • PROJECT_ID:專案 ID。
  • DATASET_ID:資料集 ID。
  • LOCATION位置

後續步驟