使用區域性磁碟的彈性工作負載設計注意事項

Last reviewed 2020-09-23 UTC

本文說明有狀態的應用程式、健康狀態檢查代理程式,以及應用程式專用的地區控制層之間的行為和互動,這些控制層可用於部署地區同步複製磁碟,以監控及協調區域容錯移轉。

本文件適用於應用程式開發人員,可作為「使用區域磁碟建構高可用性服務」的後續內容,進一步說明「使用區域磁碟建構高可用性資料庫服務」一節中所述的設計和架構。建議您先閱讀該文件,特別是「設計考量」和「成本比較、效能和復原能力」一節。

無狀態應用程式會在不同區域中執行至少一個次要的 Compute Engine 執行個體,藉此提高復原能力。主要執行個體發生故障時,應用程式會繼續在次要執行個體上執行。有狀態應用程式可將應用程式狀態儲存至區域磁碟 (或僅在單一區域中可用的磁碟),以便在執行個體重新啟動時還原狀態。為了提供彈性,有狀態的應用程式也必須將應用程式狀態儲存至次要執行個體。

圖 1 說明瞭在兩個區域中複製的典型兩節點有狀態應用程式。每個區域中的應用程式都會提供區域磁碟,用於擷取應用程式狀態,以及執行個體之間的網路連線,以便同步處理節點之間的應用程式狀態變更。

負載平衡器可將應用程式狀態複製到位於不同區域的主要和次要執行個體。

圖 1. 沒有區域磁碟的兩個節點有狀態應用程式

新增地區磁碟

另一種同步有狀態應用程式應用程式狀態的方式,是新增區域磁碟。當應用程式將應用程式狀態寫入區域磁碟時,Google Cloud 會自動將區塊儲存空間與其他區域同步。

圖 2 顯示了含狀態資料庫應用程式的架構。

地區磁碟已連接至兩個區域中的兩個 VM 執行個體。

圖 2:有狀態資料庫應用程式

如圖 2 所示,仍有兩個應用程式運算執行個體 (主要執行個體和次要執行個體) 部署在兩個區域。除了使用區域磁碟儲存應用程式狀態外,現在還有額外的實體,也就是應用程式專屬的區域控制層。應用程式專用的地區控制層會決定哪個執行個體已附加地區磁碟,以及哪個執行個體是目前的主要執行個體。這個架構是主動/被動設定,因為只有主要執行個體可以將應用程式狀態提交至區域磁碟。

運算執行個體和有狀態應用程式

圖 2 說明熱門的雙主動資料庫應用程式。您也可以使用下列設定:

  • 如果復原時間目標 (RTO) 可容許啟動次要執行個體的額外延遲時間,您可以只執行有效的執行個體,藉此節省 Compute Engine 費用。在容錯移轉期間,應用程式專屬的地區控制層會啟動次要執行個體,並將地區磁碟連結至該執行個體。
  • 批次或串流處理工作負載,可將進度檢查點儲存至區域磁碟。在容錯移轉期間,應用程式會從上一個檢查點繼續處理。

管理 Compute Engine 執行個體啟動作業

由於一次只能為單一運算執行個體附加區域磁碟,因此您必須啟動執行個體,並有系統地附加區域磁碟。最佳做法是將運算執行個體和應用程式啟動作業與區域磁碟的附件分開。執行個體的開機指令碼不應啟動區域磁碟附件。相反地,開機指令碼應啟動健康狀態檢查代理程式,並等待地區磁碟連接。

在啟動期間,運算執行個體需要依序執行下列步驟:

  1. 啟動健康檢查代理程式。
  2. 等待系統附加地區磁碟。
  3. 連接區域磁碟後,請掛接檔案系統。
  4. 檔案系統掛載完成後,請啟動應用程式。

這些步驟涵蓋系統啟動程序,但也包含容錯移轉。在容錯移轉期間,地區磁碟會強制連接至次要執行個體。區域磁碟也會從主要執行個體強制移除,且對檔案系統的 I/O 作業會失敗。此時,您需要關閉或重新啟動運算執行個體。

