我想解决在 Amazon Relational Database Service (Amazon RDS) for PostgreSQL 和 Amazon Aurora PostgreSQL 兼容版中创建蓝绿部署时出现的错误。
解决方法
查看蓝绿部署的限制并识别错误
查看 Amazon RDS 和 Aurora PostgreSQL 兼容版的蓝绿部署限制。
要查找部署的特定错误消息,请完成以下步骤:
- 打开 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 扩展。在整个部署过程中保持该扩展处于关闭状态。