移動執行個體

本頁說明如何在 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 適用選項」。
  • 執行個體遷移期間,Spanner 監控指標和圖表可能會顯示來源和目的地執行個體設定的資料,也可能只反映其中一個執行個體設定的效能。
  • 如果您已設定開放原始碼的 Autoscaler 工具,則不需要停用。由於 InstanceAdmin.UpdateInstance (用於節點和處理單元變更) 已停用,因此作業會失敗。
  • 如果執行個體已啟用 Spanner 代管自動調度資源功能,就無法移動。如要移動執行個體,請停用代管自動調度器、移動執行個體,然後重新啟用代管自動調度器。
    • 此外,如果您使用自動調度資源,則必須根據建議的最大值佈建足夠的節點,以因應 CPU 使用率高峰,然後在移動執行個體前停用自動調度資源。
  • 您無法移動 Spanner 免費試用執行個體升級至付費執行個體後,即可移動執行個體。

效能注意事項

執行個體遷移時,讀寫延遲時間會變長,交易中止率也會提高。在遷移期間,CPU 使用率可能會高達 100%,因為執行個體遷移作業是使用使用者佈建的備用 CPU 進行。不過,移動執行個體不會導致任何停機時間。遷移執行個體所需時間取決於多項因素,包括資料庫大小、節點數量和遷移類型 (例如從單一區域遷移至多區域)。

執行個體遷移後,執行個體的效能會因執行個體設定的詳細資料而異。舉例來說,雙區域多區域設定的寫入延遲時間通常較長,讀取延遲時間則較短,區域設定則相反。

備份

遷移執行個體時,來源執行個體中的備份不會自動移至新的目標設定。如果啟動執行個體遷移作業時,來源執行個體設定中存在備份,系統會中止執行個體遷移作業。請務必複製備份資料,並在遷移執行個體前考慮資料復原計畫

如果來源執行個體中有需要保留的備份,建議您複製備份到目的地執行個體設定,以及與要遷移的來源執行個體設定相同的另一個執行個體。如此一來:

  • 執行個體遷移完成後,您就能立即將備份複製到目標執行個體設定。
  • 如要取消執行個體遷移作業,您也可以從與來源執行個體設定相同的執行個體快速還原備份。

將備份複製到其他執行個體後,您必須先刪除來源執行個體中的所有現有備份,才能移動執行個體。然後,執行個體遷移完成後,您就會在目標設定中看到備份副本。你也可以建立新的備份

如要進一步瞭解如何複製備份資料和相關費用,請參閱「複製備份資料」。

如何移動執行個體

您可以使用 Google Cloud 控制台 Cloud Shell 和 gcloud CLI,透過 gcloud 指令移動執行個體。

必要條件

移動執行個體設定前,請務必詳閱「限制」和「效能注意事項」一節。然後按照下列步驟操作:

  1. 確認您在來源執行個體上具備 spanner.instances.update IAM 權限
  2. 如適用,請先遷移非正式環境執行個體 (例如測試和暫存),再遷移正式環境執行個體,有助於評估及瞭解執行個體遷移期間對工作負載的效能影響。
  3. 遷移 Spanner 執行個體時,遷移程序會刪除您在資料目錄中建立的執行個體標記。如要保留代碼,您必須在遷移前匯出代碼,並在遷移後匯入代碼。詳情請參閱匯出及匯入代碼

如要瞭解最佳做法,請參閱下列指南:

  • 在遷移實際工作環境執行個體之前,請先在目標執行個體設定的非實際工作環境執行個體中,測試效能工作負載。您可以先移動與實際工作環境執行個體類似的測試執行個體,瞭解移動實際工作環境執行個體需要多少時間。
  • 使用 Key Visualizer 檢查資料庫中是否沒有熱點。
  • 請檢查目標執行個體設定中的節點配額是否足夠,可支援執行個體預期的尖峰用量。詳情請參閱「Spanner 配額與限制」。
  • 請確認您要遷移的執行個體設定,其尖峰 CPU 使用率低於 40%,且每個節點的儲存空間量少於 1 Tebibyte (TiB)。
  • 遷移期間請勿變更執行個體。包括變更執行個體節點計數、變更資料庫結構定義、建立或捨棄資料庫,以及建立或刪除備份。

如果按照這些建議遷移執行個體,遷移作業通常會在 24 小時內完成。不過,視應用程式工作負載而定,完成時間可能會更長或更短。

移動執行個體

Google Cloud 控制台

  1. 前往 Google Cloud 控制台的「Instances」(執行個體) 頁面。

    執行個體

  2. 選取要移動的執行個體。

  3. 在「執行個體總覽」頁面中,按一下「設定」旁的「編輯」,然後點選「將執行個體移至新設定」

  4. 在「Move database to new configuration」(將資料庫移至新設定) 窗格中,選取執行個體的新執行個體設定。

  5. 按一下 [儲存]

gcloud CLI

