我想解決在 Amazon Relational Database Service (Amazon RDS) for PostgreSQL 和 Amazon Aurora PostgreSQL 相容版本中建立藍/綠部署時發生的錯誤。
解決方法
檢閱藍/綠部署的限制並找出您的錯誤
檢閱 Amazon RDS 和 Aurora PostgreSQL 相容版的藍/綠部署限制。
若要找出部署的特定錯誤訊息,請完成以下步驟:
- 開啟 Amazon RDS console (Amazon RDS 主控台)。
- 在導覽窗格中,選擇 Databases (資料庫)。
- 選取您的藍/綠部署。
- 選擇 Logs & events (日誌和事件) 索引標籤。
- 檢閱日誌中的錯誤訊息。
解決邏輯複寫組態錯誤
如果您建立藍/綠部署但未啟用邏輯複寫,那麼您會收到以下錯誤訊息:
「Blue/Green Deployments require a DB instance with logical replication enabled.Before you create a Blue/Green Deployment for a DB instance, associate the DB instance with a custom DB instance parameter group that enables logical replication.」
若要啟用邏輯複寫,請完成以下步驟:
- 建立自訂參數群組或修改現有群組。
- 將 rds.logical_replication 參數設為 1。
- 將自訂參數群組套用到資料庫執行個體。
**注意:**您無法修改預設參數群組值。
解決不相容的複寫參數
如果您建立藍/綠部署時,複寫插槽不足以對應資料庫數量,那麼您會收到以下錯誤訊息:
「Creation of blue/green deployment failed due to incompatible parameter(s): max_replication_slots, and max_logical_replication_workers.」
若要解決此問題,請完成以下步驟:
-
執行以下查詢以檢視資料庫清單:
SELECT datname FROM pg_database;
-
修改自訂參數群組中的以下參數:
將 max_replication_slots 設為高於資料庫總數的值。
將 max_wal_senders 和 max_logical_replication_workers 設為等於使用中邏輯複寫插槽數的值。
將 max_worker_processes 設為 max_logical_replication_workers、autovacuum_max_workers 和 max_parallel_workers 總和的值。
-
建立新的藍/綠部署。
解決外部複寫插槽錯誤
如果您在存在外部複寫插槽時建立藍/綠部署,那麼您會收到以下錯誤訊息:
「Replica creation is canceled due to external replication.」
若要解決此問題,請完成以下步驟:
-
執行以下命令以檢查現有的複寫插槽:
SELECT * FROM pg_replication_slots WHERE slot_type NOT LIKE 'physical';
-
執行以下命令以刪除已識別的插槽:
SELECT pg_drop_replication_slot(slot_name);
**注意:**將 slot_name 替換為複寫插槽的名稱。
解決部署後發生的 DDL 變更
如果您在建立藍/綠部署後變更資料定義語言 (DDL) 或修改大型物件,則會收到以下錯誤訊息:
「DDL changes aren't supported for blue/green deployments.These changes aren't replicated from the blue environment to the green environment, and switchover will be blocked.Your green databases now have a status of REPLICATION_DEGRADED.Delete and recreate your blue/green deployment and avoid future DDL changes.」
若要解決此問題,請刪除藍/綠部署。然後,建立新的藍/綠部署。
部署後,請勿變更藍色環境中的 DDL 和大型物件。
解決資料表主索引鍵錯誤
如果您更新或刪除不具主索引鍵之資料表中的記錄,那麼您會收到以下錯誤訊息:
「Logical replication target relation 'public.image_audit' has neither REPLICA IDENTITY index nor PRIMARY KEY and published relation does not have REPLICA IDENTITY FULL」
若要解決此問題,請為需要更新或刪除的資料表新增主索引鍵。然後,執行以下命令以設定 REPLICA IDENTITY FULL:
ALTER TABLE table_name REPLICA IDENTITY FULL;
**注意:**將 table_name 替換為您的資料表名稱。
解決 PG_CRON 擴充功能衝突
如果您在部署中使用 pg_cron 擴充功能,那麼您可能會收到以下錯誤訊息:
「role 'rdsrepladmin' cannot SET ROLE to 'rds_superuser'」
由於 pg_cron 擴充功能的背景工作程序會以超級使用者身分執行並略過唯讀設定,因此可能會發生複寫衝突。
若要解決此問題,請在建立藍/綠部署後,在所有綠色資料庫上關閉 pg_cron 擴充功能。在整個部署期間,請讓該擴充功能維持關閉。