Undergoing

Postgres Database Replication 본문

개발/DB

Postgres Database Replication

Halkrine 2024. 7. 10. 13:08

PostgreSQL Replication Type

  • Physical
    • File Based Log Shipping
       
      • 완성된 WAL File을 standby server로 전달, Recovery를 통해 replication
      • WAL 파일이 정해진 크기를 다 채운 후 새 파일이 생성되어야 기존 WAL 파일이 전달됨
      • WAL 파일이 채워지는 동안 Master와 Standby 간의 데이터 지연 발생 가능
        • archive_timeout param을 통해 WAL 파일을 주기적으로 변화하는 시간 지정하면 WAL이 다 차지 않아도 Archive 발생, 데이터 지연을 줄일 수 있으나 이 경우 archive directory 크기가 증가함
      • Warm Standby
        • standby에 사용자 연결 불가. 읽기 작업 수행 불가(Read-Only, SELECT)
        • 현재는 거의 사용되지 않음
      • Hot Standby
        • standby에 사용자 연결 가능. 읽기 작업 수행 가능(Read-Only, SELECT)
    • Streaming Replication
      • WAL 파일 저장 여부와 관계 없이 WAL Record를 전달
      • Master에는 WAL Record가 , Standby에는 WAL Receiver가 필요
      • transaction commit 후 약간의 지연 시간이 발생하나, File-Based Log Shipping보다는 적음 → File-Based Log Shipping 방식에 비해 최신 상태로 standby 유지 가능
      • 동기화 되지 않은 WAL Record가 포함된 WAL 파일이 삭제될 경우 동기화 진행 불가
      • With Replication Slots
      • Without Replication Slots
    • Physical Replication은 서로 버전이 다를 경우에는 replication 불가
  • Logical

     
    • publisher-subscriber로 구성됨
    • subscript 중인 publisher의 data를 가져온 후 republish하여 스스로 publisher가 될 수 있고, 추가로 subscriber를 만들 수 있음
    • Replication ID(primary key)를 기반으로 하여 Data object와 변경 내역을 복제. Primary Key 혹은 Unique Key를 Replication Id로 삼을 수 있음.
    • 상기 두 가지가 존재하지 않을 경우 REPLICA IDENTITY FULL 옵션을 통해 Table 변경하여 사용할 수 있지만, 변경사항이 생길 때마다 Table을 전부 Replica 하므로 자주 업데이트 되는 Table일 경우 비효율적이고 자원 소모량이 큼
    • 서로 다른 Major 버전 간에도 Replication 가능
    • subscriber에 대한 DML 유형 선택적 사용 가능
    • Table은 publication과 subscription에 대해 동일한 이름을 가져가야 함
    • 양방향 Replication 불가
    • DML만 가능, DDL은 직접 수행해야 함

 

 

 

 

WAL(White-Ahead Log)

  • 변경 내용을 설명하는 Log Record를 storage에 먼저 기록한 후, 이후에 data file에 변경 내용을 적용하는 방식으로 동작
  • Oracle의 Redo-Archive와 비슷한 역할을 수행
  • transaction commit이 발생할 때마다 data page를 disk에 저장팔 필요가 없음
  • data page에 저장되지 않은 변경 내용은 log record에서 실행 취소 할 수 있음
  • 소규모의 transaction을 대량으로 처리할 경우, lof file의 fsync 하나로 여러 가지 transaction을 충분히 commit 할 수 있음
    • fsync : buffer에 저장된 data를 disk로 저장할 때 호출하는 함수
    • data와 metadata의 변경 파일을 하드 디스크에 저장되도록 req. 저장이 완료될 때까지 대기
  • 온라인 백업 및 PITR(Point-In-Time Recovery) 지원
  • 옵션에 따른 동기화 기준은 아래와 같음
  • disk에 WAL 파일을 저장 → memory에 전달 → 지정된 buffer size에 맞게 데이터 적재 후 standby에 전달
    • 단, 이 때 WAL 파일에 10개가 저장되어 있고, standby에 전달할 때 서버가 도중에 죽으면, master에는 10개의 데이터가 전달되나 buffer에 저장된 데이터는 전송 도중 손실될 수 있으므로 무결성 유지가 되지 않음

Load Balancing, Failover

  • Load Balancing : 여러 대의 DB Server가 Clustering 되어 있고, 이들이 Replication 기능을 통해 같은 Data를 가지고 있을 때 Data 조회 명령을 여러 Server에 분산 처리 하여 실행함으로써 전체 Server에 부하를 나눌 수 있음
  • Failover & Failback : Master-Slave Mode에서 Master Server에 문제가 생겼을 때 Slave Server 중 1대가 Master 역할을 수행하는 Failover 기능을 제공하고, 그 역인 Fail-Back 기능도 제공함
    • PostgreSQL은 사용자가 옵션을 설정하지 않는 이상 Auto-Failover를 지원하지 않음

High Availability, Load Balancing, and Replication Feature Matrix

HA, L/B, Replication 3rd Party

  • Replication
    • Hevo Data
    • EDB Postgres Replication
    • Airbyte
    • repmgr(made by EDB)
  • Load Balance
    • PgPool(Also support Pooling)
    • PgBouncer(Also Support Pooling)PostgreSQL Replication Type
      •  

'개발 > DB' 카테고리의 다른 글

OrioleDB  (0) 2024.07.12
PostGraphile  (0) 2024.07.11
Postgres Source 디버깅  (0) 2024.07.03
PG-Strom  (0) 2022.12.07
PostgreSQL - GiST  (0) 2021.12.08