메이저 업그레이드 후 논리적 복제 재설정
논리적 복제용 게시자 노드로 설정된 RDS for PostgreSQL DB 인스턴스의 메이저 버전 업그레이드를 수행하려면, 먼저 활성화되지 않는 슬롯을 포함한 모든 복제 슬롯을 삭제해야 합니다. 게시자 노드에서 데이터베이스 트랜잭션을 일시적으로 전환하고, 복제 슬롯을 삭제하고, RDS for PostgreSQL DB인스턴스를 업그레이드한 다음 복제를 다시 설정하고 재시작하는 것이 좋습니다.
복제 슬롯은 게시자 노드에서만 호스팅됩니다. 논리적 복제 시나리오에서 RDS for PostgreSQL 구독자 노드는 삭제할 슬롯이 없지만, 게시자에 대한 구독이 있는 구독자 노드로 지정된 동안에는 메이저 버전으로 업그레이드할 수 없습니다. RDS for PostgreSQL를 구독자 노드로 업그레이드하기 전에 구독과 노드를 삭제합니다. 자세한 내용은 RDS for PostgreSQL용 논리적 복제 슬롯 관리 섹션을 참조하세요.
논리적 복제가 중단되었는지 확인
다음과 같이 게시자 노드 또는 구독자 노드를 쿼리하면 복제 프로세스 중단 여부를 확인할 수 있습니다.
게시자 노드를 확인하는 방법
-
psql
을 사용하여 게시자 노드에 연결한 다음pg_replication_slots
함수를 쿼리합니다. 활성 열의 값을 기록해 둡니다. 일반적으로 이 값은t
(true)를 반환하며, 복제가 활성 상태라는 뜻입니다. 쿼리가f
(false)를 반환한다면 구독자로의 복제가 중단되었다는 뜻입니다.SELECT slot_name,plugin,slot_type,active FROM pg_replication_slots;
slot_name | plugin | slot_type | active -------------------------------------------+------------------+-----------+-------- pgl_labdb_docs_labcb4fa94_docs_lab3de412c | pglogical_output | logical | f (1 row)
구독자 노드를 확인하는 방법
구독자 노드에서는 세 가지 방법으로 복제 상태를 확인할 수 있습니다.
-
구독자 노드의 PostgreSQL 로그를 확인하여 실패 메시지를 찾습니다. 로그는 다음과 같이 종료 코드 1을 포함하는 메시지를 이용해 실패를 식별합니다.
2022-07-06 16:17:03 UTC::@:[7361]:LOG: background worker "pglogical apply 16404:2880255011" (PID 14610) exited with exit code 1 2022-07-06 16:19:44 UTC::@:[7361]:LOG: background worker "pglogical apply 16404:2880255011" (PID 21783) exited with exit code 1
-
pg_replication_origin
함수를 쿼리합니다. 다음과 같이psql
을 사용하여 구독자 노드의 데이터베이스에 연결하고pg_replication_origin
함수를 쿼리합니다.SELECT * FROM pg_replication_origin;
roident | roname ---------+-------- (0 rows)
결과 집합이 비어 있다면 복제가 중단되었다는 뜻입니다. 일반적인 출력은 다음과 같습니다.
roident | roname ---------+---------------------------------------------------- 1 | pgl_labdb_docs_labcb4fa94_docs_lab3de412c (1 row)
-
다음 예제와 같이
pglogical.show_subscription_status
함수를 쿼리합니다.SELECT subscription_name,status,slot_name FROM pglogical.show_subscription_status();
subscription_name | status | slot_name ---====----------------+--------+------------------------------------- docs_lab_subscription | down | pgl_labdb_docs_labcb4fa94_docs_lab3de412c (1 row)
이 출력은 복제가 중단되었음을 보여줍니다. 상태는
down
입니다. 일반적으로 출력에서는 상태가replicating
으로 표시됩니다.
논리적 복제 프로세스가 중단된 경우 다음 단계에 따라 복제를 재설정할 수 있습니다.
게시자와 구독자 노드 간의 논리적 복제를 재설정하는 방법
복제를 다시 설정하려면 먼저 게시자 노드에서 구독자의 연결을 끊은 다음, 다음 단계의 설명에 따라 구독을 다시 설정합니다.
-
다음과 같이
psql
을 사용하여 구독자 노드에 연결합니다.psql --host=
222222222222
.aws-region
.rds.amazonaws.com --port=5432 --username=postgres
--password --dbname=labdb
-
pglogical.alter_subscription_disable
함수를 사용하여 구독을 비활성화합니다.SELECT pglogical.alter_subscription_disable('docs_lab_subscription',true);
alter_subscription_disable ---------------------------- t (1 row)
-
다음과 같이
pg_replication_origin
을 쿼리하여 게시자 노드의 식별자를 가져옵니다.SELECT * FROM pg_replication_origin;
roident | roname ---------+------------------------------------- 1 | pgl_labdb_docs_labcb4fa94_docs_lab3de412c (1 row)
-
이전 단계의 응답을
pg_replication_origin_create
명령과 함께 사용하여, 구독을 다시 설정할 때 사용할 수 있는 식별자를 할당합니다.SELECT pg_replication_origin_create('pgl_labdb_docs_labcb4fa94_docs_lab3de412c');
pg_replication_origin_create ------------------------------ 1 (1 row)
-
다음 예제와 같이 구독의 이름을
true
상태로 전달하여 구독을 활성화합니다.SELECT pglogical.alter_subscription_enable('docs_lab_subscription',true);
alter_subscription_enable --------------------------- t (1 row)
노드의 상태를 확인합니다. 노드의 상태는 이 예제에서처럼 replicating
이어야 합니다.
SELECT subscription_name,status,slot_name FROM pglogical.show_subscription_status();
subscription_name | status | slot_name -------------------------------+-------------+------------------------------------- docs_lab_subscription | replicating | pgl_labdb_docs_lab98f517b_docs_lab3de412c (1 row)
게시자 노드에서 구독자 복제 슬롯의 상태를 확인합니다. 슬롯의 active
열은 t
(true)를 반환해야 하며, 복제가 다시 설정되었다는 뜻입니다.
SELECT slot_name,plugin,slot_type,active FROM pg_replication_slots;
slot_name | plugin | slot_type | active -------------------------------------------+------------------+-----------+-------- pgl_labdb_docs_lab98f517b_docs_lab3de412c | pglogical_output | logical | t (1 row)