본문 바로가기
PostgreSQL

PostgreSQL의 고가용성 | high availability of PostgreSQL

by 울라불라오미짱 2023. 6. 1.
반응형

고가용성(High Availability)

개요

고가용성이란 서버와 네트워크, 프로그램 등의 정보 시스템이 오랜 기간 동안 지속적으로 정상 운영이 가능한 성질을 말합니다.

  • 두가지 서버로 구성됩니다.
    • read/write, master, primary: 데이터 수정 가능한 서버
    • standby, secondary: primary 서버의 변경사항을 추적하여 반영하는 서버
    → DB마다 다 다르지만 보통 PostgreSQL 은 primary와 standby를 많이 사용하는 듯 합니다!!
  • 두 서버는 함께 작동하며 primary 서버가 문제가 발생할 경우 standby서버가 인계 받아 동작합니다.
    • warm standby server : primary서버로 승격 될 때 까지 연결 불가
    • hot standby server : 연결 허용 및 읽기 전용 쿼리 제공
  • 서버간 로그 전달 방식은 다음과 같이 구분됩니다.구분 설명
    구분 설명
    동기식 - 모든 서버가 트랜잭션을 커밋할 때까지 데이터 수정 트랜잭션이 커밋된 것으로 간주되지 않습니다.
    - 장애 조치(failover)로 인해 데이터가 손실되지 않고 서버에 관계없이 일관된 결과를 반환합니다.
    비동기식  - 커밋 시간과 다른 서버로의 전파 사이에 약간의 지연이 발생하여 백업 서버로 전환 할 때 일부 트랜잭션이 손실 될 수 있으며, 로드밸런싱 된 서버가 오래된 결과를 반환합니다.
    - 동기식 통신이 너무 느릴 때 사용됩니다.

여러 해결 기법 비교

PostgreSQL에는 고가용성을 위한 여러 솔루션들이 있습니다.

  1. 공유디스크 failover
    • 하나의 shared disk를 사용하며, primary 서버만 액세스 합니다.
    • failover 발생시, standby 서버가 액세스하며 데이터 손실 없이 신속한 조치 가능합니다.
  2. 파일 시스템 복제
    • 파일 시스템의 모든 변경하상을 동일하게 구성된 다른 서버에 미러링합니다.
    • standby 서버의 WRITE는 primary 서버와 동일한 순서로 진행됩니다.
  3. WAL Shipping
    • standby 서버는 Write-Ahead Log 라는 레코드 스트림을 읽어 동기화를 수행합니다.
    • file-based log shipping, streaming replication 방식으로 사용 가능합니다.
  4. Logical Replication
    • Replication ID(기본 : primary key)를 기반으로 데이터 오브젝트 및 변경내용을 복제합니다.
    • primary - second 모델과 다른, N : N의 publisher - subscriber 모델 사용합니다.
  5. Trigger-based Replication
    • 데이터 변경이 발생할 경우, primary 서버가 처리하고 Trigger를 통해 비동기적으로 standby에 복제합니다.
    • 테이블 단위 컨트롤 가능하며, DDL 복제는 지원되지 않습니다.
    • Slony-I를 이용하여 구현 가능합니다.
  6. statemant-based
    • 미들웨어 프로그램이 모든 SQL 쿼리를 받아 HA 구성된 서버로 로드 밸런싱하게 전송 가능합니다.
    • pgpool-II을 이용하여 구현 가능합니다.
  7. aynchronous multimaster
    • 모든 SQL 쿼리를 받아 HA 구성된 서버로 로드 밸런싱하게 전송 가능
    • burcardo을 이용하여 구현 가능합니다.
  8. synchronous multimaster
    • 각 서버는 쓰기 요청을 수락할 수 있으며 수정된 데이터는 각 트랜잭션이 커밋되기 전에 원본 서버에서 다른 모든 서버로 전송됩니다.
    • 읽기 요청은 모든 서버로 보낼 수 있습니다.
    • 쓰기 작업이 많으면 과도한 잠금 및 커밋 지연이 발생하여 성능이 저하될 수 있습니다.
    • PostgreSQL은 이러한 유형의 복제를 제공하지 않지만 PostgreSQL 2단계 커밋( PREPARE TRANSACTION 및 COMMIT PREPARED )을 사용하여 애플리케이션 코드 또는 미들웨어에서 이를 구현할 수 있습니다.
반응형