全部產品
Search
文件中心

ApsaraDB RDS:通過藍綠部署模式升級大版本

更新時間:Dec 06, 2025

本文介紹如何通過藍綠部署的模式升級RDS PostgreSQL資料庫大版本。

前提條件

背景資訊

在藍綠部署模式下,原執行個體恢複到一個新執行個體,並使用pg_upgrade將其升級至目標版本。割接情境下,自動切換原串連地址到新執行個體。

RDS PostgreSQL控制台還支援通過零停機模式本地升級模式升級資料庫大版本,不同模式的對比請參見大版本升級方案簡介

升級費用

通過藍綠部署模式升級大版本,系統會在原執行個體的基礎上,建立一個執行個體,在升級完成後:

  • 原執行個體和新執行個體將同時產生費用。

  • 原執行個體的費用和計費方式保持不變。

  • 新執行個體的計費方式相比於原執行個體可能會發生變化。

    原執行個體計費方式

    新執行個體計費方式

    訂用帳戶/隨用隨付

    隨用隨付

    Serverless

    Serverless

    說明

    為節省費用,建議在新執行個體的業務穩定運行後,將其轉成訂用帳戶,並釋放或退訂原執行個體。但需要注意以下情況:

    • 如果您的原執行個體計費方式為訂用帳戶且尚未到期,新執行個體無法繼承原執行個體包月剩餘時間長度,釋放原執行個體可能存在費用損失。具體退訂規則請參見退款說明

    • 如果您的原執行個體購買時使用了優惠,升級後新執行個體將不會繼承此優惠,請進入執行個體退訂頁面查看具體退款金額後,再評估是否升級。

    • 訂用帳戶退款金額退款時間以實際退訂賬單為準,非即時到賬。

注意事項

  • 業務影響:通過藍綠部署(割接)進行升級時,在割接過程中,原執行個體將會被設定為唯讀,並會造成分鐘級業務閃斷,請在業務低峰期進行升級。如果選擇不割接方式進行升級,則不受影響。

    • 原執行個體唯讀時間的長短與資料庫物件數量相關,執行個體資料庫物件數越多,唯讀時間越長,當資料庫物件數達到百萬層級時,唯讀時間可能達到十分鐘級甚至小時級。您可以使用SELECT count(1) FROM pg_class;命令查看資料庫的對象數。

    • 用戶端感知的閃斷時間長度取決於DNS緩衝重新整理時間。您可以嘗試切換虛擬交換器,通過業務閃斷時間長度來評估用戶端的DNS緩衝重新整理時間。

    • 升級過程的時間長短與執行個體的資料庫物件數量相關,資料庫物件數越多,升級時間越長。大版本升級時您可以在工作中樞查看任務進度。

    • 對於藍綠部署,在割接後,如果不希望原執行個體被設定為唯讀,請在升級後將參數rds_force_trans_ro_non_sup設定為off,詳情請參見設定執行個體參數

  • 跨版本升級:RDS PostgreSQL 9.4和10高效能本地碟執行個體僅支援升級至雲端硬碟版執行個體,最高可直接升級至RDS PostgreSQL 14。如果需要升級至PostgreSQL 15或更高版本,請首先升級至中間版本(PostgreSQL 9.4可升級至10、11、12、13或14;PostgreSQL 10可升級至11、12、13或14),然後再進行PostgreSQL 15或更高版本的升級。

  • 複製槽(Replication Slots)

  • 虛擬IP:對於藍綠部署(割接),升級後新執行個體的虛擬IP(Virtual IP Address)會變更,請自行檢查網路連通性,如防火牆配置。

    • 虛擬IP變更影響:如果您在應用程式中配置了虛擬IP,則需要修改應用配置以指向新執行個體的虛擬IP。

    • 建議方案:為避免手動修改配置的複雜性,建議在應用程式中直接配置執行個體的串連地址,擷取執行個體串連地址請參見查看或修改串連地址和連接埠

  • 參數變化

    • 如果原執行個體使用了新版本不支援的參數,在新版本中該參數會被自動刪除。

    • 如果原執行個體的參數取值不在新版本對應參數取值的合法區間,則在新版本中,該參數將被設定為該版本參數模板的預設值。

    • 升級過程中,系統會暫時將statement_timeout的值修改為0,並在升級完成後恢複為原值。

  • DTS任務:如果待升級的執行個體作為Data Transmission Service(DTS)的源執行個體或目標執行個體,則升級後需要重建DTS任務

  • 外掛程式相容性問題:進行大版本升級時,系統將自動更新至最新的核心小版本,可能會遇到外掛程式相容性問題

  • 新執行個體不繼承原執行個體的執行個體名稱標籤CloudMonitor警示規則以及備份資料

