本文說明在 Compute Engine 上設計彈性系統的最佳做法。提供常用建議,提及 Compute Engine 的部分功能,有助於減少執行個體停機時間,並為 Compute Engine 執行個體發生意外錯誤的狀況做好準備。
完善可靠的系統能夠承受一定量的故障或中斷情況,而不會干擾服務或影響使用者的服務使用體驗。Compute Engine 會盡力避免發生此類中斷情況,但某些事件無法預測,因此最好預先針對此類事件做好準備。
故障類型
由於系統或硬體故障,您可能會遺失一或多個運算執行個體。以下列出幾種可減輕影響的失敗情況:
未預期的單一執行個體故障
由於硬體或系統故障而造成單一執行個體意外故障。為了避免發生這種狀況,請使用永久磁碟和開機指令碼來儲存資料,並在重新啟動 VM 後重新啟用軟體。
未預期的單一 VM 重新啟動
有時會碰到單一 VM 意外故障並重新啟動的狀況。與意外的單一 VM 故障不同,Compute Engine 會在 VM 故障後自動重新啟動。為避免發生這種狀況,請備份資料、使用 Hyperdisk 或永久磁碟 ,並使用開機指令碼快速重新設定軟體。
區域或地區性故障
區域和地區故障相當少見,這類情況可能會導致您在指定區域或地區中的所有執行個體皆無法存取或失效。為了避免發生這種故障狀況,請建立跨地區或區域的多元性,並實作負載平衡,此外也請跨多個區域備份資料或複製磁碟。
設計具備韌性系統的訣竅
為減少運算執行個體故障,請設計可防範故障、網路中斷和非預期災難等各種問題的應用程式。彈性系統可順利處理故障狀況,例如將無法存取的執行個體流量重新導向至正常的執行個體,或是在重新啟動時自動執行工作。
以下提供一些一般訣竅,協助您設計可抵禦故障的彈性系統。
使用即時遷移
Google Cloud 定期維護基礎架構,包括使用最新軟體修補系統、執行例行測試和預防性維護,以及確保基礎架構盡可能安全、快速且有效率。Compute Engine 採用即時遷移的方式,確保在預設情況下,基礎架構的維護工作對運算執行個體而言是開放的。
即時遷移技術可將執行中的執行個體搬離即將進行維護工作的系統。Compute Engine 會自動為支援的執行個體類型執行這項作業。
執行即時遷移作業時,執行個體可能會在短時間內效能下降。如果執行個體需要持續發揮最高效能,您可以設定在其他主機上重新啟動執行個體,而不是進行即時遷移。如果您選擇這個選項,Compute Engine 會停止執行個體,然後在未參與維護事件的主機上重新啟動執行個體。如果整體應用程式也專門用於處理執行個體故障或重新啟動情形,就適合終止並重新啟動執行個體。
如要設定執行個體執行即時遷移,或是將其設為重新啟動而非遷移,請參閱為 Compute 執行個體設定主機維護政策。
發佈執行個體
跨多個區域和可用區建立執行個體,這樣一來,如果包含其中一個執行個體的可用區或區域發生中斷,您就能指向替代的運算執行個體。如果您在同一個區域或地區中建立所有執行個體,一旦該區域或地區無法連線,您就無法存取任何執行個體。
使用區域特定的內部 DNS 名稱
將專案或機構的預設內部 DNS 類型設為區域性 DNS。在應用程式中存取其他運算執行個體時,請使用區域 DNS 名稱。內部 DNS 伺服器分佈於所有區域,因此可使用區域 DNS 名稱來執行解析,即使其在其他位置發生故障亦然。
全域 DNS 的彈性較差,因為單點故障會導致服務中斷。區域 DNS 可降低跨區域服務中斷的風險。區域 DNS 不要求專案中所有區域的執行個體名稱必須不重複,因此可加快執行個體建立速度。
如要查看執行個體使用區域 DNS 名稱還是全域 DNS 名稱,請參閱判斷 VM 的內部 DNS 名稱。
如果專案使用全域 DNS 名稱,您可以改用區域 DNS 名稱。詳情請參閱「將區域 DNS 用於內部 DNS 類型」一文。
建立 VM 群組
使用代管執行個體群組建立同質性的 VM 群組,當單一 VM 發生不良情形時,負載平衡器可將流量導向多個 VM。
代管執行個體群組 (MIG) 也提供自動調度資源和自動修復等功能。自動調度資源功能可根據特定信號,上下調整 VM 的數量,以便處理尖峰流量。自動修復功能會執行健康狀態檢查,並在必要時自動重新建立健康狀態不良的 VM。
代管執行個體群組也適用於地區,因此可在單一地區中建立發布至多個區域的 VM 群組。詳情請參閱「建立及管理區域 MIG」。
使用負載平衡
Google Cloud 提供負載平衡服務,有助於支援流量龐大的時期,而不會導致運算執行個體超載。使用 Cloud Load Balancing,您可以執行下列操作:
使用區域性 MIG,將應用程式部署到多個區域中的 VM。 接下來可建立轉送規則,將流量散佈到該地區中所有區域裡的全部 VM 上。每條轉送規則皆可使用外部 IP 位址來定義應用程式的進入點。
使用全域負載平衡跨多個地區部署 VM。 HTTP(S) 負載平衡可讓流量進入 Google Cloud 系統中最接近用戶端的位置。跨地區負載平衡可提供備援功能,在無法連上地區時,系統會自動將流量導向至其他地區。這樣一來,您就能使用相同的外部 IP 位址維持服務。
使用自動調度資源功能,可根據負載的增減,自動新增或刪除 MIG 中的 VM。
此外,Cloud Load Balancing 還提供 VM 健康狀態檢查功能,可協助偵測和處理 VM 故障狀況。
使用啟動與關閉指令碼
Compute Engine 提供啟動及關閉指令碼,分別在執行個體開機或關機時執行。開機和關機指令碼可自動執行安裝軟體、執行更新、製作備份及記錄資料等工作。
啟動和關閉指令碼可讓您有效率地啟動或徹底關閉執行個體,是相當重要的一種方式。相較於使用自訂映像檔來設定執行個體,使用啟動指令碼來設定執行個體是較好的做法。
啟動指令碼會在執行個體發生錯誤而重開機或重新啟動時執行,也可用於安裝及更新軟體。您也可以使用開機指令碼,確保服務在執行個體中正常運作。比起弄清楚自訂映像檔上有哪些檔案或位元組發生變化,將異動部分寫進啟動指令碼來設定執行個體的做法,還比較輕鬆簡單。
關機指令碼會在執行個體關機時執行,無論是否刻意為之。關閉指令碼可執行備份資料、儲存記錄等最後時刻的工作,並可在停止執行個體前順利關閉連線。
備份資料
請定期將您的資料備份至多個位置。您可以將檔案上傳至 Cloud Storage、建立磁碟快照,或是使用同步複製將資料複製到其他區域的磁碟,或使用非同步複製將資料複製到其他地區。