有狀態的代管執行個體群組


您可以使用有狀態的代管執行個體群組 (有狀態 MIG),在 VM 執行個體上建構具有高度可用性的有狀態工作負載部署作業。有狀態的工作負載包括含有狀態資料或設定的應用程式,例如資料庫、舊版單體式應用程式,以及含有檢查點的長時間執行批次運算。

透過有狀態的 MIG,您可以透過自動修復 (自動復原失敗的工作負載)、多區域部署和自動滾動式更新,改善這類有狀態應用程式的正常運作時間和彈性。

有狀態的代管執行個體群組會在 VM 重新啟動、重新建立、自動修復或更新時,保留每個執行個體的專屬狀態 (包括執行個體名稱、已連接的永久磁碟、IP 位址和中繼資料)。

本頁說明何時應使用有狀態的 MIG,並概略說明其運作方式。詳情請參閱「有狀態的 MIG 如何運作」。

如要瞭解如何設定有狀態的 MIG,請參閱「設定有狀態的 MIG」。

有狀態工作負載與無狀態工作負載的差異

您可以使用代管執行個體群組支援有狀態和無狀態工作負載。有狀態和無狀態工作負載的主要差異在於,有狀態工作負載會在 VM 磁碟上保留個別 VM 狀態 (例如資料庫分片或應用程式設定),而無狀態工作負載 (例如網頁前端) 則不會在個別 VM 上保留任何狀態。

您會將具有有狀態工作負載的 VM 視為自訂機器:您會關心每部機器的 VM 身分 (名稱)、IP 位址、中繼資料和資料。您無法輕易橫向擴充有狀態的工作負載,因為擴充可能需要資料複製、建立或刪除資料區塊,或是變更整體應用程式設定。當您重新建立或更新具有有狀態工作負載的機器時,必須保留 VM 的專屬狀態。有狀態的應用程式舉例如下:Cassandra、ElasticSearch、MongoDB、MySQL、PostgreSQL 和 Kafka。

您可以將具有無狀態工作負載的 VM 視為可互換,只需關心您擁有的服務 VM 數量。系統不會對任何 VM 採取不同的處理方式。您可以透過新增或移除 VM,輕鬆地將無狀態工作負載橫向調度。更新應用程式時,您可以刪除機器,並用具有不同名稱、IP 位址、中繼資料和磁碟的新機器取代。刪除或重新建立無狀態 VM 時,機器上的所有資料都會遺失:磁碟會遭到刪除或從頭重新建立。網路前端就是無狀態應用程式的例子。

有狀態的 MIG無狀態 MIG
工作負載 有狀態的工作負載,在 VM 重建作業中保留磁碟、IP 位址和/或中繼資料。 可擴充且具高可用性的無狀態工作負載,其中磁碟和 IP 位址會透過水平調整資源調度、自動修復、自動更新和 VM 重建功能從頭重新建立。
MIG 功能
  • 自動修復
  • 自動滾動式更新
  • 多區域部署
  • 自動修復
  • 自動滾動式更新
  • 多區域部署
  • 自動調度資源
可保存的項目
  • 執行個體名稱
  • 永久磁碟,包括支援未在執行個體範本中定義的磁碟
  • 執行個體專屬中繼資料
  • IP 位址
執行個體名稱

所有 MIG 都支援自訂且可保留的執行個體名稱。

使用有狀態 MIG 的時機

每當您將有狀態應用程式或叢集部署至 Compute Engine,並希望透過自動修復多區域部署來改善其可用性,或是希望透過協調更新發布作業和控制允許的執行個體中斷程度,簡化有狀態執行個體的更新作業,不妨考慮使用有狀態的代管執行個體群組 (有狀態 MIG)。

