跳至内容

如何解决在 Amazon RDS for PostgreSQL 和 Aurora PostgreSQL 兼容版中创建蓝绿部署时出现的错误?

2 分钟阅读
0

我想解决在 Amazon Relational Database Service (Amazon RDS) for PostgreSQL 和 Amazon Aurora PostgreSQL 兼容版中创建蓝绿部署时出现的错误。

解决方法

查看蓝绿部署的限制并识别错误

查看 Amazon RDSAurora PostgreSQL 兼容版的蓝绿部署限制。

要查找部署的特定错误消息,请完成以下步骤:

  1. 打开 Amazon RDS 控制台
  2. 在导航窗格中,选择 Databases(数据库)。
  3. 选择您的蓝绿部署。
  4. 选择 Logs & events(日志和事件)选项卡。
  5. 查看日志中是否有错误消息。

解决逻辑复制配置错误

如果您创建了蓝绿部署但未启用逻辑复制,那么您会收到以下错误消息:

"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."

要启用逻辑复制,请完成以下步骤:

  1. 创建自定义参数组修改现有组
  2. rds.logical_replication 参数设置为 1。
  3. 将自定义参数组应用于您的数据库实例。

**注意:**您无法修改默认参数组的值。

解决不兼容的复制参数

如果您创建的蓝绿部署的复制槽不足以容纳数据库数量,那么您会收到以下错误消息:

"Creation of blue/green deployment failed due to incompatible parameter(s): max_replication_slots, and max_logical_replication_workers."

要解决此问题,请完成以下步骤:

  1. 运行以下查询以查看您的数据库列表:

    SELECT datname FROM pg_database;
  2. 修改自定义参数组中的以下参数:
    max_replication_slots 设置为一个高于数据库总数的值。
    max_wal_sendersmax_logical_replication_workers 设置为等于活动逻辑复制槽数量的值。
    max_worker_processes 设置为等于 max_logical_replication_workersautovacuum_max_workersmax_parallel_workers 之和的值。

  3. 创建新的蓝绿部署

解决外部复制槽错误

如果在外部复制槽存在时创建蓝绿部署,那么您会收到以下错误消息:

"Replica creation is canceled due to external replication."

要解决此问题,请完成以下步骤:

  1. 运行以下命令检查现有的复制槽:

    SELECT * FROM pg_replication_slots WHERE slot_type NOT LIKE 'physical';
  2. 运行以下命令删除已识别的复制槽:

    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 扩展。在整个部署过程中保持该扩展处于关闭状态。