Amazon Relational Database Service(Amazon RDS) for PostgreSQL 및 Amazon Aurora PostgreSQL 호환 버전에서 블루/그린 배포를 만들면 발생하는 오류를 해결하려고 합니다.
해결 방법
블루/그린 배포의 제한 사항 검토 및 오류 식별
Amazon RDS 및 Aurora PostgreSQL 호환의 블루/그린 배포 제한 사항을 검토합니다.
배포에 대한 특정 오류 메시지를 찾으려면 다음 단계를 완료하십시오.
- Amazon RDS 콘솔을 엽니다.
- 탐색 창에서 데이터베이스를 선택합니다.
- 블루/그린 배포를 선택합니다.
- 로그 및 이벤트 탭을 선택합니다.
- 로그에서 오류 메시지를 검토합니다.
논리적 복제 구성 오류 해결
블루/그린 배포를 만들었지만 논리적 복제를 활성화하지 않은 경우 다음과 같은 오류 메시지를 받습니다.
"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로 설정합니다.
- 사용자 지정 파라미터 그룹을 DB 인스턴스에 적용합니다.
참고: 기본 파라미터 그룹 값은 수정할 수 없습니다.
호환되지 않는 복제 파라미터 해결
데이터베이스 수에 비해 복제 슬롯이 충분하지 않은 블루/그린 배포를 만들면 다음과 같은 오류 메시지를 받습니다.
"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 확장을 비활성화하십시오. 배포 전반에 걸쳐 확장을 비활성화된 상태로 유지합니다.