本頁說明如何在 Spanner 中移動執行個體。
您可以將 Spanner 執行個體從任何執行個體設定移至任何其他執行個體設定,包括在單區域、雙區域和多區域設定之間移動。遷移執行個體不會造成停機,Spanner 在遷移期間也會繼續提供交易保證,包括強烈一致性。
您也可以將執行個體從來源執行個體設定移至自訂執行個體設定 (例如,具有 us-west2
唯讀副本的 nam3
基本設定)。由於您無法更新現有執行個體設定的拓撲,因此必須先建立具有所需拓撲的新自訂執行個體設定。建立新的自訂執行個體設定後,您可以將執行個體從來源執行個體設定移至新的自訂執行個體設定。
為什麼要遷移 Spanner 執行個體?
遷移執行個體的好處包括:
- 提高可用性:從區域移至雙區域或多區域後,即可享有 99.999% 的可用性,且不會發生停機情形。
- 減少延遲時間:透過從區域移至雙區域或多區域,或從多區域移至多區域,使用額外的唯讀副本減少延遲時間,並擴大地理涵蓋範圍。
- 降低成本:從雙區域或多區域設定改為區域設定,即可降低每小時費用。
- 共置資料庫:將執行個體移至更合適的位置,與用戶端應用程式共置 Spanner 資料庫。
定價
移動執行個體時,來源和目標執行個體設定都會產生每小時的運算和儲存空間費用。 遷移作業完成後,系統會按照目標設定的價格,向您收取執行個體儲存空間的費用。
如果將執行個體移至新的單一區域、雙區域或多區域執行個體設定,可能需要支付輸出資料傳輸費用。詳情請參閱「Spanner 定價」。
限制
- 如要遷移執行個體,該執行個體必須至少有 1 個節點 (1, 000 個處理單元)。
- 您無法在專案和帳戶之間轉移執行個體。 Google Cloud
- 如果執行個體使用 Standard 版,您無法直接從區域執行個體設定移至雙區域或多區域執行個體設定。您必須先升級執行個體版本至 Enterprise Plus 版,然後才能移動執行個體。
- 如果您在任何執行個體資源上,使用區域服務端點發出有效要求,執行個體遷移作業會影響所有使用區域端點的要求,因為區域強制執行作業會封鎖跨區域執行個體的存取權。使用全域端點的要求不受影響。
- Spanner 備份是執行個體設定專屬的備份,因此移動執行個體時不會一併移動。詳情請參閱「備份」一文。
- 執行執行個體遷移作業時,下列 API 會停用:
InstanceAdmin.DeleteInstance
InstanceAdmin.UpdateInstance
DatabaseAdmin.CreateDatabase
DatabaseAdmin.UpdateDatabaseDdl
(如果要求中指定了default_leader
,則會停用此選項)。DatabaseAdmin.RestoreDatabase
DatabaseAdmin.CreateBackup
DatabaseAdmin.CreateBackupSchedule
DatabaseAdmin.CopyBackup
- 如果資料庫有修改過的預設主要地區,且目的地執行個體設定中指定了讀取/寫入地區,且該設定為多區域,則系統會保留所選地區。如果目的地設定為區域性,或不包含具名的讀寫區域,系統會清除預設主要區域選取項目。
- 移動執行個體會變更執行個體的執行個體設定屬性。如果您透過自動化方式管理 Spanner 資源,請務必準備並解決可能發生的任何不一致問題。
- 舉例來說,如果您使用 Terraform 管理 Spanner 執行個體和資料庫,並啟用
terraform apply --auto-approve
讓資源保持同步,當我們移動執行個體時,所有執行個體和子項資源都會遭到刪除。請據此更新設定,以免遭到刪除及資料遺失。如要進一步瞭解apply
指令,請參閱「Terraform 適用選項」。
- 舉例來說,如果您使用 Terraform 管理 Spanner 執行個體和資料庫,並啟用
- 執行個體遷移期間,Spanner 監控指標和圖表可能會顯示來源和目的地執行個體設定的資料,也可能只反映其中一個執行個體設定的效能。
- 如果您已設定開放原始碼的 Autoscaler 工具,則不需要停用。由於
InstanceAdmin.UpdateInstance
(用於節點和處理單元變更) 已停用,因此作業會失敗。 - 如果執行個體已啟用 Spanner 代管自動調度資源功能,就無法移動。如要移動執行個體,請停用代管自動調度器、移動執行個體,然後重新啟用代管自動調度器。
- 此外,如果您使用自動調度資源,則必須根據建議的最大值佈建足夠的節點,以因應 CPU 使用率高峰,然後在移動執行個體前停用自動調度資源。
- 您無法移動 Spanner 免費試用執行個體。 升級至付費執行個體後,即可移動執行個體。
效能注意事項
執行個體遷移時,讀寫延遲時間會變長,交易中止率也會提高。在遷移期間,CPU 使用率可能會高達 100%,因為執行個體遷移作業是使用使用者佈建的備用 CPU 進行。不過,移動執行個體不會導致任何停機時間。遷移執行個體所需時間取決於多項因素,包括資料庫大小、節點數量和遷移類型 (例如從單一區域遷移至多區域)。
執行個體遷移後,執行個體的效能會因執行個體設定的詳細資料而異。舉例來說,雙區域和多區域設定的寫入延遲時間通常較長,讀取延遲時間則較短,區域設定則相反。
備份
遷移執行個體時,來源執行個體中的備份不會自動移至新的目標設定。如果啟動執行個體遷移作業時,來源執行個體設定中存在備份,系統會中止執行個體遷移作業。請務必複製備份資料,並在遷移執行個體前考慮資料復原計畫。
如果來源執行個體中有需要保留的備份,建議您複製備份到目的地執行個體設定,以及與要遷移的來源執行個體設定相同的另一個執行個體。如此一來:
- 執行個體遷移完成後,您就能立即將備份複製到目標執行個體設定。
- 如要取消執行個體遷移作業,您也可以從與來源執行個體設定相同的執行個體快速還原備份。
將備份複製到其他執行個體後,您必須先刪除來源執行個體中的所有現有備份,才能移動執行個體。然後,執行個體遷移完成後,您就會在目標設定中看到備份副本。你也可以建立新的備份。
如要進一步瞭解如何複製備份資料和相關費用,請參閱「複製備份資料」。
如何移動執行個體
您可以使用 Google Cloud 控制台 Cloud Shell 和 gcloud CLI,透過 gcloud
指令移動執行個體。
必要條件
移動執行個體設定前,請務必詳閱「限制」和「效能注意事項」一節。然後按照下列步驟操作:
- 確認您在來源執行個體上具備
spanner.instances.update
IAM 權限。 - 如適用,請先遷移非正式環境執行個體 (例如測試和暫存),再遷移正式環境執行個體,有助於評估及瞭解執行個體遷移期間對工作負載的效能影響。
- 遷移 Spanner 執行個體時,遷移程序會刪除您在資料目錄中建立的執行個體標記。如要保留代碼,您必須在遷移前匯出代碼,並在遷移後匯入代碼。詳情請參閱匯出及匯入代碼。
如要瞭解最佳做法,請參閱下列指南:
- 在遷移實際工作環境執行個體之前,請先在目標執行個體設定的非實際工作環境執行個體中,測試效能工作負載。您可以先移動與實際工作環境執行個體類似的測試執行個體,瞭解移動實際工作環境執行個體需要多少時間。
- 使用 Key Visualizer 檢查資料庫中是否沒有熱點。
- 請檢查目標執行個體設定中的節點配額是否足夠,可支援執行個體預期的尖峰用量。詳情請參閱「Spanner 配額與限制」。
- 請確認您要遷移的執行個體設定,其尖峰 CPU 使用率低於 40%,且每個節點的儲存空間量少於 1 Tebibyte (TiB)。
- 遷移期間請勿變更執行個體。包括變更執行個體節點計數、變更資料庫結構定義、建立或捨棄資料庫,以及建立或刪除備份。
如果按照這些建議遷移執行個體,遷移作業通常會在 24 小時內完成。不過,視應用程式工作負載而定,完成時間可能會更長或更短。
移動執行個體
Google Cloud 控制台
前往 Google Cloud 控制台的「Instances」(執行個體) 頁面。
選取要移動的執行個體。
在「執行個體總覽」頁面中,按一下「設定」旁的「編輯」,然後點選「將執行個體移至新設定」。
在「Move database to new configuration」(將資料庫移至新設定) 窗格中,選取執行個體的新執行個體設定。
按一下 [儲存]。
gcloud CLI
使用 gcloud spanner instances move
指令移動執行個體。
gcloud spanner instances move INSTANCE_ID \
--target-config=TARGET_CONFIG
更改下列內容:
- INSTANCE_ID:要移動的執行個體永久 ID。
- TARGET_CONFIG:您要將執行個體移至的執行個體設定永久 ID。執行個體的新地理位置。這可能是區域、雙區域或多區域執行個體設定 (例如
nam3
、us-central1
或custom-nam3-us-west2
)。
舉例來說,如要將執行個體 test-instance
從目前的執行個體設定移至 nam3
,請執行下列指令:
gcloud spanner instances move test-instance --target-config=nam3
選用:如要在 us-west2
地區新增唯讀備用資源,並加入 nam3
的基礎執行個體設定,請按照下列步驟操作:
複製基礎設定,然後將唯讀備用資源新增至新的自訂執行個體設定
custom-nam3-us-west2
:gcloud spanner instance-configs create custom-nam3-us-west2 \ --clone-config=nam3 --add-replicas=location=us-west2, type=READ_ONLY
將執行個體從目前的執行個體設定
test-instance
移至這個新的custom-nam3-us-west2
執行個體設定:gcloud spanner instances move test-instance --target-config=custom-nam3-us-west2
選用:移動已啟用 CMEK 資料庫的執行個體
使用 gcloud spanner instances move
指令,移動已啟用 CMEK 的資料庫執行個體。您必須在指令中加入 --target-database-move-configs
標記和 KMS 金鑰值,或使用必要的 KMS 金鑰設定 JSON 或 YAML 檔案。
使用須知:
- 如果執行個體中有多個啟用 CMEK 的資料庫要遷移,則必須為每個資料庫指定
-—target-database-move-configs
。您可以為每個資料庫使用相同的金鑰,但必須為每個啟用 CMEK 的資料庫指定金鑰。 - 金鑰必須涵蓋目標執行個體設定中的所有區域。舉例來說,如果目的地執行個體設定位於
nam3
,則您必須在us-east4
、us-east1
和us-central1
中設定金鑰。 - 遷移執行個體時,您無法為未啟用 CMEK 的資料庫設定 KMS 金鑰。
- 在移動執行個體時,請勿在來源或目的地執行個體設定中停用或刪除 CMEK 金鑰。如果你嘗試這麼做,系統不會繼續遷移。
gcloud spanner instances move INSTANCE_ID \
--target-config=TARGET_CONFIG \
--target-database-move-configs=^:^database-id=DATABASE_ID_1:kms-key-names=KMS_KEY_1[, KMS_KEY_2 ... ] \
[--target-database-move-configs=^:^database-id=DATABASE_ID_2:kms-key-names=KMS_KEY_1 ... ]
或
gcloud spanner instances move INSTANCE_ID \
--target-config=TARGET_CONFIG \
--target-database-move-configs=CONFIG_FILE_PATH
使用資料庫 ID 和 KMS 金鑰設定 CONFIG_FILE_PATH 檔案。下列設定檔範例包含兩個資料庫 (database-1
和 database-2
) 的 KMS 金鑰,且 us-east4
、us-east1
和 us-central1
中的金鑰相同,涵蓋 nam3
中的所有區域。
[
{
database-id: database-1,
kms-key-names:
"projects/[your-project]/locations/us-east4/keyRings/[your-keyring]/cryptoKeys/[your-key],projects/[your-project]/locations/us-east1/keyRings/[your-keyring]/cryptoKeys/[your-key],projects/[your-project]/locations/us-central1/keyRings/[your-keyring]/cryptoKeys/[your-key]",
},
{
database-id: database-2,
kms-key-names:
"projects/[your-project]/locations/us-east4/keyRings/[your-keyring]/cryptoKeys/[your-key],projects/[your-project]/locations/us-east1/keyRings/[your-keyring]/cryptoKeys/[your-key],projects/[your-project]/locations/us-central1/keyRings/[your-keyring]/cryptoKeys/[your-key]",
},
]
如何監控執行個體遷移和取消進度
您可以透過 gcloud spanner operations describe
監控執行個體遷移作業的進度,也可以建立自訂的 Cloud Monitoring 資訊主頁。
查看遷移和取消作業進度
如要追蹤執行個體遷移或取消遷移作業的進度,請使用 gcloud spanner operations describe
指令。這項指令需要進行中執行個體移動作業的作業 ID。
執行下列指令,取得執行個體遷移作業的作業 ID:
gcloud spanner operations list --instance="INSTANCE_ID"
更改下列內容:
- INSTANCE_ID:要移動的執行個體永久 ID。
輸出內容會顯示長時間執行的作業清單,包括執行個體遷移作業。
執行
gcloud spanner operations describe
指令,查看進度百分比和狀態:gcloud spanner operations describe OPERATION_ID --instance=INSTANCE_ID
更改下列內容:
- OPERATION_ID:要檢查的執行個體移動作業 ID。
- INSTANCE_ID:要檢查的執行個體 ID。
監控執行個體移動作業
您可以建立自訂 Cloud Monitoring 資訊主頁,在執行個體遷移期間顯示及監控指標。這項長時間執行的作業可能會影響服務。
資訊主頁中的「儲存空間總用量」和「各資料庫的資料庫儲存空間總用量」圖表,有助於監控遷移進度。您會發現來源設定中的儲存空間逐漸減少,而目的地設定中的儲存空間則會增加。
Google Cloud 控制台
- 下載
move-instance-dashboard.json
檔案。這個檔案包含在「監控」中填入自訂資訊主頁所需的資訊。 -
在 Google Cloud 控制台中,前往「Dashboards」(資訊主頁)
頁面:
如果您是使用搜尋列尋找這個頁面,請選取子標題為「Monitoring」的結果。
- 在「資訊主頁總覽」頁面中,按一下「建立資訊主頁」。
- 在資訊主頁工具列中,按一下「資訊主頁設定」下拉式選單。然後選取「JSON」,接著選取「JSON 編輯器」。
- 在「JSON 編輯器」窗格中,複製您下載的
move-instance-dashboard.json
檔案內容,然後貼到編輯器中。 - 如要將變更套用至資訊主頁,請按一下「套用變更」。如不想使用這個資訊主頁,請返回「資訊主頁總覽」頁面。
- 建立資訊主頁後,按一下「新增篩選器」。然後選取
project_id
或instance_id
,監控執行個體遷移作業的進度。
gcloud CLI
- 下載
move-instance-dashboard.json
檔案。這個檔案包含在「監控」中填入自訂資訊主頁所需的資訊。 如要在專案中建立資訊主頁,請使用
gcloud monitoring dashboards create
指令:gcloud monitoring dashboards create --config-from-file=move-instance-dashboard.json
詳情請參閱
gcloud monitoring dashboards create
參考資料。
如何取消執行個體遷移作業
您只能取消仍在進行中的執行個體遷移作業。如要還原已完成的執行個體遷移作業,請重新啟動遷移作業。
您可以使用 gcloud spanner operations cancel
取消執行個體移動作業。取消作業不會立即完成,所需時間大約與移動作業開始後經過的時間相同。這是因為資料必須移回來源執行個體設定。
這項指令需要進行中執行個體移動作業的作業 ID。
執行下列指令來取得作業 ID:
gcloud spanner operations list --type=INSTANCE --instance="INSTANCE_ID" --filter="done:False AND metadata.@type:MoveInstanceMetadata
更改下列內容:
- INSTANCE_ID:要移動的執行個體永久 ID。
輸出內容會顯示進行中的執行個體遷移作業清單。
執行
gcloud spanner operations cancel
指令,取消執行個體遷移作業:gcloud spanner operations cancel OPERATION_ID
更改下列內容:
- OPERATION_ID:要取消的執行個體移動作業的作業 ID。
後續步驟
- 進一步瞭解 Spanner 的區域、雙區域和多區域設定。
- 進一步瞭解Google Cloud 地區和區域。