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

Cloud Composer 3 | Cloud Composer 2 | Cloud Composer 1

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

定義

本指南使用以下定義:

  • 災難是指 Cloud Composer 或其他對環境運作至關重要的元件無法使用。這項事件需要將容錯移轉至其他區域和 Cloud Composer 環境。災難的原因可能是自然或人為因素,包括 Google Cloud 區域的停機時間,以及您自有基礎架構的停機時間。
  • 在 Cloud Composer 中,災難復原 (DR) 是指在災難發生後,還原環境運作程序的過程。這個程序包括重新建立環境,可能在其他區域。如要進一步瞭解災難復原,請參閱災難復原規劃指南
  • 「Primary environment」是指您要為其啟用 DR 功能的 Cloud Composer 環境。
  • 容錯環境是指專門用於接管主要環境活動的 Cloud Composer 環境。
  • Warm DR 情境是災難復原的變化版本,您會在災難發生前建立備用異動環境。
  • 冷災難復原情境是災難復原的一種變化版本,可讓您在災難發生後建立備援環境。
  • 跨區域 DR 是熱或冷災難復原的變化版本,其中主要和容錯移轉環境位於不同區域。

關於災難復原程序

當主要環境因災難而無法運作 (損壞或無法存取) 時,災難復原程序會解決這個問題。

這項程序假設您不會在原地修復主要環境,以便解決災難。而是並排建立第二個 (備援) 環境。這個環境會取代主要環境運作。在後續階段,您可以決定要返回主要環境,還是繼續使用容錯環境。

由於程序會使用備援環境,因此在您從主要環境切換時,系統會導入變更。主要環境與容錯移轉環境之間的變更包括 (清單不完整):

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

  • 環境的資料夾網址會有所不同。

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

如果您使用熱 DR 情境,就會事先知道網頁伺服器、環境的桶子位址和網路設定的值。

事前準備

  • Cloud Composer 在 2.0.32 以上版本中支援排程快照。2.0.9 以上版本支援環境快照。
  • Airflow 資料庫的資料量必須小於 20 GB,才能建立快照。

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

  • 如果您使用 XCom 機制傳輸檔案,請務必按照 Airflow 的規範使用。使用 XCom 傳輸大型檔案或大量檔案會影響 Airflow 資料庫的效能,並可能導致載入快照或升級環境時失敗。請考慮使用 Cloud Storage 等替代方案來傳輸大量資料。

準備工作總覽

這兩種 DR 情況都包含下列準備步驟:

  1. 建立容錯環境

    • 在熱備份 DR 情境中,您會保留這個環境。
    • 在冷 DR 情境中,您只需建立這個環境來測試災難復原程序。完成準備工作後,請刪除這個環境,並在發生災難後重新建立。
  2. 建立用於儲存快照的值區

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

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

  3. 設定資料庫維護作業

  4. 設定排程快照

  5. 測試災難復原程序

災難復原總覽

災難發生後:

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

準備步驟

請按照下列步驟設定環境的災難復原功能。

建立容錯移轉環境

建立用於備援環境的環境。

請按照下列指南設定名稱:

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

  • 在熱 DR 情境中,請務必更新升級兩個環境,以便保持同步。舉例來說,如果您將主要環境升級至較新的 Cloud Composer 版本,或安裝 PyPI 套件,備援環境也必須進行這些變更。

  • 建議您在與主要環境不同的區域中建立備援環境。因此,可涵蓋更廣泛的可能災難情境,例如影響整個區域可用性的災難。

  • 建議您使用 Terraform 建立主要和備援環境,讓兩者具有一致的設定。請確認主要和備援環境的 Terraform 定義是否已同步。

  • 建議備援環境的設定 (例如環境大小、排程器數量和 IAM 權限) 應符合主要環境的設定。兩個環境的 IAM 權限都必須提供使用者和快照的適當存取權。

檢查資源供應情形

DAG 可在外部資源上運作,而這些資源的存取權可能會取決於環境的設定 (例如授予環境服務帳戶、網路設定或專案的權限)。請確認這些資源可供備援環境使用。

