升級至新主要版本

第 2 代

Databases for MongoDB 提供兩種不同的升級路徑:

  • 就地升級至新主要版本(目前僅支援「MongoDB」標準方案)。
  • 從備份還原(適用於 MongoDB 標準方案、MongoDB 企業方案)。

就地進行主要版本升級

就地主要版本升級可讓您將部署升級至下一個新 主要版本,無需將 備份還原 至新的部署環境。 此方法可保留相同的連線字串,無需重新設定部署。 然而,若新主要版本需要對應用程式進行調整,則必須處理這些問題。

在原地主要版本升級期間(包含備份),部署環境將設定為 setUserWriteBlockMode,此模式僅允許對部署環境進行讀取操作,但不允許寫入操作,以確保升級過程的安全性。 一旦部署的主版本升級完成,writeBlockMode 將被移除。

執行就地主要版本升級時,有兩種選項:

  • 帶備份的原地主要版本升級:此方法會在執行實際升級前建立備份,提供額外的安全保障。

  • 不備份的就地主要版本升級:此選項將直接進行升級,不會事先建立備份。 若就地升級失敗,您將需要從最新的備份還原部署,並建立一個新的部署。

    不建議進行無備份的原地升級。 若升級在任何階段失敗,可能會導致資料遺失,因為屆時將沒有可立即用於還原的備份。

開始之前

在開始升級程序之前,請先考慮以下幾點。

  • 在升級之前,您的部署必須處於正常狀態。
  • 您的部署環境必須至少有 2 GB 的可用磁碟空間。
  • 您的部署環境中不得有任何具備以下權限的使用者:bypassWriteBlockingMode
  • 您只能升級至下一個主要版本,而無法指定您想要的版本。
  • 每個主要版本都包含一些功能,這些功能可能與先前版本不具向後相容性。 請查閱資料庫供應商的 發行說明,以確認是否有任何可能影響您應用程式的變更。
  • 不支援將部署降級至先前版本。
  • 原地主要版本升級一旦開始,便無法取消。
  • 對於 MongoDB Enterprise Edition,在升級之前必須至少有一份可用備份。

在使用者介面中進行升級

  1. 建立一個新的「Databases for MongoDB」,以測試升級流程。
    透過「還原備份」功能,從您現有的同版本部署中建立新的部署。

  2. 將您的預備環境應用程式指向測試部署環境。
    請更新您的預備環境應用程式,使其指向測試部署。 請確認您的測試應用程式能成功連線至預生產環境,且該應用程式的運作符合預期。 對預備環境執行所有必要的效能與運作測試。

  3. 請點擊「概覽」頁面的「升級主要版本」按鈕,以升級您的測試部署的主要版本。
    這將使您的資料庫在升級程序完成期間進入唯讀模式。 請注意升級完成所需的時間,以便您能利用「升級有效期限」設定,將升級作業安排在維護時段內完成。

  4. 請確認您的預備環境應用程式能與新版資料庫正常運作。
    如果您的應用程式運作正常,此步驟可確認升級生產環境資料庫應是安全的。

  5. 將您的生產環境資料庫部署升級至新版本。
    確認您的應用程式在使用新版資料庫時運作正常後,即可返回管理主控台,並開始升級生產環境部署的流程。 在「概覽」頁面的「部署詳細資訊」區段中,點選「升級主要版本」按鈕,並依照步驟操作。

    一旦就地升級程序開始,便無法停止或回滾。 因此,萬一發生錯誤(雖然這種情況不太可能),您的資料庫部署可能會變得無法恢復。 因此,請建立一份備份,日後可藉此將資料還原至新的部署環境。 若您選擇「帶備份的原地主要版本升級」,所建立的備份可用於在新部署中進行還原。

透過 expiration for starting upgrade,您可以設定一個「超時」期間,升級工作必須在此期間內啟動,否則將會被自動取消。 此外,請事先在預備環境中測試升級程序,以確保升級能在您預期的時間窗內完成。 舉例來說,若您希望在 1 小時內完成升級,且您已測試過升級程序並確認需時 30 分鐘,那麼您的升級工作必須在您確認要進行升級後的 30 分鐘內啟動。 因此,請將過期時間設定為 30 分鐘,這樣如果在此時間內未開始執行,就不會超出您的處理時限。

透過 API 進行升級

請使用以下指令進行就地升級:

