반응형
PostgreSQL의 고가용성을 높이기 위한 방법 중에 하나인 Logical replication에 대해 알아보자!
Logical Replication 이란?
ID(보통 기본 키(primary key))를 기반으로 데이터 오브젝트 및 해당 변경 내용을 복제하는 방법입니다.

Logical Replication의 특징
- N:N의 subscribers(구독자)와 publisher(게시자) 모델을 사용합니다.
- 테이블 단위로 publisher 데이터의 스냅샷을 만들어 subscriber 의 데이터베이스에 복제합니다.
- publisher의 wal sender를 통해 logical message가 subscriber에 전달되고, logical replication launcher가 생성하는 logical replication worker를 통해 변경 사항을 반영합니다.
Logical Replication 구축
- 우선 publisher 와 subscribaer 서버로 각각 설정할 서버 2개가 필요합니다!
- 그리고 두 개의 서버가 다 PostgreSQL이 설치된 상태여야 합니다! 둘 다 initdb 커맨드를 실행하여 데이터베이스 클러스터를 생성한 상태에서 진행해보도록 하겠습니다!
| publish | subscribe | |
| IP | 192.168.40.133 | 192.168.40.134 |
publish 서버 구성
- wal_level 파라미터 수정
Logical Replication 을 사용하기 위해서는 wal_level 파라미터가 logical 이어야합니다.
wal_level = logical
- 소스 데이터베이스 및 테이블을 생성
postgres=# CREATE DATABASE logical;
\\c logical
logical=> CREATE TABLE test_table(x int primary key, y int);
- 유저 생성 및 권한 부여
두 서버간에 데이터를 전송하려면 replication 권한이 있는 역할을 생성하고 테이블 test_table 에 대한 모든 권한을 부여합니다.
logical=> CREATE USER repluser WITH REPLICATION PASSWORD 'password' LOGIN;
logical=> GRANT ALL ON test_table TO repluser;
- pg_hba.conf 수정
subscribe 노드가 publish 노드에 접속하는 것을 pg_hba.conf 파일을 수정하여 허용합니다. 수정 후, reload 하여 적용시켜 줍니다.
host replication repluser 192.168.40.134/32 trust
적용이 잘 되었는지 psql로 접속을 시도해봅니다.
psql -h 192.168.40.133 -U repluser -d logical
psql (14.2)
Type "help" for help.
logical=>
- publication 생성
접속이 잘 되는것을 확인했으면 publication을 생성합니다.
logical=> CREATE PUBLICATION logical_pub FOR TABLE test_table;
publish 서버 구성
- 대상 데이터베이스 및 테이블 생성
postgres=# CREATE DATABASE logical;
postgres=# \\c logical
logical=# CREATE TABLE test_table(x int primary key, y int);
- subscription 생성
postgres=# CREATE SUBSCRIPTION logical_sub CONNECTION 'host= 192.168.40.133 port=5432 password=password user=repluser dbname=logical' PUBLICATION logical_pub;
Logical Replication 확인
INSERT 테스트
logical=# INSERT INTO test_table VALUES(30,20);
publish 서버
logical=# SELECT * FROM test_table;
x | y
----+----
30 | 20
(1 row)
subscribe 서버
logical=# SELECT * FROM test_table;
x | y
----+----
30 | 20
(1 row)
UPDATE 테스트
logical=# UPDATE test_table SET x=10 WHERE y=20;
publish 서버
logical=# SELECT * FROM test_table;
x | y
----+----
10 | 20
(1 row)
subscribe 서버
logical=# SELECT * FROM test_table;
x | y
----+----
10 | 20
(1 row)
반응형
'PostgreSQL' 카테고리의 다른 글
| pgpool-II(2) 파라미터 | PostgreSQL14 HA Tool Parameters (2) | 2023.06.15 |
|---|---|
| pgpool-II Overview | PostgreSQL 14 HA Tool (0) | 2023.06.14 |
| PostgreSQL 14 스트리밍 복제 - 장애 복구 | Streaming Replication - Failover (2) | 2023.06.07 |
| PostgreSQL14 Replication 관련 파라미터 (0) | 2023.06.05 |
| PostgreSQL 14 Streaming Replication (0) | 2023.06.03 |