步驟一:升級前檢查

  1. 訪問RDS執行個體列表,在上方選擇地區,然後單擊目標執行個體ID。

  2. (可選)如果待升級的執行個體中建立了唯讀執行個體,需要將應用程式中配置的唯讀執行個體串連地址修改為主執行個體串連地址,並刪除唯讀執行個體。

    說明

    為保證業務穩定,建議在業務低峰期修改應用串連地址。

  3. 在左側導覽列單擊大版本升級

    說明

    如果左側導覽列中沒有大版本升級,請檢查RDS PostgreSQL執行個體版本及配置,具體請參見前提條件

  4. 升级检查頁簽中,單擊创建升级检查报告

  5. 擇選升級版本,且升级模式選擇蓝绿部署後,單擊確定

    此時,執行個體狀態變為實例維護中,待升級檢查完成後,執行個體狀態會變為執行中

    當升級檢查報告結果為成功警告時,可以進行後續的大版本升級步驟;若結果為失败,則需單擊查看資訊,根據報告內容修複異常檢查項後,再次進行升級前檢查。常見的報錯及原因請參見解讀RDS PostgreSQL大版本升級檢查報告

    重要
    • 為確保升級順利完成,當升級檢查報告的檢查結果為警告時,建議根據報告內容修複異常檢查項後,再次進行升級前檢查,直至檢查結果為成功

    • 升級檢查成功後,如果在主執行個體中建立了外掛程式,需重新執行檢查。