使用 gcloud spanner instances move 指令移動執行個體。

gcloud spanner instances move INSTANCE_ID \
--target-config=TARGET_CONFIG

更改下列內容:

  • INSTANCE_ID:要移動的執行個體永久 ID。
  • TARGET_CONFIG:您要將執行個體移至的執行個體設定永久 ID。執行個體的新地理位置。這可能是區域、雙區域或多區域執行個體設定 (例如 nam3us-central1custom-nam3-us-west2)。

舉例來說,如要將執行個體 test-instance 從目前的執行個體設定移至 nam3,請執行下列指令:

  gcloud spanner instances move test-instance --target-config=nam3

選用:如要在 us-west2 地區新增唯讀備用資源,並加入 nam3 的基礎執行個體設定,請按照下列步驟操作:

  1. 複製基礎設定,然後將唯讀備用資源新增至新的自訂執行個體設定 custom-nam3-us-west2

    gcloud spanner instance-configs create custom-nam3-us-west2 \
    --clone-config=nam3 --add-replicas=location=us-west2, type=READ_ONLY
    
  2. 將執行個體從目前的執行個體設定 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-east4us-east1us-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-1database-2) 的 KMS 金鑰,且 us-east4us-east1us-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。

  1. 執行下列指令,取得執行個體遷移作業的作業 ID:

    gcloud spanner operations list --instance="INSTANCE_ID"
    

    更改下列內容:

    • INSTANCE_ID:要移動的執行個體永久 ID。

    輸出內容會顯示長時間執行的作業清單,包括執行個體遷移作業。

  2. 執行 gcloud spanner operations describe 指令,查看進度百分比和狀態:

    gcloud spanner operations describe OPERATION_ID --instance=INSTANCE_ID
    

    更改下列內容:

    • OPERATION_ID:要檢查的執行個體移動作業 ID。
    • INSTANCE_ID:要檢查的執行個體 ID。

監控執行個體移動作業

您可以建立自訂 Cloud Monitoring 資訊主頁,在執行個體遷移期間顯示及監控指標。這項長時間執行的作業可能會影響服務。

資訊主頁中的「儲存空間總用量」和「各資料庫的資料庫儲存空間總用量」圖表,有助於監控遷移進度。您會發現來源設定中的儲存空間逐漸減少,而目的地設定中的儲存空間則會增加。

Google Cloud 控制台

  1. 下載 move-instance-dashboard.json 檔案。這個檔案包含在「監控」中填入自訂資訊主頁所需的資訊。
  2. 在 Google Cloud 控制台中,前往「Dashboards」(資訊主頁)  頁面:

    前往「Dashboards」(資訊主頁)

    如果您是使用搜尋列尋找這個頁面,請選取子標題為「Monitoring」的結果

  3. 在「資訊主頁總覽」頁面中,按一下「建立資訊主頁」
  4. 在資訊主頁工具列中,按一下「資訊主頁設定」下拉式選單。然後選取「JSON」,接著選取「JSON 編輯器」
  5. 在「JSON 編輯器」窗格中,複製您下載的 move-instance-dashboard.json 檔案內容,然後貼到編輯器中。
  6. 如要將變更套用至資訊主頁,請按一下「套用變更」。如不想使用這個資訊主頁,請返回「資訊主頁總覽」頁面。
  7. 建立資訊主頁後,按一下「新增篩選器」。然後選取 project_idinstance_id,監控執行個體遷移作業的進度。

gcloud CLI

  1. 下載 move-instance-dashboard.json 檔案。這個檔案包含在「監控」中填入自訂資訊主頁所需的資訊。
  2. 如要在專案中建立資訊主頁,請使用 gcloud monitoring dashboards create 指令:

    gcloud monitoring dashboards create --config-from-file=move-instance-dashboard.json
    

    詳情請參閱 gcloud monitoring dashboards create 參考資料。

如何取消執行個體遷移作業

您只能取消仍在進行中的執行個體遷移作業。如要還原已完成的執行個體遷移作業,請重新啟動遷移作業。

您可以使用 gcloud spanner operations cancel 取消執行個體移動作業。取消作業不會立即完成,所需時間大約與移動作業開始後經過的時間相同。這是因為資料必須移回來源執行個體設定。

這項指令需要進行中執行個體移動作業的作業 ID。

  1. 執行下列指令來取得作業 ID:

    gcloud spanner operations list --type=INSTANCE --instance="INSTANCE_ID"
    --filter="done:False AND metadata.@type:MoveInstanceMetadata
    

    更改下列內容:

    • INSTANCE_ID:要移動的執行個體永久 ID。

    輸出內容會顯示進行中的執行個體遷移作業清單。

  2. 執行 gcloud spanner operations cancel 指令,取消執行個體遷移作業:

    gcloud spanner operations cancel OPERATION_ID
    

    更改下列內容:

    • OPERATION_ID:要取消的執行個體移動作業的作業 ID。

後續步驟