您可以使用有狀態代管執行個體群組 (有狀態 MIG),在 VM 執行個體上建構有狀態工作負載的高可用性部署作業。有狀態工作負載包括具有有狀態資料或設定的應用程式,例如資料庫、舊版單體式應用程式,以及具有檢查點的長時間執行批次運算。
透過有狀態 MIG,您可以利用自動修復 (自動復原失敗的工作負載)、多區域部署和自動滾動式更新,延長這類有狀態應用程式的運作時間並提高應變能力。
有狀態的代管執行個體群組會在 VM 重新啟動、重新建立、自動修復或更新時,保留每個執行個體的專屬狀態 (包括執行個體名稱、連接的永久磁碟、IP 位址和中繼資料)。
本頁說明何時應使用有狀態的 MIG,並概略介紹這類 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 功能 |
|
|
可保留的項目 |
|
執行個體名稱 |
所有 MIG 都支援自訂和可保留的執行個體名稱。
使用有狀態 MIG 的時機
在 Compute Engine 中部署有狀態應用程式或叢集時,如果想透過自動修復和多區域部署提高可用性,或是想協調更新推出作業,並控管執行個體允許的中斷程度,簡化有狀態執行個體的更新作業,建議使用有狀態代管執行個體群組 (有狀態 MIG)。
有狀態 MIG 適用於具有有狀態資料或設定的應用程式,例如:
- 資料庫。例如:Cassandra、ElasticSearch、mongoDB 和 ZooKeeper。決定使用具狀態 MIG 前,請考慮使用全代管服務,例如 Cloud SQL 提供 MySQL 和 PostgreSQL,讓您專注於應用程式,不必處理 VM。
- 資料處理應用程式。例如:Kafka 和 Flink。決定使用具狀態 MIG 前,請考慮使用全代管服務 (例如 Dataflow 或 Dataproc),專注於資料處理工作,不必處理 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,請參閱「將新的 VM 設定套用至 MIG」一文。
具狀態政策
有狀態政策會為代管執行個體群組中的所有執行個體定義常見的有狀態項目。您在有狀態政策中加入的每個項目,都必須在 MIG 的執行個體範本中定義。
您可以對有狀態政策進行下列變更:
- 將磁碟新增至有狀態政策,即可將磁碟設為有狀態。
- 從有狀態政策移除磁碟,將磁碟設為無狀態。
- 將網路介面設定新增至有狀態政策,指定 IP 位址必須是有狀態。
- 指定 IP 位址必須視為無狀態,方法是從有狀態政策中移除設定。
個別執行個體設定
每個執行個體的設定會定義特定受管理執行個體專屬的有狀態項目,例如執行個體專屬的磁碟、中繼資料鍵值組合和 IP 位址。您不需要在 MIG 的執行個體範本中定義執行個體專屬的中繼資料和磁碟,但必須在 MIG 的執行個體範本中定義具備狀態 IP 的網路介面。
您可以對 MIG 中特定執行個體的個別執行個體設定進行下列變更:
- 設定磁碟:將執行個體範本中定義的磁碟新增至每個執行個體的設定,使磁碟成為執行個體的有狀態磁碟;或從每個執行個體的設定中移除磁碟,使磁碟成為無狀態磁碟。
- 設定現有磁碟 (未在執行個體範本中定義),以便附加至執行個體並成為有狀態的磁碟 (將這些磁碟新增至個別執行個體設定),或從執行個體卸離 (從個別執行個體設定中移除磁碟)。
- 新增或移除特定於執行個體的有狀態中繼資料鍵/值組合。
- 為 MIG 中的執行個體個別設定 IP 位址,使其成為有狀態或無狀態。動態網路介面不支援 IP 位址的每個執行個體設定。
有狀態設定範例
以下是有狀態設定的範例:
這份圖表顯示:
- 執行個體範本會為 MIG 中的所有 VM 執行個體定義通用設定
- 有狀態政策會為具有裝置名稱
data-disk
的磁碟定義常見的有狀態設定,這些磁碟是由執行個體範本定義,並個別建立及附加至 MIG 中的每個 VM 執行個體。 - 每個執行個體的設定會為名為
node-1
的特定 VM 執行個體定義有狀態的設定。這會指定將現有磁碟my-legacy-1
附加至node-1
執行個體,並視為具狀態。此外,這項指令也會指定一個中繼資料鍵值,以保留node-1
執行個體的個別性:node-id:xyz273
。
建立 node-1
VM 時,MIG 會執行下列操作:
- 根據執行個體範本使用
n2-standard-2
機器類型。 - 根據執行個體範本,使用 Debian GNU/Linux 映像檔建立並連結開機磁碟,磁碟名稱為系統自動產生,裝置名稱為
boot-node-1
boot-disk
。由於啟動磁碟未在有狀態政策或每個執行個體設定中設定,因此 MIG 會將其視為無狀態。boot-node-1
- 根據執行個體範本,使用自訂映像檔建立並連結額外磁碟,磁碟名稱
data-disk-1
和裝置名稱data-disk
會自動產生。MIG 會將data-disk-1
額外磁碟視為具狀態,因為其裝置名稱是在具狀態政策中指定。 - 附加現有名為
my-legacy-1
的磁碟,並根據每個執行個體的設定使用裝置名稱legacy-disk
。MIG 會將my-legacy-1
額外磁碟視為具備狀態,因為其裝置名稱是在每個執行個體的設定中指定。 - 設定三組中繼資料鍵/值組合:兩組來自執行個體範本 (
app:example-stateful-app
、version:1.0
),一組來自每個執行個體的設定 (node-id:xyz273
)。MIG 會將node-id:xyz273
鍵/值組合視為有狀態,因為該組合是在每個執行個體的設定中指定。
重新建立 node-1
VM 時,假設相同的設定仍有效,MIG 會重新建立無狀態項目,並保留有狀態項目:
從原始映像檔重新建立開機磁碟:
首先,系統會刪除
boot-node-1
開機磁碟,然後根據執行個體範本的指定,從 Debian GNU/Linux 映像檔重新建立開機磁碟。保留其他磁碟、
data-disk-1
和my-legacy-1
:先卸離額外磁碟,再刪除 VM,然後在重新建立 VM 後,將磁碟連接至 VM。
保留個別中繼資料鍵/值組合
node-id:xyz273
:在 VM 重新建立後設定中繼資料。同時設定執行個體範本中的常見鍵/值組合 (
app:example-stateful-app
和version:1.0
)。
意見回饋
我們想要瞭解您的用途、難題和有關有狀態 MIG 的意見。歡迎前往以下網址,並與我們的團隊分享您的寶貴意見:mig-discuss@google.com。
後續步驟
- 請參閱「設定有狀態的 MIG」,瞭解如何保留代管執行個體中的執行個體名稱、永久磁碟和中繼資料,以支援有狀態的工作負載。
- 瞭解如何將現有工作負載遷移至有狀態的 MIG。
- 進一步瞭解有狀態的 MIG 如何運作。
- 進一步瞭解代管執行個體群組。
- 請參閱「使用代管型執行個體」。