使用環境快照進行災難復原

Managed Airflow (第 3 代) | Managed Airflow (第 2 代) | Managed Airflow (舊版第 1 代)

本頁說明如何使用環境快照進行災難復原

定義

本指南使用下列定義:

  • 災害是指 Managed Airflow 或其他對環境運作至關重要的元件無法使用。這項事件需要容錯移轉至其他區域和 Managed Airflow 環境。災害可能是自然或人為造成,包括 Google Cloud 區域停機和您基礎架構的服務中斷。
  • 在 Managed Airflow 中,災難復原 (DR) 是指在發生災難後,還原環境運作的程序。這個程序包括重新建立環境,可能是在其他區域。如要進一步瞭解災難復原,請參閱「災難復原規劃指南」。
  • 主要環境是您要啟用 DR 功能的 Managed Airflow 環境。
  • 容錯移轉環境是指定的 Managed Airflow 環境,可接管主要環境的活動。
  • 暖 DR 情境是災難復原的變體,您會使用備用容錯移轉環境,這類環境是在災難發生前建立。
  • 冷災難復原情境是災難復原的變體,您可以在發生災難後建立容錯移轉環境。
  • 跨區域災難復原是溫備援或冷備援災難復原的變體,其中主要和容錯移轉環境位於不同區域。

災難復原程序簡介

如果主要環境因災難而無法運作 (損壞或無法存取),即可透過災難復原程序解決問題。

這項程序假設主要環境不會就地修復,以解決災害問題。而是並排建立第二個 (容錯移轉) 環境。這個環境會取代主要環境運作。之後,您可能會決定返回主要環境,或繼續使用容錯移轉環境。

由於程序使用容錯移轉環境,因此切換主要環境時會導入變更。主要環境與容錯移轉環境之間的變更包括 (但不限於):

  • 網路伺服器網址會有所不同。這會變更 Airflow UI 和 Airflow REST API 端點的位址。

  • 環境的 bucket 網址會有所不同。

  • 可能需要調整網路和存取權限設定。

如果您使用暖 DR 情況,您會預先知道網路伺服器、環境的 bucket 位址和網路設定的值。

事前準備

  • Managed Airflow 支援 2.0.32 以上版本的排定快照。2.0.9 以上版本支援環境快照。
  • Airflow 資料庫的資料必須少於 20 GB,才能建立快照。

  • 如要建立快照,環境值區中 /dags/plugins/data 資料夾的物件總數必須少於 100,000 個。

  • 如果您使用 XCom 機制傳輸檔案,請務必按照 Airflow 的指南使用該機制。使用 XCom 傳輸大型檔案或大量檔案會影響 Airflow 資料庫的效能,並可能導致載入快照或升級環境時發生錯誤。建議改用 Cloud Storage 等替代方案,傳輸大量資料。

準備總覽

這兩種災害復原情境都包含下列準備步驟:

  1. 建立容錯移轉環境

    • 在暖 DR 情境中,您會讓這個環境保持可用狀態。
    • 在冷 DR 情境中,您建立這個環境只是為了測試災難復原程序。完成準備作業後,您可以刪除這個環境,並在發生災害後重新建立。
  2. 建立快照值區

    • 值區必須位於 DR 區域。如要進行跨區域 DR,快照值區必須是多區域值區,或位於與主要環境不同的區域。

    • 確認 DAG 可以存取區域資源。

  3. 設定資料庫維護作業

  4. 設定排程快照

  5. 測試災難復原程序

災難復原總覽

發生災害後:

  1. (僅限冷 DR) 建立容錯移轉環境
  2. 盡可能停止主要環境執行 DAG
  3. 從快照值區載入快照至容錯移轉環境。
  4. 視需要調整容錯移轉環境的設定
  5. 決定如何處理主要環境

準備步驟

請按照下列步驟,為環境設定災難復原。

建立容錯移轉環境

建立環境做為容錯移轉環境。

請按照以下指示設定名稱:

  • 主要和容錯移轉環境必須使用相同版本的 Managed Airflow 和 Airflow。

  • 在暖 DR 情境中,請務必更新升級兩個環境,確保兩者同步。舉例來說,如果您將主要環境升級至較新的 Managed Airflow 版本,或是安裝 PyPI 套件,容錯移轉環境也必須進行這些變更。

  • 建議您在與主要環境不同的區域中建立容錯移轉環境。因此,涵蓋的可能災害情境範圍更廣,例如影響整個區域可用性的災害。

  • 建議使用 Terraform 建立主要和容錯移轉環境,確保兩者設定一致。請確認主要和容錯移轉環境的 Terraform 定義已同步處理。

  • 建議容錯移轉環境的設定 (例如環境大小、排程器數量和 IAM 權限) 與主要環境的設定一致。兩個環境的 IAM 權限都必須提供適當的使用者和快照存取權。

檢查資源可用性