執行健康狀態檢查代理程式和健康狀態檢查

如前文所述,運算執行個體會等待區域磁碟連結完成,再啟動應用程式。應用程式專屬的區域控制層會將區域磁碟連結至等待磁碟連結的運算執行個體,當磁碟連接時,應用程式專屬控制層會監控應用程式的健康狀態,並在應用程式處於不健康狀態時啟動容錯移轉。

每個運算執行個體都具有下列其中一種狀態:

  • 已降級
  • 啟動中
  • 等待磁碟
  • 應用程式執行中

健康狀態檢查代理程式會回報執行個體的目前狀態。您可以執行兩次二元健康狀態檢查,而非透過單一健康狀態檢查回報這兩種狀態。如果運算執行個體已準備好連結區域磁碟,或是區域磁碟已連結且可寫入,則執行個體健康狀態檢查會回報健康狀態。如果應用程式正在執行,且能夠將應用程式狀態寫入區域磁碟,應用程式健康狀態檢查就會回報健康狀態。

使用兩種二進位健康狀態檢查有以下幾項優點:

  • 您可以使用 Compute Engine 代管健康狀態檢查服務,該服務會輪詢健康狀態檢查代理程式,並透過閾值計數解決暫時性錯誤。
  • 代管執行個體群組 (MIG) 可監控執行個體健康狀態檢查,並自動修復健康狀態不良的 Compute 執行個體。
  • 負載平衡器可監控應用程式健康狀態檢查,並將流量路由至有效的應用程式執行個體。

您可以減少健康狀態檢查的回報頻率,或是提高從一個層級轉換至另一個層級所需重複訊號的門檻,避免系統對暫時性故障做出反應。這兩種做法都會延遲系統對中斷事件的回應,並增加復原時間。您可以測試並評估這些參數,調整健康檢查參數,以平衡系統復原時間。

瞭解應用程式專用的區域控制層

架構中的最後一個部分是應用程式專用的區域控制層,負責執行下列兩項功能:

  • 管理主要和次要運算執行個體的生命週期。
  • 監控應用程式健康狀態檢查的狀態,判斷是否需要容錯移轉。

如果需要容錯移轉,應用程式專用區域控制層會透過以下步驟協調容錯移轉作業:

  1. 檢查次要執行個體是否正在執行,並等待區域磁碟連結。
  2. 強制將地區磁碟連接至次要執行個體。
  3. 監控並重新啟動失敗的主要執行個體。當主要執行個體重新啟動時,控制層會視需要啟動回復作業。

應用程式專用的區域控制層本身,必須在應用程式執行的兩個區域中提供高可用性。在內部部署資料中心中,通常會部署額外伺服器來建立法定數,決定哪個運算執行個體是主要執行個體,並協調容錯移轉作業,藉此實現高可用性 (HA)。這種做法通常會使用 HA 監控工具,例如 HeartbeatPacemakerKeepalived

雖然您可以在雲端的任何位置使用特定應用程式的區域控制層,但 Google Cloud 提供下列受管理且可在區域內使用的服務,可簡化這項做法的實作方式:

圖 3 說明如何使用 Cloud Run 函式,為特定應用程式的區域控制平面提供服務,以及有狀態的代管執行個體群組和代管健康狀態檢查。

應用程式專用的區域控制層會管理主要和次要 VM。

圖 3:應用程式專用的區域控制層

圖 3 顯示應用程式的兩個運算執行個體,分別為主要和次要。每個執行個體都會在不同的可用區中執行,並由有狀態的區域 MIG 管理。地區磁碟可在兩個相同的區域中使用。正在執行兩項受管理的健康狀態檢查服務。一個受管理的健康狀態檢查服務會監控執行個體的健康狀態,並由有狀態的 MIG 使用。另一項健康狀態檢查服務會監控應用程式的健康狀態,並由負載平衡器的目標集區使用。

應用程式專用的地區控制層會與目標資源池應用程式健康狀態和具狀態的區域 MIG 互動,以便監控應用程式狀態,並啟動將區域磁碟連結至目前健康的運算執行個體。

後續步驟