步驟二:升級大版本

  1. 單擊升级实例頁簽,閱讀警告內容,然後選擇升級版本,並單擊建立升級任務

  2. 在彈出的視窗中,閱讀提示內容,然後單擊確定

  3. 建立大版本升級任務地區,升级模式蓝绿部署,並配置對應升級參數(僅列舉重點參數)。

    配置

    說明

    存储类型

    • 新執行個體儲存類型僅支援ESSD雲端硬碟和高效能雲端硬碟。選擇ESSD雲端硬碟時,支援切換效能等級。

    • 新執行個體的儲存類型需和原執行個體保持一致。

      說明
      • 不同效能層級的ESSD雲端硬碟最小容量不同,切換效能等級時,執行個體儲存空間的最小值會根據所選效能等級自動調整,需確保新值滿足要求。

      • 原執行個體為高效能本地碟時,新執行個體僅支援選擇ESSD雲端硬碟。

    目标主可用区

    系統支援升級後將新的主備執行個體配置到其他可用性區域,請根據實際情況設定。

    目标备可用区

    目标主实例交换机

    目标备实例交换机

    割接配置

    根據實際需求選擇是否將流量切換到新版本執行個體上。

    • 不割接:不自動切換。此選項一般用於正式升級之前測試當前業務在新版本中的相容性。

    • 割接:自動切換。此選項一般用於在確認業務可以穩定運行在新版本之後執行正式升級。割接結束會自動連接到新執行個體,您無需更改應用程式裡的資料庫連接地址。

    說明
    • 割接後無法回退,請謹慎選擇。

    • 割接過程中,原執行個體將會被設定為唯讀,並會造成分鐘級業務閃斷,請在業務低峰期進行升級。如果選擇不割接方式進行升級,則不受影響。

    • 建議第一次執行時選則不割接,應用程式層完全測實驗證通過後,釋放新執行個體並重複升級操作,選擇割接開始正式升級。

    儲存空間

    選擇新版本執行個體的儲存空間大小。

    高效能本地碟執行個體升級大版本時,支援儲存空間縮容。

    可選擇的最小儲存空間需滿足以下條件:

    • 以下兩者中的最小值:

      • 原執行個體已使用儲存空間 × 120%,如果計算結果(單位需轉換為GB)不是5的倍數,則向上湊為5的倍數。

        說明

        原執行個體已使用儲存空間,可通過監控與警示功能查看監控項磁碟空間 (MB),具體方法,請參見查看增強監控

      • 原執行個體儲存空間。

    • 大於等於ESSD雲端硬碟可購買的最小值,不足時以如下值作為可購買最小值:

      • ESSD PL1雲端硬碟:20 GB。

      • ESSD PL2雲端硬碟:500 GB。

      • ESSD PL3雲端硬碟:1500 GB。

    說明

    例如:

    • 原執行個體儲存空間為100 GB,已使用70 GB,升級大版本時,儲存類型選擇為ESSD PL1雲端硬碟。

      計算方法:70 × 120% = 84,向上湊為5的倍數85 GB。因此,可購買的最小儲存空間為85 GB。

    • 原執行個體儲存空間為700 GB,已使用350 GB,升級大版本時,儲存類型選擇為ESSD PL2雲端硬碟。

      計算方法:350 × 120% = 420,420 GB小於ESSD PL2雲端硬碟可購買的最小值500 GB,因此,可購買的最小儲存空間為500 GB。

    執行個體規格

    選擇新版本執行個體的規格。有關執行個體規格的更多詳情,請參見主執行個體規格列表

  4. 單擊立即建立

    當執行個體狀態變為遷移中時,表示升級任務已正式啟動。

    升級所需時間與執行個體中的資料庫物件數量密切相關,資料庫物件數量越多,升級所需時間越長。在進行大版本升級時,您可以在工作中樞查看升級進度。

    重要
    • 升級任務建立後不支援修改或刪除

    • 原執行個體狀態為遷移中時,該執行個體不支援修改參數、重啟、釋放等營運操作。

    • 如果建立任務時提示資源不足,請切換目標主執行個體可用性區域

  5. 查看升級結果。

    當原執行個體和新執行個體的狀態為執行中時,表示執行個體升級成功。

    說明
    • 藍綠部署(切割)模式,升級完成後流量自動切換到新執行個體(高版本)。

    • 藍綠部署(不切割)模式,升級完成後流量不切換到新執行個體(高版本)。

    • 升級完成後,在升级历史頁簽,單擊目標升級任務升級日誌列的查看資訊,即可查看升級過程中執行個體的唯讀時間及詳細的升級過程。其中唯讀時間為割接時間割接結束時間之間的時段,此時間段不包括因DNS緩衝未重新整理而導致無法串連的時間。

    • 對於藍綠部署(不切割),系統同樣會顯示割接時間割接結束時間,以便作為割接情境的參考和預估。

後續操作

  1. 對於採用藍綠部署(割接)的模式進行升級的執行個體,確認業務已在新執行個體中穩定運行後,請及時釋放原執行個體

    同時,建議將新執行個體的計費方式轉成訂用帳戶,以獲得更多的優惠。

    說明
    • 如果您的原執行個體計費方式為訂用帳戶且尚未到期,釋放執行個體可能存在費用損失。

    • 如果您的原執行個體購買時使用了優惠,升級後新執行個體將不會繼承此優惠,原執行個體退訂請以實際退訂頁面為準。

    • 訂用帳戶退款金額退款時間以實際退訂賬單為準,非即時到賬。

  2. (可選)新執行個體不包含唯讀執行個體,如果在升級前刪除了唯讀執行個體,還需執行:

    1. 在新執行個體上重新建立PostgreSQL唯讀執行個體

    2. 在應用程式中,將原唯讀執行個體串連地址(已在升級前修改為主執行個體串連地址)修改為新的唯讀執行個體串連地址。