curl -X PATCH https://api.{region}.databases.cloud.ibm.com/v5/ibm/deployments/{id}/version -H 'Authorization: Bearer <>' -H 'Content-Type: application/json' -d '{"version": "7.0"}'

透過 expiration for starting upgrade,您可以設定一個「超時」期間,升級工作必須在此期間內啟動,否則將會被自動取消。 此外,請事先在預備環境中測試升級程序,以確保升級能在您預期的時間窗內完成。 舉例來說,若您希望在 1 小時內完成升級,且您已測試過升級程序並確認需時 30 分鐘,那麼您的升級工作必須在您確認要進行升級後的 30 分鐘內啟動。 因此,請將過期時間設定為從現在起 30 分鐘後的時間戳記,這樣一來,若在此時間內未開始執行,便不會超出您的處理時段。 到期時間必須介於現在起 5 分鐘(預設值)至 24 小時之間。 如需更多資訊,請參閱 Cloud Databases API

透過命令列介面 (CLI) 進行升級

適用於 CDB 外掛程式版本 >= 0.20.0

若要檢視該部署所允許的升級與還原轉換清單:

ibmcloud cdb deployment-capability-show <NAME|CRN> versions

要執行升級指令並指定所需參數:

ibmcloud cdb deployment-version-upgrade <NAME|CRN> <TARGET_VERSION>

若要查看指令參數的完整詳細資訊:

ibmcloud cdb deployment-version-upgrade --help

透過 expiration for starting upgrade,您可以設定一個「超時」期間,升級工作必須在此期間內啟動,否則將會被自動取消。 此外,請事先在預備環境中測試升級程序,以確保升級能在您預期的時間窗內完成。 舉例來說,若您希望在 1 小時內完成升級,且您已測試過升級程序並確認需時 30 分鐘,那麼您的升級工作必須在您確認要進行升級後的 30 分鐘內啟動。 因此,請將過期時間設定為 30 分鐘,這樣如果在此時間內未開始執行,就不會超出您的處理時限。 到期時間必須介於現在起 5 分鐘(預設值)至 24 小時之間。 有兩種方式可透過 CLI 設定過期時間:--expire-in--expire-at。 如需更多資訊,請參閱該指令的說明。

透過 Terraform 進行升級

適用於 Terraform 提供者版本 >= 1.79.2

若要升級,只需在您的設定中新增或變更 version 的值即可。 此外還有一個可選的布林標誌 version_upgrade_skip_backup``,您可以設定此標誌以跳過備份。

不建議跳過備份。 在版本升級前跳過備份是危險的,若升級在任何階段失敗,可能會導致資料遺失——屆時將沒有可立即用於還原的備份。

在升級期間,資料庫將轉為唯讀模式。 強烈建議在升級前先進行測試。

升級可能需要比預設超時時間更長的時間。 可透過 timeouts 屬性設定較長的超時值。

Terraform 採用超時機制,而非到期時間戳記。 因此,請延長您的超時時間,因為您的超時更新值將被用作過期時間。 舉例來說,若您將超時設定為 20 分鐘,則有效期限將設定為 20 分鐘;若升級未在該時間內開始,該設定即會過期,升級也不會啟動。 請注意,最長有效期為 24 小時——因此,即使您將超時設定為 36 小時,若升級未在前 24 小時內開始,該升級仍會失效。

如果正在進行版本升級,請注意,某些任務可能會被排入佇列,並將在版本升級完成之前暫不執行。

疑難排解

使用者擁有 bypassWriteBlockingMode

為確保升級過程安全無虞,在備份或升級期間,任何使用者均不得執行寫入操作。 在資料庫進入 writeBlockMode 之前,系統會檢查是否有任何使用者具備 bypassWriteBlockingMode。 若識別出此類使用者,該任務將進入失敗狀態。 任何重試都會失敗,唯有移除此類權限的使用者,才能執行就地主要版本升級。

健康檢查

如果服務執行個體的資源不足,任務將會失敗,因為在此情況下無法保證能安全地進行升級。 可透過 監控整合 功能來評估資源消耗情況。 若並非所有資料庫元件皆可進行升級,則升級任務將會失敗。 這可能是由於維護作業所致。 因健康檢查失敗而失敗的任務,日後可重新嘗試。 如果該任務持續失敗,請向 IBM Cloud 技術支援部門 提交支援單。

從備份還原

在資料庫的主要版本達到生命週期結束(EOL)之前,請透過將備份還原至新的資料庫執行個體,升級至下一個可用的主要版本。

