논리적 복제를 사용하여 Aurora PostgreSQL 호환 DB 클러스터를 업그레이드하려면 어떻게 해야 합니까?
논리적 복제를 사용하여 Amazon Aurora PostgreSQL 호환 버전 데이터베이스(DB) 클러스터를 업그레이드하려고 합니다.
간략한 설명
논리적 복제를 사용하여 Aurora PostgreSQL 호환 DB 클러스터의 버전을 업그레이드하려면 원래 소스 클러스터와 새 대상 클러스터 간에 복제를 설정하십시오. 그런 다음, 데이터 변경 사항을 점진적으로 마이그레이션하고 애플리케이션을 새 클러스터로 전환합니다.
해결 방법
소스 클러스터 준비
다음 단계를 완료하십시오.
-
사용자 지정 DB 클러스터 파라미터 그룹에서 rds.logical_replication 파라미터를 1로 설정합니다.
-
다음 쿼리를 실행하여 wal_level이 logical이고 rds.logical_replication이 on인지 확인합니다.
SELECT name,setting FROM pg_settings WHERE name IN ('wal_level','rds.logical_replication');출력 예시:
name | setting ------------------------+--------- rds.logical_replication | on wal_level | logical (2 rows) -
다음 명령을 실행하여 데이터베이스에 게시를 만듭니다.
CREATE PUBLICATION my_publication FOR ALL TABLES;참고: my_publication을 게시 이름으로 바꿉니다.
-
다음 쿼리를 실행하여 게시에서 정보를 검색합니다.
SELECT * FROM pg_publication;출력 예시:
oid | pubname | pubowner | puballtables | pubinsert | pubupdate | pubdelete | pubtruncate | pubviaroot -------+----------------+----------+--------------+-----------+-----------+-----------+-------------+------------ 20493 | my_publication | 16400 | t | t | t | t | t | f (1 row) -
다음 명령을 실행하여 데이터베이스에 복제 슬롯을 만듭니다.
SELECT pg_create_logical_replication_slot('my_replication_slot', 'pgoutput');pg_create_logical_replication_slot의 출력 예시:
pg_create_logical_replication_slot ------------------------------------ (my_replication_slot,0/6EC7260) (1 row)참고: my_replication_slot을 복제 슬롯 이름으로 바꿉니다.
-
다음 명령을 실행하여 현재 DB 클러스터에 있는 복제 슬롯의 목록과 상태를 가져옵니다.
SELECT * FROM pg_replication_slots;pg_replication_slots의 출력 예시:
slot_name | plugin | slot_type | datoid | database | temporary | active | active_pid | xmin | catalog_xmin | restart_lsn | confirmed_flush_lsn | wal_status | safe_wal_size | two_phase ---------------------+----------+-----------+--------+----------+-----------+--------+------------+------+--------------+-------------+---------------------+------------+---------------+----------- my_replication_slot | pgoutput | logical | 16401 | test | f | f | | | 308479 | 0/6EC7208 | 0/6EC7260 | reserved | | f (1 row)
소스 클러스터 복제
Amazon Relational Database Service(Amazon RDS) 콘솔 또는 AWS Command Line Interface(AWS CLI)를 사용하여 소스 Aurora PostgreSQL 호환 DB 클러스터의 클론을 만듭니다.
업그레이드를 위한 클론 준비
자세한 내용은 Aurora PostgreSQL을 새 메이저 버전으로 업그레이드에서 업그레이드를 위한 클론 준비하기를 참조하십시오.
클러스터를 새 버전으로 업그레이드
자세한 내용은 Aurora PostgreSQL을 새 메이저 버전으로 업그레이드에서 클러스터를 새 메이저 버전으로 업그레이드하기를 참조하십시오.
복제를 위한 클론 준비
다음 단계를 완료하십시오.
-
업그레이드 후 클론을 사용할 수 있게 되면 psql을 사용하여 클러스터에 연결한 후 다음 명령을 실행하여 구독을 만듭니다.
CREATE SUBSCRIPTION my_subscription CONNECTION 'postgres://admin_user_name:admin_user_password@source_instance_URL/database' PUBLICATION my_publication WITH (copy_data = false, create_slot = false, enabled = false, connect = true, slot_name = 'my_replication_slot');참고: admin_user_name을 소스 클러스터 사용자 이름으로 바꾸고 admin_user_password를 소스 클러스터 암호로 바꿉니다. 또한 source_instance_URL을 소스 클러스터 엔드포인트로 바꾸고 database를 데이터베이스 이름으로 바꿉니다.
-
다음 쿼리를 실행하여 만든 복제 오리진을 검색합니다.
SELECT * FROM pg_replication_origin;pg_replication_origin의 출력 예시:
roident | roname ---------+---------- 1 | pg_32783 (1 row) -
다음 쿼리를 실행하여 논리적 복제 구독에 대한 정보를 검색합니다.
SELECT * FROM pg_subscription;pg_subscription의 출력 예시:
oid | subdbid | subskiplsn | subname | subowner | subenabled | subbinary | substream | subtwophasestate | subdisableonerr | subpasswordrequired | subrunasowner | subconninfo | subslotname | subsynccommit | subpublications | suborigin -------+---------+------------+-----------------+----------+------------+-----------+-----------+------------------+-----------------+---------------------+---------------+------------------------------------------------------------------------------------------------+---------------------+---------------+------------------+----------- 32783 | 16401 | 0/0 | my_subscription | 16400 | f | f | f | d | f | t | f | postgres://admin_user_name:admin_user_password@source_instance_URL/database | my_replication_slot | off | {my_publication} | any (1 row) -
다음 명령을 실행하여 로그 시퀀스에서 복제의 시작점을 지정합니다.
SELECT pg_replication_origin_advance('roname', 'log_sequence_number');참고: roname을 pg_replication_origin 뷰에서 반환한 식별자로 바꿉니다. log_sequence_number를 로그 시퀀스 번호로 바꿉니다.
출력 예시:pg_replication_origin_advance ------------------------------ (1 row) -
다음 명령을 실행하여 논리적 복제를 활성화합니다.
ALTER SUBSCRIPTION my_subscription ENABLE;참고: my_subscription을 구독 이름으로 바꿉니다.
출력 예시:ALTER SUBSCRIPTION -
다음 명령을 실행하여 복제가 제대로 작동하는지 확인합니다.
SELECT now() AS CURRENT_TIME, slot_name, active, active_pid, pg_size_pretty(pg_wal_lsn_diff(pg_current_wal_lsn(), confirmed_flush_lsn)) AS diff_size, pg_wal_lsn_diff(pg_current_wal_lsn(), confirmed_flush_lsn) AS diff_bytes FROM pg_replication_slots WHERE slot_type = 'logical';출력 예시:
current_time | slot_name | active | active_pid | diff_size | diff_bytes ----------------------+---------------------+--------+------------+-----------+------------ 2024-01-20 10:30:45 | my_replication_slot | t | 12345 | 16 MB | 16777216 (1 row) -
(선택 사항) 다음 명령을 실행하여 복제 지연을 모니터링합니다.
SELECT now() AS CURRENT_TIME, slot_name, active, active_pid, pg_size_pretty(pg_wal_lsn_diff(pg_current_wal_lsn(), confirmed_flush_lsn)) AS diff_size, pg_wal_lsn_diff(pg_current_wal_lsn(), confirmed_flush_lsn) AS diff_bytes FROM pg_replication_slots WHERE slot_type = 'logical';출력 예시:
-[ RECORD 1 ]+------------------------------ current_time | 2025-10-05 22:07:16.077928+00 slot_name | my_replication_slot active | t active_pid | 5392 diff_size | 0 bytes diff_bytes | 0참고: 위 값이 0에 도달하면 복제본은 소스 DB 인스턴스와 일치합니다.
업그레이드 후 작업 수행
자세한 내용은 업그레이드 후 작업 수행을 참조하십시오.
관련 정보
논리적 복제를 사용하여 Amazon RDS for PostgreSQL DB 인스턴스 간에 테이블을 복제하려면 어떻게 해야 합니까?
논리적 복제를 사용하여 관리형 Amazon RDS for PostgreSQL 및 Amazon Aurora를 자체 관리형 PostgreSQL로 복제