升級結果說明

升級過程中,升级历史頁簽的升級記錄中,包含以下升級結果

升級結果

執行個體狀態

含義

可執行動作

運行中

遷移中

升級任務正在運行。

無。

成功

執行中

升級任務成功。

無。

相關API

API

描述

UpgradeDBInstanceMajorVersionPrecheck

RDS PostgreSQL執行個體大版本升級檢查。

DescribeUpgradeMajorVersionPrecheckTask

查詢RDS PostgreSQL執行個體大版本升級檢查報告。

UpgradeDBInstanceMajorVersion

RDS PostgreSQL執行個體升級資料庫大版本。

DescribeUpgradeMajorVersionTask

查詢RDS PostgreSQL執行個體大版本升級歷史任務。

相關文檔

常見問題

大版本升級期間,是否能變更執行個體?比如變更執行個體規格?

大版本升級期間不支援變更執行個體,必須在大版本升級完成後才能進行其他動作。

大版本是否支援自動升級?

暫不支援自動升級資料庫大版本。

是否支援大版本降級?

升級後暫不支援進行大版本降級操作,如需降級,請購買低版本執行個體後,使用DTS遷移,將執行個體遷移至低版本中。

升級資料庫大版本後,在新執行個體中建立raster_overviews視圖時,提示raster_overviews衝突,如何處理?

如果PostGIS版本小於2.5.2且RDS PostgreSQL版本為10或11,升級外掛程式後,再升級資料庫大版本到PostgreSQL12,在新執行個體中建立raster_overviews視圖可能會出現raster_overviews衝突的問題。

