隨著PostgreSQL社區對低版本(如9.4、10)執行個體的停止維護,繼續使用低版本執行個體將存在風險,如果您需要將低版本的RDS PostgreSQL執行個體升級到更高版本,或者希望使用高版本的新特性,建議您進行大版本升級操作。
方案簡介
PostgreSQL社區定期發布大版本,帶來功能和效能提升。較低版本將逐漸不再受支援,存在效能和安全風險。為了讓您享受新版本的提升,同時降低升級風險,RDS PostgreSQL支援大版本升級功能。
RDS PostgreSQL的大版本升級功能提供藍綠部署(割接/不割接)、本地升級和零停機等升級模式。同時,支援使用DTS通過遷移執行個體的方式進行升級,各個升級方案的對比如下:
升級方案 | 藍綠部署(割接) | 藍綠部署(不割接) | 本地升級 | 零停機 | |
實現原理 | 通過雲端硬碟技術,恢複一個新執行個體,並使用pg_upgrade將其升級至目標版本。同時,支援自動切換原串連地址到新執行個體。 | 通過雲端硬碟技術,恢複一個新執行個體,並使用pg_upgrade將其升級至目標版本。 | 後台建立一個新執行個體(虛擬執行個體),並使用pg_upgrade將其升級到目標版本。同時,將原執行個體的所有元資訊完整重新整理到新執行個體中。 | 後台建立一個新執行個體(虛擬執行個體),並使用pg_upgrade將其升級到目標版本。同時,通過PostgreSQL的原生邏輯複製進行累加式更新。 | 手動建立新執行個體,並使用非同步邏輯複製進行資料移轉。 |
方案優點 |
| 提供獨立的測試環境進行升級後驗證。 |
|
|
|
方案缺點 | 升級期間原執行個體將會被設定為唯讀,資料庫物件數越多,唯讀時間越長。 | 不切換串連地址,需要業務側自行配套。 |
|
|
|
適用情境 | 可以接受升級期間執行個體唯讀,並且期望保留原執行個體。 |
| 可以接受升級期間執行個體唯讀,並且期望升級後的執行個體與原執行個體一致。 | 業務不接受長時間停機。 |
|
費用 | 建立執行個體隨用隨付。 | 建立執行個體隨用隨付。 | 無升級費用。 | 無升級費用。 |
|
功能特點
支援跨版本升級:例如從PostgreSQL 10.0升級到PostgreSQL 13.0。
支援升級演練:通過藍綠部署(不割接)的方式驗證升級流程,不影響原執行個體。
支援平滑升級:
無需修改應用:通過藍綠部署(割接)、本地升級和零停機方式升級,無需修改應用中已配置的資料庫連接地址。其中藍綠部署(割接)結束後,系統將會自動交換原執行個體與新執行個體的串連地址,而本地升級和零停機將保持原執行個體的串連地址不變。
幾乎零中斷:零停機方式在升級時原執行個體幾乎不需要停機(停機時間極短,主要取決於執行個體中的Sequence數量以及大事務的寫入情況),從而顯著降低業務中斷帶來的風險。
保留執行個體設定:
升級後保留原執行個體的白名單、參數設定、外掛程式(新版本不支援的外掛程式和參數除外)。
加密執行個體升級大版本後仍為加密執行個體,加密Key保持不變。
支援通過備份複製低版本執行個體及資料:選擇本地升級時,會在升級前後進行常規備份。如果需要獲得低版本執行個體及資料,可以使用最新的低版本備份組複製執行個體。
升級費用
本地升級和零停機不會造成費用的變化,也不會產生訂單。
藍綠部署:
升級後產生的新執行個體的計費方式可能會發生變化。
原執行個體計費方式
新執行個體計費方式
訂用帳戶/隨用隨付
隨用隨付
Serverless
Serverless
升級完成後,原執行個體和新執行個體將同時產生費用。在確保業務在新執行個體中穩定運行後,您可以將新執行個體轉成訂用帳戶,將原執行個體釋放或退訂,但需要注意以下情況:
如果您的原執行個體計費方式為訂用帳戶且尚未到期,新執行個體無法繼承原執行個體包月剩餘時間長度,釋放原執行個體可能存在費用損失。
如果您的原執行個體購買時使用了優惠,升級後新執行個體將不會繼承此優惠,請進入執行個體退訂頁面查看具體退款金額後,再評估是否升級。
訂用帳戶退款金額退款時間以實際退訂賬單為準,非即時到賬。
使用限制
執行個體版本:PostgreSQL 16或以下版本
說明支援跨版本升級。PostgreSQL 9.4和10的高效能本地碟執行個體僅支援升級至PostgreSQL雲端硬碟版,最高可直接升級至PostgreSQL 14。如果需要升級至PostgreSQL 15或更高版本,請首先升級至中間版本(PostgreSQL 9.4可升級至10、11、12、13或14;PostgreSQL 10可升級至11、12、13或14),然後再進行PostgreSQL 15或更高版本的升級。
執行個體ID不是以
pg-cn
開頭。執行個體未啟用Babelfish,即小版本號碼尾碼不帶
babelfish
。如果原執行個體中建立了唯讀執行個體,則無法選擇藍綠部署(割接)升級。如果需要進行藍綠部署(割接)升級,請參見具有隻讀執行個體的主執行個體如何升級大版本。
儲存類型為本地SSD盤的執行個體僅支援採用藍綠部署模式進行大版本升級。在執行個體的基本資料頁面,可以查看執行個體的儲存類型。
升級影響
業務影響:
通過藍綠部署(割接)或本地升級進行升級時,在割接過程中,原執行個體將會被設定為唯讀,並會造成分鐘級業務閃斷,請在業務低峰期進行升級。如果選擇不割接方式進行升級,則不受影響。
原執行個體被設定唯讀時間的長短與資料庫物件數量相關,執行個體資料庫物件數越多,唯讀時間越長,當資料庫物件數達到百萬層級時,唯讀時間可能達到十分鐘級甚至小時級。您可以使用
SELECT count(1) FROM pg_class;
命令查看資料庫的對象數。用戶端感知的閃斷時間長度取決於DNS緩衝重新整理時間。您可以嘗試切換虛擬交換器,通過業務閃斷時間長度來評估用戶端的DNS緩衝重新整理時間。
升級過程的時間長短與執行個體的資料庫物件數量相關,資料庫物件數越多,升級時間越長。大版本升級時您可以在工作中樞查看任務進度,具體請參見任務管理。
對於藍綠部署,在割接後,如果不希望原執行個體被設定為唯讀,請在升級後將參數
rds_force_trans_ro_non_sup
設定為off
,詳情請參見設定執行個體參數。
參數:
如果原執行個體使用了新版本不支援的參數,在新版本中該參數會被自動刪除,如果低版本的參數取值不在高版本對應參數取值的合法區間,在新版本中該參數會被置為高版本參數模板的預設值。
唯讀執行個體:
對於藍綠部署,自建的唯讀節點和複製槽在升級後仍然保留在原執行個體下,不會自動轉移到高版本執行個體,需要在升級後進行重建。
對於本地升級,自建唯讀節點的主備關係以及複製槽在升級後會丟失,請根據實際情況謹慎選擇升級模式。
當待升級的執行個體中建立了唯讀執行個體時,則無法直接進行升級,需要在升級前後進行以下操作:
DTS任務:
如果待升級的執行個體作為Data Transmission Service(DTS)的源執行個體或目標執行個體,則升級後需要重建DTS任務。建立DTS任務詳見DTS產品文檔。
資料不同步問題:
當待升級的執行個體中存在Replication Slots的訂閱端,升級可能出現複製槽搶佔導致的資料不同步問題。需要執行如下操作防止出現資料不同步的情況。對於本地升級,建議升級前關閉源執行個體的訂閱。
對於藍綠部署(割接),升級後新執行個體的虛擬IP(Virtual IP Address)會變更,請自行檢查網路連通性,如防火牆配置。對於本地升級和零停機,不會修改虛擬IP。
虛擬IP變更影響:如果您在應用程式中配置了虛擬IP,則需要修改應用配置以指向新執行個體的虛擬IP。
建議方案:為避免手動修改配置的複雜性,建議在應用程式中直接配置執行個體的串連地址,擷取執行個體串連地址請參見查看或修改串連地址和連接埠。
升級大版本將會使用最新的核心小版本,可能遇到外掛程式相容性問題,具體請參見升級核心小版本。
升級後暫不支援進行大版本降級操作,如需降級,請購買低版本執行個體後,使用DTS遷移,將執行個體遷移至低版本中。
對於藍綠部署,新執行個體不繼承原執行個體的執行個體名稱、標籤、CloudMonitor警示規則以及備份資料。
升級過程中,系統會暫時將
statement_timeout
的值修改為0,並在升級完成後恢複為原值。對於本地升級和零停機,在升級前,系統將對低版本執行個體進行備份;在升級完成後,系統將對高版本執行個體進行備份,以便於後續的複製恢複。