本文介紹如何通過零停機的模式升級RDS PostgreSQL資料庫大版本。
前提條件
執行個體版本為RDS PostgreSQL 17或以下版本。
執行個體儲存類型為雲端硬碟。
說明如果執行個體為高效能本地碟,僅支援通過藍綠部署模式升級大版本。
執行個體計費方式為隨用隨付或者訂用帳戶。
說明如果為Serverless執行個體,僅支援通過藍綠部署模式升級大版本。
執行個體的
wal_level參數取值為logical,如未設定,請修改執行個體參數。執行個體未啟用Babelfish,即小版本號碼尾碼不帶
babelfish。
背景資訊
在零停機模式下,系統採用pg_upgrade將原執行個體升級至目標版本,並通過原生邏輯複製實現累加式更新。升級過程中支援主動切換,並可在切換前對高版本執行個體進行驗證;在升級開始至主動切換前,執行個體可保持正常的讀寫操作;在切換過程中,執行個體的唯讀時間為秒級。
RDS PostgreSQL控制台還支援通過藍綠部署模式和本地升級模式升級資料庫大版本,不同模式的對比請參見大版本升級方案簡介。
升級費用
免費。
注意事項
業務影響:幾乎無業務影響,原執行個體停機時間為秒級,停機時間長度取決於執行個體中的Sequence數量以及大事務的寫入情況。
複製槽(Replication Slots):
當原執行個體中存在複製槽的發布端,升級會導致複製槽丟失。
當原執行個體中存在複製槽的訂閱端,升級可能出現複製槽搶佔導致的資料不同步問題。解決方案請參見如何避免在升級過程中出現複製槽搶佔導致的資料不同步問題。
參數變化:
如果原執行個體使用了新版本不支援的參數,在新版本中該參數會被自動刪除。
如果原執行個體的參數取值不在新版本對應參數取值的合法區間,則在新版本中,該參數將被設定為該版本參數模板的預設值。
升級過程中,系統會暫時將
statement_timeout的值修改為0,並在升級完成後恢複為原值。
DTS任務:如果待升級的執行個體作為Data Transmission Service(DTS)的源執行個體或目標執行個體,則升級後需要重建DTS任務 。
外掛程式相容性問題:進行大版本升級時,系統將自動更新至最新的核心小版本,可能會遇到外掛程式相容性問題。
執行個體備份:在升級前後,均會對執行個體進行全量備份,以便於後續的複製恢複。
不同升級階段對執行個體的影響
升級階段 | 影響 |
開始大版本升級 | 禁止進行任何DDL操作。 |
建立複製槽和發布 |
|
訂閱端啟動並建立邏輯複製關係 |
|
開始切換 |
|
完成切換(升級完成) |
|
升級任務開始後,在升級歷史頁簽,單擊目標升級任務升級日誌列的查看資訊,即可查看詳細的升級過程。
步驟一:升級前檢查
訪問RDS執行個體列表,在上方選擇地區,然後單擊目標執行個體ID。
在左側導覽列單擊大版本升級。
說明如果左側導覽列中沒有大版本升級,請檢查RDS PostgreSQL執行個體版本及配置,具體請參見前提條件。
在升級檢查頁簽中,單擊創建升級檢查報告。
擇選升級版本,且升級模式選擇零停機後,單擊確定。
此時,執行個體狀態變為實例維護中,待升級檢查完成後,執行個體狀態會變為執行中。
當升級檢查報告結果為成功或警告時,可以進行後續的大版本升級步驟;若結果為失敗,則需單擊查看資訊,根據報告內容修複異常檢查項後,再次進行升級前檢查。常見的報錯及原因請參見解讀RDS PostgreSQL大版本升級檢查報告。
重要為確保升級順利完成,當升級檢查報告的檢查結果為警告時,建議根據報告內容修複異常檢查項後,再次進行升級前檢查,直至檢查結果為成功。
升級檢查成功後,如果在主執行個體中建立了外掛程式,需重新執行檢查。
步驟二:升級大版本
單擊升級實例頁簽,閱讀警告內容,然後選擇升級版本,並單擊建立升級任務。
在彈出的視窗中,閱讀提示內容,然後單擊確定。
在建立大版本升級任務地區,選擇升級模式為零停機。
(可選)配置是否允許升級時執行DDL。
開啟後,在大版本升級過程中支援執行特定範圍內的DDL操作。如果執行的DDL超出支援範圍,則會執行失敗。
支援的DDL操作範圍如下:
Table相關
CREATE TABLE和DROP TABLE。新建立的表在寫入資料前,需要有主鍵。ALTER TABLE ADD COLUMNALTER TABLE ADD PRIMARY KEYCREATE INDEXDROP INDEXGRANT和REVOKE(針對錶)RENAME TABLEALTER TABLE OWNER
Schema相關
CREATE SCHEMADROP SCHEMAGRANT和REVOKE(針對Schema)ALTER TABLE SET SCHEMA(修改表的Schema歸屬)
Function相關
CREATE FUNCTIONDROP FUNCTION
Sequence相關
CREATE SEQUENCE和DROP SEQUENCEALTER SEQUENCE
Type相關
Composite Type:
CREATE TYPE、DROP TYPE、ALTER TYPE ADD ATTRIBUTE、ALTER TYPE RENAMEEnum Type:
CREATE TYPE、DROP TYPE、ALTER TYPE ADD VALUE、ALTER TYPE RENAME VALUERange Type:
CREATE TYPE和DROP TYPE
View相關
CREATE VIEW和DROP VIEWALTER VIEW ADD COLUMN
Domain相關
CREATE DOMAIN和DROP DOMAINALTER DOMAIN(支援SET DEFAULT、ADD CONSTRAINT、DROP CONSTRAINT)
重要未在上述列表中的DDL操作(如
ALTER TABLE DROP COLUMN、TRUNCATE等)不受支援,執行時會失敗。單擊立即建立。
當執行個體狀態變為遷移中時,表示升級任務已正式啟動。
升級所需時間與執行個體中的資料庫物件數量密切相關,資料庫物件數量越多,升級所需時間越長。在進行大版本升級時,您可以在工作中樞查看升級進度。
重要升級任務建立後不支援修改或刪除。
原執行個體狀態為遷移中時,該執行個體不支援修改參數、重啟、釋放等營運操作。
步驟三:切換到高版本
驗證高版本執行個體。
當執行個體狀態將從遷移中轉變為遷出資料中時,表示邏輯複製已搭建完成,建立升級任務的過程將結束,您可以驗證高版本執行個體的資料。
進入升級歷史頁簽,使用目標升級記錄的高版本驗證地址串連至高版本執行個體,以驗證升級後的資料。
說明高版本執行個體為唯讀模式,無法進行寫入操作。
切換到高版本執行個體。
確定高版本執行個體的資料符合預期後,且升級結果為同步中時,單擊升級日誌列的切換,將業務切換到高版本執行個體。
說明如果升級結果為其他狀態,請參見升級結果說明進行處理。
如果您決定放棄本次升級,可以單擊升級日誌列的取消。這將刪除邏輯複製槽,取消邏輯複製對源執行個體的影響,並允許其執行DDL操作。
在切換彈窗中設定容忍停寫時間(單位:秒),並單擊確定。
當升級結果變為唯讀時,表示進行中切換,此時執行個體狀態為遷移中時。在大版本升級的升級歷史頁簽,單擊升級日誌列的中斷按鈕,取消此次切換操作。
說明可以通過在切換時設定容忍停寫時間,主動等待覆制延遲消除,保障資料一致性。在此過程中,升級結果將變為唯讀。如果超出此時間,則系統將返回到同步中狀態,並解除唯讀限制。
查看切換結果。
當升級結果變為成功時,表示切換成功,當執行個體狀態為執行中時。
在執行個體基本資料頁,可以查看執行個體當前的版本資訊。
說明升級完成後,在升級歷史頁簽,單擊目標升級任務升級日誌列的查看資訊,即可查看升級過程中執行個體的唯讀時間及詳細的升級過程。其中唯讀時間為切換時間和切換完成時間之間的時段,此時間段不包括因DNS緩衝未重新整理而導致無法串連的時間。
升級結果說明
升級過程中,升級歷史頁簽的升級記錄中,包含以下升級結果。
升級結果 | 執行個體狀態 | 含義 | 可執行動作 |
運行中 | 遷移中 | 升級任務正在運行。 | 無。 |
同步中 | 遷出資料中 | 邏輯複製狀態正常。 |
|
複製斷開 | 遷出資料中 | 邏輯複製狀態異常。 |
|
唯讀 | 遷移中 | 正在切換,執行個體為唯讀模式,並且正在同步Sequence。 | 中斷:取消此次切換操作。 |
切換 | 遷移中 | Sequence同步已完成,現正進行收尾工作。 | 無。 |
取消 | 執行中 | 升級任務取消。 | 無。 |
成功 | 執行中 | 升級任務成功。 | 無。 |
相關API
API | 描述 |
RDS PostgreSQL執行個體大版本升級檢查。 | |
查詢RDS PostgreSQL執行個體大版本升級檢查報告。 | |
RDS PostgreSQL執行個體升級資料庫大版本。 | |
查詢RDS PostgreSQL執行個體大版本升級歷史任務。 |