本頁面說明如何在 Spanner 中移動執行個體。
您可以將 Spanner 執行個體從任何執行個體設定移至其他執行個體設定,包括在單區域、雙區域和多區域設定之間移動。移動執行個體不會造成停機,Spanner 也會繼續提供一般的交易保證,包括移動期間的同步一致。
您也可以將執行個體從來源執行個體設定,移至自訂執行個體設定 (例如具有 us-west2 唯讀副本的 nam3 基本設定)。由於您無法更新現有執行個體設定的拓撲,因此必須先使用所需拓撲建立新的自訂執行個體設定。建立新的自訂執行個體設定後,即可將執行個體從來源執行個體設定,移至新的自訂執行個體設定。
為何要移動 Spanner 執行個體?
遷移執行個體的好處包括:
- 提高可用性:從單一區域移至雙區域或多區域後,可用性可達 99.999%,且不會造成停機。
- 縮短延遲時間:透過從區域移至雙區域或多區域,或從多區域移至多區域,增加唯讀副本,縮短延遲時間並擴大地理涵蓋範圍。
- 降低成本:從雙區域或多區域設定改為區域設定,降低每小時費用。
- 共置資料庫:將執行個體移至更合適的位置,與用戶端應用程式共置 Spanner 資料庫。
定價
移動執行個體時,來源和目的地執行個體設定都會產生每小時運算和儲存費用。移動作業完成後,系統會按照目的地設定向您收取執行個體儲存空間費用。
如果將執行個體移至新的單一區域、雙區域或多區域執行個體設定,可能需要支付傳出資料移轉費用。詳情請參閱「Spanner 定價」。
限制
- 執行個體必須至少有 1 個節點 (1, 000 個處理單元),才能移動。
- 您無法在專案或 Google Cloud 帳戶之間移動執行個體。
- 您無法將使用 Standard 版本的執行個體,直接從單一區域執行個體設定,移至雙區域或多區域執行個體設定。您必須先將執行個體升級至 Enterprise Plus 版本,才能移動執行個體。
- 如果任何執行個體資源上有使用區域服務端點的作用中要求,執行個體移動作業會影響所有使用區域端點的要求,因為區域強制執行會封鎖跨區域執行個體的存取權。使用全域端點的要求不受影響。
- Spanner 備份和備份排程僅適用於特定執行個體設定,不會在移動執行個體時一併移動。開始移動前,請務必刪除執行個體上所有現有的備份和備份排程。詳情請參閱「備份和備份排程」。
- 在執行個體移動期間,下列 API 會停用:
InstanceAdmin.DeleteInstanceInstanceAdmin.UpdateInstanceInstanceAdmin.CreateInstancePartitionInstanceAdmin.UpdateInstancePartitionInstanceAdmin.DeleteInstancePartitionDatabaseAdmin.CreateDatabaseDatabaseAdmin.UpdateDatabaseDdl(如果在要求中指定default_leader,則會停用)。DatabaseAdmin.RestoreDatabaseDatabaseAdmin.CreateBackupDatabaseAdmin.CreateBackupScheduleDatabaseAdmin.CopyBackup
- 如果資料庫有修改過的預設領導者,且該選項指定了目的地執行個體設定中的讀寫區域,且該設定為多區域,則會保留該選項。如果目的地設定為區域性,或不含指定讀寫區域,系統會清除預設主要節點選項。
- 移動執行個體會變更執行個體的執行個體設定屬性。如果您透過自動化方式管理 Spanner 資源,請務必做好準備,並解決可能發生的不一致問題。
- 舉例來說,如果您使用 Terraform 管理 Spanner 執行個體和資料庫,並啟用
terraform apply --auto-approve來保持資源同步,則在我們移動執行個體時,所有執行個體和子項資源都會遭到刪除。請據此更新設定,以免遭到刪除及遺失資料。如要進一步瞭解apply指令,請參閱「Terraform 套用選項」。
- 舉例來說,如果您使用 Terraform 管理 Spanner 執行個體和資料庫,並啟用
- 移動執行個體時,Spanner 監控指標和圖表可能會同時顯示來源和目的地執行個體設定中的資料,也可能只反映其中一個執行個體設定的效能。
- 如果您已設定開放原始碼自動配置工具,則不必停用該工具。失敗的原因是
InstanceAdmin.UpdateInstance(用於節點和處理單元變更) 已停用。 - 如果執行個體已啟用 Spanner 代管自動配置器功能,就無法移動。移動執行個體前,請將執行個體從代管自動調度資源切換為手動分配,並確保節點或處理單元數量足以支援 CPU 用量高峰 (例如執行
gcloud spanner instances update INSTANCE_ID --nodes=PEAK_NODES)。移動完成後,即可重新啟用代管自動配置器。 - 您無法移動 Spanner 免費試用執行個體。升級至付費執行個體後,即可移動執行個體。
- 如果執行個體使用地理區域分區,則移動執行個體時,只會移動預設執行個體分區,不會移動任何其他執行個體分區。
效能注意事項
移動執行個體時,讀寫延遲時間會增加,交易取消率也會提高。移動期間,CPU 使用率可能會上升至 100%,因為執行個體移動作業會使用您佈建的備用 CPU,並讓出給實際工作環境流量。不過,移動執行個體不會導致任何停機時間。移動執行個體所需的時間取決於多項因素,包括資料庫大小、節點數量和移動類型 (例如從區域到多區域)。
舉例來說,如要在 24 小時內完成移動作業,執行個體通常必須在移動作業前後和期間符合下列需求:
- 高優先順序 CPU 使用率:來源執行個體設定中低於 40%。詳情請參閱「CPU 使用率」。
- 每個節點的儲存空間:每個節點少於 1 Tebibyte (TiB)。
移動執行個體後,執行個體的效能會因執行個體設定的詳細資料而異。舉例來說,雙區域和多區域設定的寫入延遲時間通常比區域設定長,但讀取延遲時間較短。
備份和備份排程
移動執行個體時,執行個體原始設定中的備份和備份排程不會自動移至新的目的地設定。如果執行個體在開始移動時,有任何備份或備份排程 (包括預設備份排程),則無法開始移動執行個體。移動執行個體前,請先複製備份,並考量資料復原計畫。
如果執行個體原始設定中有需要保留的備份,建議您將備份複製到兩個小型 (100 PU) 臨時執行個體 placeholder-source 和 placeholder-dest:
placeholder-source:執行個體設定與移動執行個體的原始設定相同。這樣一來,如果您需要取消移動作業,就能將備份還原至原始設定。placeholder-dest:執行個體設定與目的地執行個體設定相同的執行個體。這樣一來,遷移作業完成後,您就能立即在新設定中使用備份。
還原功能不支援跨設定還原,因此這些預留位置執行個體非常重要,可在需要時快速復原或復原至新設定,在移動的執行個體發生問題時提供安全網。
將備份複製到 placeholder-source 和 placeholder-dest 後,您必須刪除移動執行個體上的所有現有備份和備份排程,才能開始移動 (如需確切指令,請參閱「將備份複製到預留位置執行個體,並刪除現有備份和備份排程」)。接著,在執行個體移動完成後,目的地設定中已有備份副本,您可以重新建立備份排程並建立新的備份。
只要採用這種做法,就能維持業務連續性,並盡可能減少執行個體移動期間的停機時間或資料遺失。
如何移動執行個體
您可以使用 Google Cloud 控制台或 gcloud CLI 移動執行個體。請按照下列四個階段,準備、執行、監控及完成執行個體遷移作業:
第 1 階段:準備遷移執行個體
移動執行個體前,請先詳閱「限制」和「效能考量」章節,然後完成這份移動前檢查清單中的每個步驟:
確認權限、版本和目的地配額:
- 確認執行移動作業的操作員具備移動執行個體的
spanner.instances.updateIAM 權限。 - 確認專案在目的地執行個體設定中,有足夠的節點配額可支援尖峰容量。詳情請參閱「Spanner 配額與限制」。
- 如要將 Standard 版執行個體從區域設定移至雙區域或多區域設定,請先升級至 Enterprise Plus 版。
- 確認執行移動作業的操作員具備移動執行個體的
驗證工作負載健康狀態、規劃用戶端位置,並在非正式環境中測試:
- 先移動與正式環境執行個體相同的非正式環境執行個體 (例如測試或預備環境),預估移動時間並觀察對工作負載的效能影響。
- 使用 Key Visualizer 確認資料庫中沒有熱點。在移動前解決熱點問題,有助於避免在複製資料時發生延遲時間增加和交易中止的情況。
- 如果目的地設定的預設主要區域與來源不同,移動後寫入延遲時間可能會增加。為避免這種情況,請規劃在目的地領導者區域內或附近,部署或轉送寫入密集型用戶端應用程式。
從代管自動調度資源切換至手動分配和大小,以便移動:
- 為確保移動作業在 24 小時內完成,並盡量減少延遲時間影響,請佈建足夠的運算資源,確保移動期間高優先順序 CPU 使用率峰值低於 40%,且每個節點的儲存空間低於 1 TiB。查看系統深入分析中的「CPU utilization」(CPU 使用率) 和「Total storage」(儲存空間總量) 圖表,判斷尖峰工作負載所需的節點數量。由於 Spanner 會使用閒置的 CPU 移動資料,因此增加運算能力可加快執行個體移動速度。您可以在正式生產前或測試環境中測試遷移作業,確認工作負載的理想運算容量。
如果執行個體已啟用代管自動配置器,您必須先將執行個體切換為手動分配,再開始移動。請根據您判斷所需的節點數量,將尖峰高優先順序 CPU 使用率維持在 40% 以下:
gcloud spanner instances update INSTANCE_ID \ --nodes=PEAK_NODES
-
建立「備份和備份排程」一節中討論的暫時
placeholder-source和placeholder-dest執行個體,並使用gcloud spanner backups copy指令將重要備份複製到這些執行個體:gcloud spanner backups copy \ --source-instance=INSTANCE_ID \ --source-backup=SOURCE_BACKUP_ID \ --destination-instance=PLACEHOLDER_INSTANCE_ID \ --destination-backup=DESTINATION_BACKUP_ID \ --expiration-date=EXPIRATION_DATE刪除移動中執行個體的備份前,請確認預留位置執行個體的所有備份複製作業皆已完成:
gcloud spanner operations list \ --instance=PLACEHOLDER_INSTANCE_ID \ --type=BACKUP刪除所有現有備份,並刪除移動執行個體中每個資料庫的所有備份排程:
gcloud spanner backups delete BACKUP_ID \ --instance=INSTANCE_IDgcloud spanner backup-schedules delete SCHEDULE_ID \ --instance=INSTANCE_ID \ --database=DATABASE_ID
匯出 Data Catalog 標記、暫停自動化作業,以及凍結執行個體和結構定義變更:
- 移動執行個體會刪除在 Data Catalog 中建立的所有執行個體標記。請先匯出標記,以便在移動後匯入。詳情請參閱「匯出及匯入標記」。
- 檢查 CI/CD 工作流程、排定的工作或 GitOps 存放區,找出管理 Spanner 資源的自動化基礎架構管道 (例如排定的
terraform apply --auto-approve執行作業),並暫停這些管道,以免與進行中的遷移作業發生衝突。 - 請通知貴組織,在遷移完成前,應暫停執行執行個體和結構定義變更 (包括節點數量更新、DDL 更新、資料庫建立或刪除,以及備份作業)。
僅限啟用 CMEK 的資料庫:驗證目的地地區和 Cloud Key Management Service (Cloud KMS) 金鑰:
檢查目的地執行個體設定,找出所有組成讀寫、唯讀和見證區域:
gcloud spanner instance-configs describe TARGET_CONFIG請確認您已在目的地設定的每個組成區域中佈建 Cloud KMS 金鑰,並將每個目標金鑰的
roles/cloudkms.cryptoKeyEncrypterDecrypterIdentity and Access Management (IAM) 角色授予 Spanner 服務代理。
如果執行個體符合這些遷移前規範,遷移作業通常會在 24 小時內完成。視資料庫大小和應用程式工作負載而定,完成時間可能較長或較短。
階段 2:開始移動執行個體
Google Cloud 控制台
前往 Google Cloud 控制台的「Instances」(執行個體) 頁面。
選取要移動的執行個體。
在「Instance overview」(執行個體總覽) 頁面中,按一下「Configuration」(設定) 旁邊的 「Move instance to a new configuration」(讓執行個體改用新的設定)。
在「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、regional-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 資料庫的執行個體
移動含有已啟用 CMEK 資料庫的執行個體前,請詳閱下列使用注意事項:
- 如果要移動的執行個體中有多個已啟用 CMEK 的資料庫,則必須為每個資料庫指定
--target-database-move-configs。您可以為每個資料庫使用相同的金鑰,但必須為每個啟用 CMEK 的資料庫指定金鑰。 - 金鑰必須涵蓋目的地執行個體設定中的所有區域,且 Spanner 服務代理必須具備各個目標金鑰的
roles/cloudkms.cryptoKeyEncrypterDecrypterIAM 角色。舉例來說,如果目的地執行個體設定位於nam3,則必須在us-east4、us-east1和us-central1中設定金鑰。 - 移動執行個體時,無法為未啟用 CMEK 的資料庫設定 Cloud KMS 金鑰。
- 移動執行個體時,請勿停用、刪除、輪替或撤銷來源或目的地執行個體設定中 CMEK 金鑰的 IAM 權限。否則會導致移動作業停滯,並可能無法存取資料庫。
使用 gcloud spanner instances move 指令,移動含有 CMEK 資料庫的執行個體。您必須在指令中加入 --target-database-move-configs 旗標和 Cloud KMS 金鑰值,或使用必要的 Cloud KMS 金鑰設定 JSON 或 YAML 檔案:
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 和 Cloud KMS 金鑰設定 CONFIG_FILE_PATH 檔案。下列設定檔範例包含兩個資料庫 database-1 和 database-2 的 Cloud KMS 金鑰,並在 us-east4、us-east1 和 us-central1 中使用相同金鑰,涵蓋 nam3 中的所有區域:
[
{
"database-id": "database-1",
"kms-key-names": "projects/PROJECT_ID/locations/us-east4/keyRings/KEY_RING/cryptoKeys/KEY_NAME,projects/PROJECT_ID/locations/us-east1/keyRings/KEY_RING/cryptoKeys/KEY_NAME,projects/PROJECT_ID/locations/us-central1/keyRings/KEY_RING/cryptoKeys/KEY_NAME"
},
{
"database-id": "database-2",
"kms-key-names": "projects/PROJECT_ID/locations/us-east4/keyRings/KEY_RING/cryptoKeys/KEY_NAME,projects/PROJECT_ID/locations/us-east1/keyRings/KEY_RING/cryptoKeys/KEY_NAME,projects/PROJECT_ID/locations/us-central1/keyRings/KEY_RING/cryptoKeys/KEY_NAME"
}
]
階段 3:監控執行個體遷移作業
您可以使用 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 資訊主頁,在執行個體移動期間顯示及監控指標。移動執行個體是長時間執行的作業,可能會影響服務。
資訊主頁中的「Total storage」(儲存空間總量) 和「Total database storage by databases」(各資料庫的資料庫儲存空間總量) 圖表,有助於監控遷移進度。您會看到來源設定中的儲存空間逐漸減少,而目的地設定中的儲存空間則會增加。
Google Cloud 控制台
- 下載
move-instance-dashboard.json檔案。這個檔案包含在 Monitoring 中填入自訂資訊主頁所需的資訊。 -
在 Google Cloud 控制台中,前往「 Dashboards」頁面:
如果您是使用搜尋列尋找這個頁面,請選取子標題為「Monitoring」的結果。
- 在「資訊主頁總覽」頁面,點選「建立資訊主頁」。
- 在資訊主頁工具列中,按一下「Dashboard settings」(資訊主頁設定) 下拉式選單。然後依序選取「JSON」和「JSON Editor」(JSON 編輯器)。
- 在「JSON Editor」(JSON 編輯器) 窗格中,複製下載的
move-instance-dashboard.json檔案內容,然後貼到編輯器中。 - 如要將變更套用至資訊主頁,請按一下「套用變更」。如果不想使用這個資訊主頁,請返回「Dashboards Overview」(資訊主頁總覽) 頁面。
- 建立資訊主頁後,按一下「Add Filter」(新增篩選器)。接著,選取
project_id或instance_id,監控執行個體遷移進度。
gcloud CLI
- 下載
move-instance-dashboard.json檔案。這個檔案包含在 Monitoring 中填入自訂資訊主頁所需的資訊。 如要在專案中建立資訊主頁,請使用
gcloud monitoring dashboards create指令:gcloud monitoring dashboards create --config-from-file=move-instance-dashboard.json詳情請參閱
gcloud monitoring dashboards create參考資料。
階段 4:完成遷移後工作
長時間執行的移動作業完成後 (done: true),請完成下列移動後檢查清單,還原作業設定:
- 重新啟用代管自動配置器:如果您在移動前,從代管自動調整資源配置切換為手動分配,請重新啟用代管自動配置器,並設定運算容量上下限 (例如使用自動調整資源配置旗標執行
gcloud spanner instances update INSTANCE_ID,或在 Google Cloud 控制台執行)。 - 重新建立備份排程並建立備份:重新建立備份排程,並在目的地執行個體設定中為資料庫建立新的備份。
- 匯入 Data Catalog 標記:如果您在移動前匯出了 Data Catalog 標記,請將這些標記匯回移動後的執行個體。
- 更新自動化設定、用戶端位置和下游工作負載:
- 如果您使用 Terraform 等自動化工具管理 Spanner 資源,請先更新設定檔,反映新的目的地執行個體設定,再重新啟用自動部署。
- 如果主要區域在移動後有所變更,請在新的主要區域內或附近部署或轉送用戶端應用程式 (如果使用雙區域或多區域設定,請修改資料庫預設主要區域),盡可能縮短寫入延遲時間,並確認下游應用程式和管道的連線能力和延遲時間。
- 刪除暫時預留位置執行個體:驗證移動的執行個體,並在目的地設定中建立新的備份後,如果不再需要複製的備份,請刪除暫時的
placeholder-source和placeholder-dest執行個體。
如何取消執行個體移動作業
您只能取消進行中的執行個體遷移作業。如要還原已完成的執行個體遷移作業,必須啟動新的遷移作業。
您可以使用 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 區域和可用區。