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 情況都包含下列準備步驟:
-
- 在熱備份 DR 情境中,您會保留這個環境。
- 在冷 DR 情境中,您只需建立這個環境來測試災難復原程序。完成準備工作後,請刪除這個環境,並在發生災難後重新建立。
-
值區必須位於 DR 地區。對於跨區域的 DR,快照值區必須是多地區,或是位於與主要環境不同的區域。
確認 DAG 可存取區域資源。
災難復原總覽
災難發生後:
- (僅限冷備份) 建立容錯移轉環境。
- 盡可能停止主要環境執行 DAG。
- 將快照從快照值區載入至備援環境。
- 視需要調整容錯移轉環境的設定。
- 決定如何處理主要環境。
準備步驟
請按照下列步驟設定環境的災難復原功能。
建立容錯移轉環境
建立用於備援環境的環境。
請按照下列指南設定名稱:
-
主要和容錯移轉環境必須使用相同版本的 Cloud Composer 和 Airflow。
在熱 DR 情境中,請務必更新並升級兩個環境,以便保持同步。舉例來說,如果您將主要環境升級至較新的 Cloud Composer 版本,或安裝 PyPI 套件,備援環境也必須進行這些變更。
建議您在與主要環境不同的區域中建立備援環境。因此,可涵蓋更廣泛的可能災難情境,例如影響整個區域可用性的災難。
建議您使用 Terraform 建立主要和備援環境,讓兩者具有一致的設定。請確認主要和備援環境的 Terraform 定義是否已同步。
建議備援環境的設定 (例如環境大小、排程器數量和 IAM 權限) 應符合主要環境的設定。兩個環境的 IAM 權限都必須提供使用者和快照的適當存取權。
檢查資源供應情形
DAG 可在外部資源上運作,而這些資源的存取權可能會取決於環境的設定 (例如授予環境服務帳戶、網路設定或專案的權限)。請確認這些資源可供備援環境使用。
環境可能會透過儲存在 Airflow 中的連線與部分外部資源互動。請比較備援環境和主要環境,確認這些資源是否需要調整。
建立用於儲存快照的儲存空間值區
建立新的儲存空間值區,用於儲存環境快照。請勿使用環境值區進行災難復原,因為保留政策和生命週期設定會套用至值區層級。
請確認這個儲存體值區設有 IAM 權限、保留政策和生命週期設定,以免意外刪除或未經授權的存取。如要進一步瞭解如何設定快照的儲存體,請參閱「設定排程快照」。
您可以:
- 在其他區域建立值區。
- 建立多區域值區。
設定資料庫維護
設定資料庫清理功能,讓 Airflow 資料庫保持小巧,且不超過大小限制。這樣一來,儲存和載入快照的程序就能加快。Airflow 資料庫的資料量必須少於 20 GB,才能建立快照。
設定排程快照
為主要環境設定排程快照。
快照只能在健康的環境中建立,因此必須在災難發生前儲存快照。
如要進一步瞭解快照的運作方式,請參閱「儲存及載入環境快照」。如要瞭解如何找到已儲存的快照,請參閱說明文件中的「儲存環境快照」一節。
(選用) 設定監控已排定時間的快照作業
如果您設定的快照排程頻率至少為每 12 小時一次,可以使用 Cloud Monitoring 在系統未自動建立快照時發出警示。
如要使用較低頻率的排程,請使用 Google Cloud CLI 驗證快照作業結果。請參閱「驗證儲存快照作業」。
- 前往 Google Cloud 控制台的「Monitoring」頁面。
- 在「Monitoring」導覽窗格中,選取「快訊」圖示 notifications。
- 如果您尚未建立通知管道,但想收到通知,請按一下「Edit Notification Channels」(編輯通知管道),然後新增通知管道。加入管道後,請返回「Alerting」頁面。
- 在「Alerting」頁面中,選取「Create policy」。
- 如要選取指標,請展開「選取指標」選單,然後按照下列步驟操作:
- 如要將選單限制為相關項目,請在篩選列中輸入
Composer Snapshot
。如果篩選選單後沒有任何結果,請停用「僅顯示活躍的資源和指標」切換按鈕。 - 在「Resource type」中,選取「Cloud Composer Environment」。
- 在「指標類別」中,選取「環境」。
- 在「Metric」(指標) 部分,選取「Snapshot creation count」(快照建立次數)。
- 選取 [Apply] (套用)。
- 如要將選單限制為相關項目,請在篩選列中輸入
-
按一下「新增篩選器」,然後使用下拉式選單新增下列篩選器:
篩選器 比較子 值 資源標籤 > environment_name = 要監控排定快照的環境名稱。 監控標籤 > 結果 = SUCCEEDED
- 在「Transform data」(轉換資料) 區段中,設定下列屬性:
- 在「Rolling window」中,選取要監控的快訊時間範圍。
這個值會影響下一步中的閾值設定。
建議的排程快照監控值:1 天。
- 在「Rolling window function」(滾動週期函式) 中,選取「delta」(差異)。
- 在「Rolling window」中,選取要監控的快訊時間範圍。
這個值會影響下一步中的閾值設定。
- 點選「下一步」。
- 「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
您為條件自訂的名稱。 - 點選「下一步」。
- 選用步驟:如要新增通知至快訊政策,請按一下「通知管道」。在對話方塊中,從選單中選取一或多個通知管道,然後按一下「OK」。
- 選用:更新「Incident autoclose duration」。這個欄位會決定 Monitoring 在沒有指標資料時關閉事件的時間。
- 選用步驟:按一下「說明文件」,然後輸入您希望在通知訊息中顯示的資訊。
- 按一下「快訊名稱」,然後輸入快訊政策的名稱。
- 點選「建立政策」。
測試災難復原程序
請務必在設定災難復原程序後進行測試,並定期執行。這樣一來,您就能解決可能影響實際災難復原程序的潛在問題。
在冷 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
與環境所在專案的 IDENVIRONMENT_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
資料夾以外的環境值區內容。
如果主要環境再次變得可存取且健康
如果主要環境只是暫時無法存取,且已恢復正常,您可以選擇下列做法:
- 繼續使用容錯環境。
- 返回主要環境。
如要繼續使用容錯移轉環境,請按照下列步驟操作:
- 如果主要環境仍在執行 DAG,請盡快暫停。
- 確認已復原所有相關資料,然後刪除主要環境。
- 針對備援環境重複執行異地備援準備步驟,例如設定定期快照。
如要返回主要環境,請按照下列步驟操作:
- 暫停容錯環境中的所有 DAG。
- 等待所有 DAG 在備援環境中執行完畢,或停止執行。
- 儲存備援環境的快照。
- 將這個快照載入至主要環境。
- 取消暫停主要環境中的 DAG。
- 視需要刪除備援環境。