有狀態的 MIG 適用於含有有狀態資料或設定的應用程式,例如:

  • 資料庫。例如:Cassandra、ElasticSearch、mongoDB 和 ZooKeeper。在決定是否使用有狀態 MIG 之前,請考慮使用全代管服務,例如 Cloud SQL 提供的 MySQL 和 PostgreSQL,專注於應用程式,而無須處理 VM。
  • 資料處理應用程式。例如 Kafka 和 Flink。決定是否要使用有狀態的 MIG 前,請考慮使用全代管服務,例如 DataflowDataproc,專注於資料處理工作,而無須處理 VM。
  • 其他有狀態應用程式。例如:TeamCity、Jenkins、Bamboo、具有有狀態 IP 位址的 DNS 伺服器,以及自訂的有狀態工作負載。
  • 舊版單體式應用程式。這些應用程式會將應用程式狀態儲存在開機磁碟或其他永久磁碟上,或是依賴有狀態的設定,例如特定的 VM 執行個體名稱、IP 位址或中繼資料鍵值。
  • 使用檢查點批次處理工作負載。有了這項設定,您就能在工作負載或 VM 發生故障或執行個體遭到先占時,保留長時間運算的檢查點結果。具狀態的 MIG 可重新建立發生故障的機器,同時保留其資料磁碟,讓運算作業可從上一個查核點繼續執行。

為了因應區域故障,應用程式必須在應用程式層級複製多個執行個體的資料。例如 ElasticSearch 和 Cassandra 就支援這類功能。您可以使用區域性 MIG,將備援副本部署至多個區域,並依賴應用程式的資料複寫功能,讓這類應用程式能夠因應區域性故障。在可用區故障的情況下,系統會從其他可用區的可用備援機制提供資料。

請詳閱限制條件,確認有狀態 MIG 是否完全符合您的需求。

有狀態的 MIG 的構成條件

如果您已建立有狀態的設定,則 MIG 會視為有狀態。

您可以在建立 MIG 時建立有狀態設定,也可以在建立群組後新增設定,將群組從無狀態轉換為有狀態。

您可以設定非空狀態政策和/或一或多個非空個別執行個體設定,藉此建立有狀態設定:

  • 有狀態政策可定義您想為 MIG 中的所有執行個體保留的項目。
  • 每個執行個體設定會定義要為特定 VM 執行個體保留的項目。

設定會在您或 MIG 套用後生效:

  • MIG 會自動將有狀態政策設定套用至新的和現有執行個體。
  • 建立或更新個別執行個體設定時,您可以選擇是否要手動套用新設定,或讓系統自動套用。

套用有狀態設定 (有狀態政策和/或個別執行個體設定) 後,您可以檢查每個受管理執行個體的保留狀態,藉此驗證設定。

之後變更 MIG 的具狀態設定或大小 (例如減少 MIG 的大小,或從 MIG 刪除或放棄執行個體) 可能會影響保留的狀態

有狀態設定

有狀態的代管執行個體群組 (MIG) 會從執行個體範本、選用的所有執行個體設定、選用的有狀態政策,以及您設定的選用個別執行個體設定,擷取執行個體設定。設定群組的設定後,MIG 會在建立 VM 時使用該設定。如要將更新後的設定套用至現有 VM,請參閱「在 MIG 中套用新的 VM 設定」。

具狀態的政策

有狀態政策會為代管執行個體群組中的所有執行個體定義常見的有狀態項目。您在有狀態政策中加入的每個項目都必須在 MIG 的例項範本中定義。

您可以對有狀態政策進行下列變更:

  • 將磁碟新增至有狀態政策,即可將磁碟設為有狀態。
  • 將磁碟有狀態政策中移除,將磁碟設定為無狀態。
  • 將網路介面設定新增至具狀態政策,指定 IP 位址必須具狀態。
  • 移除有狀態政策中的設定,指定 IP 位址必須視為無狀態。

個別執行個體設定

每個執行個體的設定會定義特定受管理的執行個體專屬的具狀態項目,例如特定執行個體的磁碟、中繼資料鍵/值組合和 IP 位址。您不需要在 MIG 的執行個體範本中定義特定執行個體的中繼資料和磁碟,但必須在 MIG 的執行個體範本中定義有狀態 IP 的網路介面。