解決方案如下:

  1. 在原執行個體中升級PostGIS外掛程式版本。

    如下命令需執行兩遍,以確保成功。

    SELECT PostGIS_Extensions_Upgrade();
    SELECT PostGIS_Extensions_Upgrade();
  2. 根據業務判斷是否使用了PostGIS Raster外掛程式,選擇對應的升級方法。

    使用了PostGIS Raster外掛程式

    1. 在原執行個體中執行如下命令,修改raster_overviews視圖。

      ALTER EXTENSION PostGIS_Raster DROP VIEW raster_overviews;
      CREATE OR REPLACE VIEW raster_overviews AS SELECT 1;
    2. 對PostgreSQL執行個體進行大版本升級,至少升級到PostgreSQL 12或以上版本。

    3. 升級完成後,在新執行個體中重新建立視圖。

      CREATE 
      OR REPLACE VIEW raster_overviews AS 
      SELECT 
        current_database() AS o_table_catalog, 
        n.nspname AS o_table_schema, 
        c.relname AS o_table_name, 
        a.attname AS o_raster_column, 
        current_database() AS r_table_catalog, 
        split_part(
          split_part(s.consrc, '''::name', 1), 
          '''', 
          2
        ): :name AS r_table_schema, 
        split_part(
          split_part(s.consrc, '''::name', 2), 
          '''', 
          2
        ): :name AS r_table_name, 
        split_part(
          split_part(s.consrc, '''::name', 3), 
          '''', 
          2
        ): :name AS r_raster_column, 
        trim(
          both 
          from 
            split_part(s.consrc, ',', 2)
        ): :integer AS overview_factor 
      FROM 
        pg_class c, 
        pg_attribute a, 
        pg_type t, 
        pg_namespace n, 
        (
          SELECT 
            connamespace, 
            conrelid, 
            conkey, 
            pg_get_constraintdef(oid) As consrc 
          FROM 
            pg_constraint
        ) AS s 
      WHERE 
        t.typname = 'raster' : :name 
        AND a.attisdropped = false 
        AND a.atttypid = t.oid 
        AND a.attrelid = c.oid 
        AND c.relnamespace = n.oid 
        AND c.relkind = ANY(
          ARRAY[ 'r' : :char, 'v' : :char, 'm' : :char, 
          'f' : :char ]
        ) 
        AND s.connamespace = n.oid 
        AND s.conrelid = c.oid 
        AND s.consrc LIKE '%_overview_constraint(%' 
        AND NOT pg_is_other_temp_schema(c.relnamespace) 
        AND has_table_privilege(c.oid, 'SELECT' : :text); ALTER EXTENSION PostGIS_Raster 
      ADD 
        VIEW raster_overviews;

    未使用PostGIS Raster外掛程式

    1. 在原執行個體中執行如下命令刪除外掛程式。

      DROP EXTENSION PostGIS_Raster;
    2. 對PostgreSQL執行個體進行大版本升級,至少升級到PostgreSQL 12或以上版本。

如何避免在升級過程中出現複製槽搶佔導致的資料不同步問題

  • 如果您需要將訂閱資料保留在源端(低版本執行個體),那麼在升級的過程中,確保源端不會因負載過大而導致宕機。否則,可能導致複製槽被目標端(高版本執行個體)搶佔,從而出現資料不一致的情況。

    升級完成後,請使用以下SQL語句在目標端的資料庫關閉訂閱。

    \c your_database
    ALTER SUBSCRIPTION your_subscription_name DISABLE;
  • 如果您需要將訂閱資料儲存在目標端,請在升級前關閉源端的訂閱,再進行大版本升級,升級完成後,請開啟目標端的訂閱。SQL樣本如下:

    • 在源端關閉訂閱。

      \c your_database
      ALTER SUBSCRIPTION your_subscription_name DISABLE;
    • 在目標端開啟訂閱。

      \c your_database
      ALTER SUBSCRIPTION your_subscription_name ENABLE;
說明

如何處理升級後訂閱資料不一致的問題?

  1. 升級成功後,清空目標端(高版本執行個體)表資料,重新建立訂閱並設定copy_data=true。詳情請參見ALTER SUBSCRIPTION

  2. 使用CONFLICT關鍵字將源端(低版本執行個體)消費的資料匯入到目標端,樣本如下。

    CREATE TABLE my_tbl(id INT PRIMARY KEY, t TIMESTAMP, val TEXT);
    
    INSERT INTO my_tbl VALUES (1, CURRENT_TIMESTAMP, 'a');
    INSERT INTO my_tbl VALUES (2, CURRENT_TIMESTAMP, 'b');
    INSERT INTO my_tbl VALUES (3, CURRENT_TIMESTAMP, 'c');
    
    -- in case with newer timestamp: do update
    INSERT INTO my_tbl VALUES (1, CURRENT_TIMESTAMP, 'd') ON CONFLICT(id) DO UPDATE
    	SET t = excluded.t,
    		val = excluded.val
    	WHERE my_tbl.t < excluded.t;
    
    -- in case with older timestamp: do nothing
    INSERT INTO my_tbl VALUES (2, CURRENT_TIMESTAMP - '10 hours'::interval, 'e') ON CONFLICT(id) DO UPDATE
    	SET t = excluded.t,
    		val = excluded.val
    	WHERE my_tbl.t < excluded.t;
    
    -- in case with new val: just insert
    INSERT INTO my_tbl VALUES (5, CURRENT_TIMESTAMP - '10 hours'::interval, 'f') ON CONFLICT(id) DO UPDATE
    	SET t = excluded.t,
    		val = excluded.val
    	WHERE my_tbl.t < excluded.t;

為什麼在進行大版本升級之前需要刪除唯讀執行個體?

升級完成後,自建的唯讀節點和複製槽在升級後仍然保留在原執行個體下,不會自動轉移到高版本執行個體。因此,在進行大版本升級前,請將應用程式中配置的唯讀執行個體串連地址修改為主執行個體串連地址,並刪除現有的唯讀執行個體。升級完成後,請重新購買並配置新的唯讀執行個體。