請在產品生命週期結束(EOL)日期之前,做好準備以繼續運行最新版本,並隨後遷移至該版本。 如需更多資訊,請參閱《 版本控制政策 》。

不支援回滾版本。

請升級至最新版本的「MongoDB」,該版本可於 Databases for MongoDB 取得。 您可以從目錄頁面、透過 Cloud Databases CLI 外掛程式指令 ibmcloud cdb deployables-show,或透過 Cloud Databases API 的 ` `/deployables 端點,取得最新版本。

升級是透過將您的資料 還原備份 移轉至新部署來處理的。 從備份還原有以下幾項優點:

  • 原始資料庫會維持執行,正式作業工作則可以不間斷。
  • 您可以在正式作業之外測試新資料庫,並處理任何應用程式不相容。
  • 整個流程可在任何時候重新執行。
  • 進行一次全新的還原,可降低舊版資料庫中不必要的殘留資料被帶入新資料庫的可能性。

升級路徑

主要版本的升級路徑
現行版本 主要版本升級路徑
MongoDB 7 MongoDB 8

在使用者介面中進行升級

針對新的主機型號(隔離運算與共享運算),可透過 CLIAPI 進行主要版本升級。

您可以透過在 IBM Cloud 控制台的「部署」頁面中,從「備份與還原頁面還原備份,來升級至新版本。 在備份上點擊 「還原備份」,系統將在新分頁中開啟一個頁面,您可在該頁面中變更新部署的某些選項。 其中之一是資料庫版本,系統會自動填入可供您升級的可用版本。 請選擇一個版本,然後按一下「還原備份」以開始配置與還原程序。

透過命令列介面 (CLI) 進行升級

當您透過 IBM Cloud CLI 進行升級並從備份還原時,請使用資源控制器中的配置指令。

ibmcloud resource service-instance-create <INSTANCE_NAME> <SERVICE_ID> <SERVICE_PLAN_ID> <REGION>

參數 instance_nameservice_idservice_plan_id 以及 region 均為必填項目。 您還需將版本和備份 ID 參數以 JSON 物件的形式傳遞給 -p 。 新部署的資源配置會自動設定為與備份當時來源部署相同的磁碟和記憶體容量。

ibmcloud resource service-instance-create example-upgrade databases-for-mongodb standard us-south \
-p \ '{
  "backup_id": "crn:v1:bluemix:public:databases-for-mongodb:us-south:a/54e8ffe85dcedf470db5b5ee6ac4a8d8:1b8f53db-fc2d-4e24-8470-f82b15c71717:backup:06392e97-df90-46d8-98e8-cb67e9e0a8e6",
  "version":"7.0"
}'

透過 API 進行升級

與透過 API 進行資源配置類似,您必須先完成 使用資源控制器 API 的必要步驟,才能透過該 API 從備份進行升級。 接著,向 API 發送一個 POST 請求。 參數 nametargetresource_group 以及 resource_plan_id 均為必填項目。 請一併提供版本號及備份 ID。 新部署的記憶體與磁碟配額,與備份當時的原始部署完全相同。

curl -X POST   https://resource-controller.cloud.ibm.com/v2/resource_instances   -H 'Authorization: Bearer <>'   -H 'Content-Type: application/json'     -d '{
    "name": "my-instance",
    "target": "us-south",
    "resource_group": "5g9f447903254bb58972a2f3f5a4c711",
    "resource_plan_id": "databases-for-mongodb-standard",
    "backup_id": "crn:v1:bluemix:public:databases-for-mongodb:us-south:a/54e8ffe85dcedf470db5b5ee6ac4a8d8:1b8f53db-fc2d-4e24-8470-f82b15c71717:backup:06392e97-df90-46d8-98e8-cb67e9e0a8e6",
    "version":"7.0"
  }'

透過 Terraform 進行升級

使用 Terraform 將較舊版本的備份還原至新版本。

  1. 請設定您的 backup_id。 如需相關資訊,請參閱 backup_id
  2. 請在 version 屬性中設定您的 version。 如需相關資訊,請參閱 version

程式碼如下所示:

resource "ibm_database" "<your-instance>" {
  name                                 = "<your_database_name>"
  service                              = "<service>"
  plan                                 = "<plan>"
  location                             = "<region>"
  version                              = "<version>"
  backup_id                            = "<backup_id>"
}

如需更多資訊,請參閱 Cloud Databases Terraform Registry