您可以對 MIG 中特定執行個體的個別執行個體設定進行下列變更:

  • 設定磁碟:在執行個體範本中定義磁碟,讓磁碟成為執行個體的狀態磁碟 (將這些磁碟新增至個別執行個體設定),或讓磁碟成為無狀態磁碟 (從個別執行個體設定中移除這些磁碟)。
  • 設定現有磁碟 (未在執行個體範本中定義),以便附加並成為執行個體的狀態磁碟 (將這些磁碟新增至個別執行個體設定),或從執行個體中卸離 (從個別執行個體設定中移除磁碟)。
  • 新增或移除與執行個體相關的具狀態中繼資料鍵/值組合。
  • 設定 IP 位址:為 MIG 中的執行個體個別設定有狀態或無狀態。

有狀態設定的範例

以下是具狀態設定的範例:

執行個體範本 + 有狀態政策 + 個別執行個體設定 = 受管理的執行個體設定。

這張圖表中:

  • 執行個體範本會為 MIG 中的所有 VM 執行個體定義通用設定
  • 有狀態政策會為具有裝置名稱 data-disk 的磁碟定義常見的有狀態設定,這項名稱是由執行個體範本定義,並會在 MIG 中的每個 VM 執行個體中個別建立及連結。
  • 每個執行個體的設定會為名為 node-1 的特定 VM 執行個體定義有狀態設定。它會指定將現有磁碟 my-legacy-1 連結至 node-1 執行個體,並將其視為有狀態。它也指定一個中繼資料鍵值,以保留 node-1 例項的個別性:node-id:xyz273

建立 node-1 VM 時,MIG 會執行以下操作:

  1. 根據執行個體範本使用 n2-standard-2 機器類型。
  2. 根據執行個體範本,使用 Debian GNU/Linux 映像檔建立及連結開機磁碟,其中包含自動產生的磁碟名稱 boot-node-1 和裝置名稱 boot-disk。MIG 會將 boot-node-1 啟動磁碟視為無狀態,因為該磁碟並未在有狀態政策或個別例項設定中設定。
  3. 根據執行個體範本,使用自訂映像檔建立及連接額外磁碟,並使用自動產生的磁碟名稱 data-disk-1 和裝置名稱 data-disk。MIG 會將 data-disk-1 額外磁碟視為有狀態,因為其裝置名稱已在有狀態政策中指定。
  4. 根據每個執行個體的設定,附加磁碟名稱為 my-legacy-1 的現有磁碟,並使用裝置名稱 legacy-disk。MIG 會將 my-legacy-1 額外磁碟視為有狀態,因為其裝置名稱已在個別執行個體設定中指定。
  5. 設定三個中繼資料鍵/值組合:兩個來自執行個體範本 (app:example-stateful-appversion:1.0),一個來自個別執行個體設定 (node-id:xyz273)。MIG 會將 node-id:xyz273 鍵/值組合視為有狀態,因為該組合是在個別執行個體設定中指定。

重新建立 node-1 VM 時,假設相同的設定仍有效,MIG 會重新建立無狀態項目,並保留有狀態項目:

  1. 根據原始映像檔重新建立開機磁碟:

    首先,系統會刪除 boot-node-1 開機磁碟,然後根據執行個體範本的指定,從 Debian GNU/Linux 映像檔重新建立磁碟。

  2. 保留其他磁碟 data-disk-1my-legacy-1

    在刪除 VM 之前卸離其他磁碟,然後在重新建立 VM 後將這些磁碟連結至 VM。

  3. 保留個別中繼資料鍵/值組合 node-id:xyz273

    在重新建立 VM 後設定中繼資料。並設定執行個體範本 (app:example-stateful-appversion:1.0) 中的常見鍵/值組合。

意見回饋

我們想瞭解您對有狀態 MIG 的使用情境、難題和意見。請前往以下網址,並與我們的團隊分享您的寶貴意見:mig-discuss@google.com

後續步驟