logo
문의하기
서비스리소스블로그아카데미
logo
문의하기
logo

데이터와 IT 흐름을 읽는 시선,
뉴스레터 EXEM View 구독하기

Subscribe

주식회사 엑셈

서울시 강서구 마곡중앙8로5길 40

Tel 02-6203-6300 ㅣ Fax 02-6203-6301

ⓒ EXEM Co., Ltd. All Rights Reserved.
개인정보 처리방침서비스 이용약관
  • 서비스

    • Database
    • Application
    • AIOps
    • LLMOps
    • Big Data
    • All-in-One
    • Consulting
  • 신청

    • 세미나
    • 사옥 투어
  • 회사

    • 기업 소개
    • 채용 안내
    • IR
    • 오시는 길
  • 자료

    • 제품 브로슈어
    • 제품 살펴보기
    • 도서 실습자료
  • awsaws
  • microsoftmicrosoft
  • oracleoracle
  • naver-cloudnaver-cloud
PostgreSQL New Feature - 16 Release (3)
PostgreSQL New Feature - 16 Release (3)

PostgreSQL New Feature - 16 Release (3)

이번 문서에서는 PostgreSQL 16 Release New Feature 중 Replication에 대한 내용을 다룹니다.
 

Logical Replication From Standby Server

PostgreSQL 15 버전까지는 Primary Server에서만 Logical Replication의 게시(Publication)을 구성할 수 있었습니다. Replication이 다중으로 구성되어 있다면 그 만큼 Primary Server의 부하도 증가합니다.
notion image
 
PostgreSQL 16 버전부터는 Standby Server에서 게시(Publication)을 구성할 수 있습니다. 이 기능을 통해 Primary Server의 Replication 부하를 감소 시킬 수 있습니다.
📢 Primary → Physical Replication → Standby → Logical Replication → Standby 구성은 PostgreSQL 16 버전부터 구성 가능합니다.
notion image
📢 Primary → Logical Replication → Standby → Logical Replication → Standby 구성은 PostgreSQL 16 버전 이하에서도 구성 가능합니다.
notion image
📢 설명의 용이성을 위하여 Primary, Standby, Slave로 서버 구분을 하였습니다.
 
 

Standby Server에 Logical Replication 구성

PostgreSQL 16 버전부터는 Standby Server에서 Logical Replication 구성이 가능 합니다. 이러한 구성을 위해서는 Primary Server는 wal_level = logical로 설정 되어 있어야 합니다.
Primary Server Replication 설정
📢 Standby Server Read-Only로 DDL 수행이 불가 하기 때문에 Primary Server에서 Logical Replication Role과 게시(Publication)을 생성합니다. 생성된 Role과 게시(Publication)는 Streaming Replication을 통해 Standby Server에 적용됩니다.
 
Standby Server Physical Replication 구성 및 Logical Replication 구성
 
Slave Server Logical Replication 구성
PostgreSQL 15 버전에서는 Slave Server에 구독(Subscription) 생성이 불가능 합니다.
PostgreSQL 16 버전부터는 Slave Server에 구독(Subscription) 생성이 가능합니다.
📢 pg_log_standby_snapshot() Function
bgwriter나 Checkpointer가 WAL에 기록을 기다릴 필요 없이 실행 중인 트랜잭션의 Snapshot을 찍어 WAL에 기록합니다. 즉, Logical Replication Slot 생성 속도를 높이기 위해 이 함수를 사용할 수 있습니다.
 
 

Logical Replication Parallel