DAG 可以對外部資源執行作業,而存取這些資源可能取決於環境的設定 (例如授予環境服務帳戶的權限、網路設定或專案)。請確保容錯移轉環境可以使用這些資源。

環境可能會透過儲存在 Airflow 中的連線,與某些外部資源互動。檢查與主要環境相比,容錯移轉環境中是否應調整這些資源。

建立快照儲存空間 bucket

建立新的儲存空間 bucket,用於儲存環境快照。 請勿使用環境值區進行災難復原,因為資料保留政策和生命週期的設定是在值區層級套用。

請確認這個儲存空間值區已設定 IAM 權限、資料保留政策和生命週期設定,防止意外刪除或未經授權存取。如要進一步瞭解如何設定快照的儲存空間,請參閱「設定排程快照」。

您可以:

  • 在其他區域建立 bucket。
  • 建立多區域 bucket。

設定資料庫維護作業

設定資料庫清除作業,讓 Airflow 資料庫維持在大小限制內。這樣做可加快儲存及載入快照的速度。Airflow 資料庫的資料量必須少於 20 GB,才能建立快照。

設定排程快照

為主要環境設定排程快照

快照只能在正常環境中建立,因此必須在發生災害前儲存快照。

如要進一步瞭解快照的運作方式,請參閱「儲存及載入環境快照」。如要瞭解儲存的快照位置,請參閱文件中的「儲存環境快照」一節。

(選用) 設定排定快照作業的監控功能

如果排程快照的頻率至少為每 12 小時一次,您可以使用 Cloud Monitoring 在系統未自動建立快照時發出快訊。

如果是較不頻繁的排程,請使用 Google Cloud CLI 驗證快照作業結果。請參閱「驗證儲存快照作業」。

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

    前往「Monioring」

  2. 在「Monitoring」導覽窗格中,選取「快訊」圖示
  3. 如果尚未建立通知管道,但想收到通知,請按一下「Edit Notification Channels」(編輯通知管道),新增通知管道。新增管道後,請返回「Alerting」(警告) 頁面。
  4. 在「Alerting」(警告) 頁面,選取「Create policy」(建立政策)
  5. 如要選取指標,請展開「Select a metric」(選取指標) 選單,執行下列步驟:
    1. 如要限制選單只顯示相關項目,請在篩選列輸入 Composer Snapshot。如果選單篩選後沒有任何結果,請停用「Show only active resources & metrics」(僅顯示使用中的資源和指標) 切換鈕。
    2. 在「Resource type」(資源類型) 部分,選取「Cloud Composer Environment」(Cloud Composer 環境)
    3. 在「指標類別」中,選取「環境」
    4. 在「指標」部分,選取「快照建立次數」
    5. 選取 [Apply] (套用)
  6. 按一下「新增篩選條件」,然後使用下拉式選單新增下列篩選條件:
    篩選器 比較子
    資源標籤 > environment_name = 您要監控排程快照的環境名稱。
    監控標籤 > 結果 = SUCCEEDED
  7. 在「轉換資料」部分,設定下列屬性:
    • 在「Rolling window」(滾動週期) 中,選取這項快訊的監控週期。這個值會影響下一步的門檻設定。

      建議的定期快照監控值:1 天

    • 在「滾動週期函式」部分,選取「delta」
  8. 點選「下一步」
  9. 「Configure alert trigger」(設定警告觸發條件) 頁面中的設定會決定警告觸發時機。按照下表中的指示,完成這個頁面的設定。
    欄位
    Condition type Threshold
    Alert trigger Any time series violates
    Threshold position Below threshold
    Threshold value 您預期在設定為快訊「滾動視窗」的時間內,系統會儲存的排定快照數量。

    使用下列公式計算這個值:

    (rolling window in hours / schedule frequency in hours) - 1

    注意:公式中扣除 1 小時,是為了考量快照完成時間不一。如果最新快照仍在監控檢查期間執行,這有助於避免誤報。

    範例
    如果您使用建議的 1 天滾動式視窗, 且排程頻率為每 2 小時一次,請將這個值設為 11 (如計算結果:24 / 2 - 1 = 11)。

    如果排程正常運作,在任何 24 小時內,您應該至少會有 11 張快照。 如果沒有,表示快照作業未順利完成,Cloud Monitoring 會觸發這項快訊。

    Condition name 條件的自訂名稱。
  10. 點選「下一步」
  11. 選用:如要新增警告政策的通知,請按一下「Notification channels」(通知管道)。在對話方塊中,從選單選取一或多個通知管道,然後按一下「OK」(確定)
  12. 選用:更新「Incident autoclose duration」(事件自動關閉期限)。這個欄位會決定 Monitoring 在沒有指標資料下關閉事件的時機。
  13. 選用:按一下「Documentation」(說明文件),新增要納入通知訊息的資訊。
  14. 按一下「Alert name」(警告名稱),輸入警告政策的名稱。
  15. 點選「建立政策」
