RDS for PostgreSQL DB 인스턴스용 논리적 복제 설정
다음 절차는 RDS for PostgreSQL DB 인스턴스 간에 논리적 복제를 시작하는 방법을 보여줍니다. 다음 단계에서는 원본(게시자)과 대상(구독자) 모두에 pglogical 확장 설정에서 설명하는 방법에 따라 pglogical
확장이 설정되어 있다고 가정합니다.
게시자 노드를 생성하고 복제할 테이블을 정의하는 방법
이 단계에서는 RDS for PostgreSQL DB 인스턴스에 데이터베이스 하나가 있고 이러한 데이터베이스에는 다른 노드에 복제할 하나 이상의 테이블이 있다고 가정합니다. 구독자의 테이블 구조를 게시자에서 다시 만들어야 하므로, 필요한 경우 먼저 테이블 구조를 가져와야 합니다. 이렇게 하려면 psq1
메타 명령을 사용한 다음 구독자 인스턴스에서 동일한 테이블을 생성해야 합니다. 다음 절차에서는 시연을 위해 게시자(원본)에서 예제 테이블을 만듭니다.
-
psql
을 사용하여 구독자용 소스로 사용할 테이블이 있는 인스턴스에 연결합니다.psql --host=
source-instance
.aws-region
.rds.amazonaws.com --port=5432 --username=postgres
--password --dbname=labdb
복제하려는 기존 테이블이 없는 경우 다음과 같이 샘플 테이블을 생성할 수 있습니다.
-
다음 SQL 문을 사용하여 예제 테이블을 생성합니다.
CREATE TABLE docs_lab_table (a int PRIMARY KEY);
-
다음 SQL 문을 사용하여 테이블에 생성된 데이터를 입력합니다.
INSERT INTO docs_lab_table VALUES (generate_series(1,5000));
INSERT 0 5000
-
다음 SQL 문을 사용하여 테이블에 데이터가 있는지 확인합니다.
SELECT count(*) FROM docs_lab_table;
-
-
다음과 같이 이 RDS for PostgreSQL DB 인스턴스를 게시자 노드로 식별합니다.
SELECT pglogical.create_node( node_name := '
docs_lab_provider
', dsn := 'host=source-instance
.aws-region
.rds.amazonaws.com port=5432 dbname=labdb
');create_node ------------- 3410995529 (1 row)
-
복제할 테이블을 기본 복제 세트에 추가합니다. 복제 세트에 대한 자세한 내용은 pglogical 설명서의 복제 세트
를 참조하십시오. SELECT pglogical.replication_set_add_table('default', '
docs_lab_table
', 'true', NULL, NULL);replication_set_add_table --------------------------- t (1 row)
게시자 노드 설정이 완료되었습니다. 이제 게시자로부터 업데이트를 수신하도록 구독자 노드를 설정할 수 있습니다.
구독자 노드를 설정하고, 업데이트를 수신할 구독을 만드는 방법
이 단계에서는 RDS for PostgreSQL DB 인스턴스가 pglogical
확장을 이용해 설정되었다고 가정합니다. 자세한 내용은 pglogical 확장 설정 단원을 참조하십시오.
-
psql
을 사용하여 게시자로부터 업데이트를 수신할 인스턴스에 연결합니다.psql --host=
target-instance
.aws-region
.rds.amazonaws.com --port=5432 --username=postgres
--password --dbname=labdb
-
구독자 RDS for PostgreSQL DB 인스턴스에서 게시자에 존재하는 것과 동일한 테이블을 만듭니다. 이 예제에서 테이블은
docs_lab_table
입니다. 다음과 같이 테이블을 만들 수 있습니다.CREATE TABLE docs_lab_table (a int PRIMARY KEY);
-
이 테이블이 비어 있는지 확인합니다.
SELECT count(*) FROM docs_lab_table;
count ------- 0 (1 row)
-
다음과 같이 이 RDS for PostgreSQL DB 인스턴스를 구독자 노드로 식별합니다.
SELECT pglogical.create_node( node_name := '
docs_lab_target
', dsn := 'host=target-instance
.aws-region
.rds.amazonaws.com port=5432 sslmode=require dbname=labdb
user=postgres
password=********
');create_node ------------- 2182738256 (1 row)
-
구독을 생성합니다.
SELECT pglogical.create_subscription( subscription_name := 'docs_lab_subscription', provider_dsn := 'host=
source-instance
.aws-region
.rds.amazonaws.com port=5432 sslmode=require dbname=labdb
user=postgres
password=*******
', replication_sets := ARRAY['default'], synchronize_data := true, forward_origins := '{}' );create_subscription --------------------- 1038357190 (1 row)
이 단계를 완료하면 게시자 테이블의 데이터가 구독자 테이블에서 생성됩니다. 다음 SQL 쿼리를 사용하면 이 문제가 발생했는지 확인할 수 있습니다.
SELECT count(*) FROM docs_lab_table;
count ------- 5000 (1 row)
이 시점 이후로는 게시자의 테이블에 적용한 변경 사항이 구독자의 테이블에 복제됩니다.