PostgreSQL 16 버전에서 Parallel Apply Worker에 의한 Logical Replication이 가능합니다. 구독(Subscription) 생성 시 streming = parallel 옵션이 추가 되었습니다. 이로 인해 pg_subscription Catalog의 컬럼의 변화도 있습니다.
구분
Column
Description
수정
substream
Data Type이 boolean → char로 변경 f : 진행중인 트랜잭션의 Streming을 허용하지 않음 t : 진행중인 트랜잭션의 Streming을 허용 p : 사용 가능한 경우 Parallel Apply Worker를 통해 직접 변경사항 적용(사용 가능한 Parallel Apply Worker가 없는 경우 t와 동일)
추가
subpasswordrequired
인증을 위한 비밀번호 필요 여부
추가
subrunasowner
Subscription Owner의 권한으로 Subscription 사용 여부
추가
suborigin
none : Local에서만 생성된 데이터 전송 any : Local + Replication으로 생성된 데이터 전송
 
 

양방향 Logical Replication

PostgreSQL 16 버전 부터 양방향 Logical Replication이 가능합니다. 즉, Node 1은 Node 2에서 변경된 내용을 수신하여 적용하고 Node 1에서 변경된 내용을 Node 2로 전송하여 적용 시킬 수 있습니다. 반대로 Node 2는 Node 1에서 변경된 내용을 수신하여 적용하고 Node 2에서 변경된 내용을 Node 1으로 전송하여 적용 시킬 수 있습니다. 양방향 Logical Replication을 통해 두 Node 중 하나에서 수행된 모든 수정 사항을 두 Node 모두에 미러링되어 동기화 할 수 있습니다.
notion image
 
PostgreSQL 15 버전 까지는 이 기능을 지원하지 않기 때문에 Apply Worker는 데이터가 Local에서 생성되었는지 Replication을 통해 생성되었는지 알지 못합니다. 따라서 아래와 같은 무한 루프 상태가 됩니다.
  1. Node 1에서 변경된 내용을 Node2로 전송 → Node2 데이터 적용
  1. Node 2에서 변경된 내용을 Node1으로 전송 → Node1 데이터 적용
  1. 1 → 2 → 1 → 2 → 1 → 2 → ... 무한 루프 발생
notion image
 
PostgreSQL 16에서 Subscription 생성 Syntax에 origin 파라미터가 도입되어 Apply Worker는 데이터가 Local에서 생성되었는지 Replication을 통해 생성되었는지 알 수 있게 되어 무한 루프 상태가 발생하지 않습니다.
origin 파라미터는 두 개의 값을 지원합니다.
  • none : Local에서만 생성된 데이터만 전송하도록 요청 (무한 루프 방지)
  • any : Local + Replication으로 생성된 데이터 전송 (무한 루프 발생)
 
 

양방향 Logical Replication Test

Node 1 : Logical Replication 설정 후 재기동
Node 2 : Logical Replication 설정 후 재기동
Node 1 : Subscription 설정
Node 2 : Subscription 설정
양방향 Logical Replication 확인
📢 PostgreSQL 15에서는 무한 루프가 발생합니다.
PostgreSQL 15 양방향 Logical Replication 확인
 
 

WAL Sender 프로세스 이름 변경

PostgreSQL 16 버전 부터 WAL Sender 프로세스의 이름이 변경되었습니다. 기존에는 Logical Replication에 대한 정보만 표시 되었지만, dbname이 추가되어 표시됩니다.
 
 

 
 
함께 보면 좋은 아티클
PostgreSQL New Feature - 17 Release (1) | 엑셈
PostgreSQL New Feature 17 Release 알아보기
PostgreSQL New Feature - 17 Release (1) | 엑셈
https://ex-em.com/ko/academy/PostgreSQL-NewFeature-4
PostgreSQL New Feature - 17 Release (1) | 엑셈
PostgreSQL New Feature - 16 Release (2) | 엑셈
PostgreSQL New Feature 16 Release 알아보기
PostgreSQL New Feature - 16 Release (2) | 엑셈
https://ex-em.com/ko/academy/PostgreSQL-NewFeature-2
PostgreSQL New Feature - 16 Release (2) | 엑셈
Table of Contents
Logical Replication From Standby ServerStandby Server에 Logical Replication 구성Logical Replication Parallel양방향 Logical Replication양방향 Logical Replication TestWAL Sender 프로세스 이름 변경