Logical Replication을 사용해 보았습니다.

소개



PostgreSQL 10의 주요 기능에 Logical Replication이라는 것이 있었으므로, 즉시 사용해 보았습니다.

Logical Replication의 작동 방식



Logical Replication은 데이터베이스에 대한 작업 로그를 네트워크를 통해 다른 데이터베이스로 전송하여 데이터를 복제하는 메커니즘입니다. Publish/Subscribe 모델을 사용하여 복제 원본 데이터베이스의 로그를 대상 데이터베이스로 보냅니다. 복제 원본 데이터베이스를 Publisher, 복제 대상 데이터베이스를 Subscriber라고 합니다.
Publisher는 복제할 테이블을 선택하여 해당 테이블에 대한 모든 작업 로그를 게시합니다. Subscriber는 로그를 Subscribe하고 Publisher와 동일한 작업을 테이블에 실행하여 데이터를 복제합니다.
일대일 Logical Replication은 Publisher가 테이블에 대한 작업 로그를 대기열에 넣고 Subscriber가 해당 대기열에서 로그를 검색하여 테이블을 복제한다고 생각할 수 있습니다.

준비한 환경





이번에는 데스크톱 PC와 MacBookAir를 준비했습니다. 데스크톱 PC의 Postgre 데이터베이스에서 MBA의 데이터베이스로 데이터를 복제합니다. 데스크톱 PC는 Publisher이고 MBA는 Subscriber입니다.

Logical Replication 구성 절차



다음 두 가지 사전 준비를 한 다음 Publication 및 Subscription을 만듭니다.
1. Publisher 네트워크 설정
2. wal_level 설정

Publisher 네트워크 설정



Subscriber가 Publisher의 데이터베이스에 액세스할 수 있도록 설정합니다. Publisher의 pg_hba.conf를 열고 하단에 있습니다.# IPv4 local connections: 아래,host all all 192.168.0.5/32 md5를 삽입합니다. 이렇게하면 Subscriber가 Publisher에 연결할 수 있습니다. IP 주소는 적절하게 변경하십시오.

wal_level 설정



Publisher의 postgresql.conf를 열고# - Settings - 아래에 있는 wal_levelwal_level = logical로 변경하십시오. 이렇게 하지 않으면 Logical Replication을 사용할 수 없습니다.

Publication 만들기



먼저 Publisher 데이터베이스에 복제할 테이블을 만듭니다. 여기서는 newtable이라는 테이블을 만들었습니다.create table newtable(name varchar(100), id varchar(20) primary key);primary key 제약 조건을 적용하는 것을 잊지 마십시오. primary key가 없으면, 복제 대상의 테이블에 대해서 Update, Delete 했을 때에 분노됩니다.
그런 다음 Publication을 만듭니다. 여기에서 복제할 테이블을 선택합니다.create publication pubtest for all tables;위의 예에서는 모든 테이블을 복제 대상으로 합니다.

Subscription 만들기



Publisher와 마찬가지로 Sublisher 데이터베이스에도 복제하려는 테이블을 만듭니다.create table newtable(name varchar(100), id varchar(20) primary key);그런 다음 Subscription을 만듭니다. 여기에서 어떤 게시를 Subscribe할지 설정합니다. connection 의 내용은 적절히 변경해 주십시오.create subscription subtest connection 'host=192.168.0.8 port=5432 password=xxxxxxxx' publication pubtest;

동작 확인



Publisher에서 newtable에 데이터를 삽입, 업데이트, 삭제하고 Subscriber에서 선택합니다. 분명히 Publisher의 테이블이 Subscriber에 복제되었습니다.
  • Publisher: 데이터 삽입
  • Subscriber:Select
  • Publisher: 데이터 업데이트
  • Subscriber:Select
  • Publisher: 데이터 삭제
  • Subscriber:Select

  • 결론



    Subscriber가 복제 대상 테이블에 대해 Insert와 같은 작업을 수행하면 Publisher 테이블에도 반영된다는 몇 가지 정보를 보았지만 내 환경에서는 그렇게 할 수 없었습니다. (원래 Publish/Subscribe 모델에서 그런 일은 할 수 없다고 생각합니다.)

    좋은 웹페이지 즐겨찾기