詳情請參閱「快訊政策」。

測試災難復原程序

設定災難復原程序後,請務必進行測試,並定期測試。以便解決可能影響實際災難復原程序的潛在問題。

在冷 DR 情境中,測試完災難復原程序後,即可刪除容錯移轉環境。

驗證儲存快照作業

您可以使用 Google Cloud CLI 擷取儲存快照作業清單,並確認快照是否已準備好用於災難復原情境。

如果您儲存快照的頻率低於每 12 小時一次,建議使用這種方法。如要更頻繁地驗證儲存的快照,建議設定 Cloud Monitoring 快訊。請參閱「設定排定快照作業的監控功能」。

gcloud

列出特定環境的所有快照作業。如需完整指令參考資料,請參閱 gcloud composer operations list

gcloud composer operations list \
    --locations LOCATION \
    --filter="metadata.operationType=SAVE_SNAPSHOT AND 
    metadata.resource=projects/PROJECT_ID/locations/LOCATION/environments/ENVIRONMENT_ID"
    --format yaml

更改項目:

  • LOCATIONS 替換為環境所在的區域 ID 清單
  • PROJECT_ID,並將其替換為環境所在的專案 ID
  • ENVIRONMENT_ID,並換成要檢查快照作業的環境 ID

範例:

gcloud composer operations list \
    --locations us-central1 \
    --filter="metadata.operationType=SAVE_SNAPSHOT AND 
    metadata.resource=projects/my-project/locations/us-central1/environments/my-environment"
    --format yaml

災難發生後

發生災害後,請按照下列步驟復原主要環境。

(僅限冷 DR) 建立容錯移轉環境

按照「建立容錯移轉環境」一節中的說明操作。

停止主要環境執行 DAG

盡可能停止主要環境執行 DAG:

  • 如果主要環境仍可存取,請暫停所有 DAG
  • 如果可以存取主要環境的值區,請將所有 DAG 從環境的值區移出,或移至主要環境值區中 /dags 以外的資料夾。

將快照載入容錯移轉環境

將主要環境的快照載入容錯移轉環境。

快照載入至容錯移轉環境後,系統會排定及執行工作,就像主要環境在建立快照後未執行任何工作一樣。不過,主要環境可能已執行部分工作。容錯移轉環境無法辨識在建立快照後和發生災害前執行的工作。因此部分工作可能會執行兩次 (主要和容錯移轉環境都會執行)。建議所有工作都應為冪等,且排定的快照應每兩小時建立一次

(如有需要) 調整容錯移轉環境的設定

在某些情況下,將主要環境的快照載入容錯移轉環境後,您可能會想變更容錯移轉環境的設定。

舉例來說,在冷 DR 情境中,您可能需要在容錯移轉環境中使用一組不同的 Airflow 環境變數。再舉一例,在暖 DR 情境中,您可能需要在 Airflow UI 中授予使用者權限,讓他們存取容錯移轉環境。

您可以手動進行這些變更,也可以準備含有指令的殼層指令碼,透過執行 gcloud composer environment update 指令變更容錯移轉環境的設定。

決定如何處理主要環境

有時,主要環境無法連線但仍可運作,或運作不正常,也可能導致災害發生。舉例來說,您無法透過網路存取主要環境,因為基礎架構發生故障。再舉一個例子,環境運作時發生一些錯誤或容量減少,但仍會執行部分 DAG。

如果原始環境仍在執行,即使已建立新環境做為替代方案,仍可能產生與 Managed Airflow 或透過 DAG 存取的其他服務直接相關的費用。這個環境仍可執行部分 DAG,因此某些作業可能會執行兩次:一次是在仍在執行的主要環境中,另一次是在載入快照後的容錯移轉環境中。

如果主要環境存在,但無法正常運作

如果已復原所有相關資料,即可刪除主要環境。舉例來說,您可能想復原環境快照中未包含的資料,例如網路設定,或是 /dags/plugins 資料夾以外的環境值區內容。

如果主要環境恢復正常運作

如果主要環境只是暫時無法存取,之後恢復正常,您可以選擇下列做法:

  • 繼續使用容錯移轉環境。
  • 返回主要環境。

如要繼續使用容錯移轉環境,請按照下列步驟操作:

  1. 如果主要環境仍執行 DAG,請盡快暫停這些 DAG
  2. 確認已復原所有相關資料,然後刪除主要環境。
  3. 針對容錯移轉環境重複執行災害復原準備步驟,例如設定排程快照。

如要返回主要環境,請按照下列步驟操作:

  1. 暫停容錯移轉環境中的所有 DAG。
  2. 等待容錯移轉環境中的所有 DAG 執行作業完成,或停止這些作業。
  3. 儲存容錯移轉環境的快照。
  4. 將這個快照載入主要環境。
  5. 在主要環境中取消暫停 DAG。
  6. 視需要刪除容錯移轉環境。

後續步驟