環境可能會透過儲存在 Airflow 中的連線與部分外部資源互動。請比較備援環境和主要環境,確認這些資源是否需要調整。

建立用於儲存快照的儲存空間值區

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

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

您可以:

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

設定資料庫維護

設定資料庫清理功能,讓 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. 如要選取指標,請展開「選取指標」選單,然後按照下列步驟操作:
    1. 如要將選單限制為相關項目,請在篩選列中輸入 Composer Snapshot。如果篩選選單後沒有任何結果,請停用「僅顯示活躍的資源和指標」切換按鈕。
    2. 在「Resource type」中,選取「Cloud Composer Environment」
    3. 在「指標類別」中,選取「環境」
    4. 在「Metric」(指標) 部分,選取「Snapshot creation count」(快照建立次數)
    5. 選取 [Apply] (套用)
  6. 按一下「新增篩選器」,然後使用下拉式選單新增下列篩選器:
    篩選器 比較子
    資源標籤 > environment_name = 要監控排定快照的環境名稱。
    監控標籤 > 結果 = SUCCEEDED
  7. 在「Transform data」(轉換資料) 區段中,設定下列屬性:
    • 在「Rolling window」中,選取要監控的快訊時間範圍。 這個值會影響下一步中的閾值設定。

      建議的排程快照監控值:1 天

    • 在「Rolling window function」(滾動週期函式) 中,選取「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. 選用步驟:如要新增通知至快訊政策,請按一下「通知管道」。在對話方塊中,從選單中選取一或多個通知管道,然後按一下「OK」
  12. 選用:更新「Incident autoclose duration」。這個欄位會決定 Monitoring 在沒有指標資料時關閉事件的時間。
  13. 選用步驟:按一下「說明文件」,然後輸入您希望在通知訊息中顯示的資訊。
  14. 按一下「快訊名稱」,然後輸入快訊政策的名稱。
  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

災難發生後

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

(僅限冷備份) 建立容錯環境

按照「建立備援環境」一節中的說明操作。

停止主要環境執行 DAG

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

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

將快照載入容錯環境

將快照從主要環境載入容錯環境。

快照載入至容錯環境後,系統會排定及執行工作,就好像主要環境在建立快照後沒有執行任何工作一樣。不過,其中部分工作可能已由主要環境執行。備援環境沒有任何方式,可辨識在建立快照後和發生災難前執行的任務。因此,部分工作可能會執行兩次 (在主要和備援環境中)。建議您讓所有工作都為冪等,並且每隔兩小時建立一次排定的快照。

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

在某些情況下,您可能會在將主要環境的快照載入備援環境後,變更備援環境的設定。

舉例來說,在冷 DR 情境中,您可能需要在備援環境中使用不同的 Airflow 環境變數組合。舉另一個例子來說,在熱 DR 情境中,您可能需要在 Airflow UI 中將權限授予使用者,方便他們存取備援環境。

您可以手動執行這些變更,也可以準備 Shell 指令碼,透過執行 gcloud composer environment update 指令來變更備援環境的設定。

決定如何處理主要環境

有些災難可能發生在主要環境無法連線,但仍可運作或無法正常運作時。舉例來說,您無法透過網路存取主要環境,因為基礎架構發生故障。舉另一個例子來說,環境在發生部分錯誤或運算能力降低的情況下運作,但仍會執行部分 DAG。

即使您已建立新環境來取代原始環境,如果原始環境仍在執行,可能會產生與 Cloud Composer 或透過 DAG 存取的其他服務直接相關的費用。這個環境仍可執行部分 DAG,因此部分作業可能會執行兩次:在仍在執行的主要環境中,以及在載入快照後的備援環境中。

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

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

如果主要環境再次變得可存取且健康

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

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

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

  1. 如果主要環境仍在執行 DAG,請盡快暫停
  2. 確認已復原所有相關資料,然後刪除主要環境。
  3. 針對備援環境重複執行異地備援準備步驟,例如設定定期快照。

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

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

後續步驟