top of page
  • Instagram

PostgreSQL 시계열 데이터베이스 고가용성(HA) 구축 방안 – TimescaleDB + Patroni

최종 수정일: 5월 4일

들어가며

IoT 센서, 서버 모니터링, 금융 거래 로그 등 시계열(Time-Series) 데이터는 매초 수만 건씩 쌓입니다. 이 데이터는 빠른 적재와 실시간 분석을 요구합니다. PostgreSQL은 안정성과 확장성을 갖춘 RDBMS입니다. 그러나 대규모 시계열 워크로드를 처리하려면 전용 확장과 고가용성(HA) 아키텍처가 필수입니다.


본 글에서는 TimescaleDB 확장과 Patroni + etcd 기반의 자동 페일오버 클러스터를 결합하여 운영 환경에서 검증된 고가용성 시계열 아키텍처를 소개합니다.


왜 TimescaleDB인가?

TimescaleDB는 PostgreSQL 위에서 동작하는 시계열 전용 확장입니다. 기존 SQL 문법을 그대로 사용하면서도 시계열에 최적화된 기능을 제공합니다. 핵심 기능은 다음과 같습니다.


  • 하이퍼테이블(Hypertable): 시간 기반 자동 파티셔닝으로 INSERT 성능을 극대화합니다. 오래된 데이터를 자동으로 청크(Chunk) 단위로 관리합니다. 수십억 건의 레코드도 일반 테이블처럼 쿼리할 수 있습니다.

  • 연속 집계(Continuous Aggregates): 실시간 집계 뷰를 자동 갱신하여 대시보드 쿼리 응답 시간을 수 초 이내로 유지합니다. 매번 원본 데이터를 스캔하지 않으므로 CPU와 I/O 부하를 대폭 줄입니다.

  • 네이티브 압축: 오래된 청크를 열 지향(Columnar) 압축하여 스토리지 비용을 90% 이상 절감합니다. 압축된 데이터도 SQL로 직접 조회 가능하므로 별도의 아카이브 파이프라인이 불필요합니다.


TimescaleDB 테이블 구성 전략 - Hypertable, Continuous Aggregate, 압축, 보존 정책

[그림] TimescaleDB 기반 DBMS 테이블 구성 전략


Patroni + etcd 기반 고가용성 아키텍처

TimescaleDB는 PostgreSQL의 스트리밍 복제(Streaming Replication)를 그대로 활용할 수 있습니다. Patroni를 이용한 자동 페일오버 구성이 자연스럽게 적용됩니다.


아키텍처의 핵심 구성 요소는 다음과 같습니다.


  • Patroni: 각 PostgreSQL 노드에 에이전트로 설치되어 리더 선출, 자동 페일오버, 복제본 관리를 담당합니다. Primary 장애 감지 시 30초 이내에 Standby를 새 Primary로 승격시킵니다.

  • etcd 클러스터: 3노드 이상의 etcd가 분산 합의(Raft)를 통해 클러스터 상태를 저장합니다. 리더 정보와 구성 메타데이터를 안전하게 관리하며, etcd 자체도 고가용성을 보장합니다.

  • HAProxy / PgBouncer: 애플리케이션 연결을 자동으로 현재 Primary로 라우팅합니다. 읽기 전용 쿼리는 Standby로 분산하여 Primary의 부하를 줄이고 전체 클러스터의 처리량을 높입니다.


PostgreSQL HA 클러스터 구성도 - Patroni, HAProxy, Primary/Standby 아키텍처

[그림] Patroni + etcd 기반 PostgreSQL HA 클러스터 구성도


권장 배포 구성

운영 환경에서 권장하는 최소 구성은 다음과 같습니다. PostgreSQL + TimescaleDB 노드 3대(Primary 1 + Standby 2)에 Patroni 에이전트를 설치합니다. 별도의 etcd 3노드 클러스터로 상태를 관리합니다. 앞단에 HAProxy 2대를 Active-Standby(Keepalived VIP)로 구성하면 단일 장애점(SPOF)이 제거됩니다.


Patroni의 patroni.yml 설정에서 `synchronous_mode: true`를 활성화하면 동기식 복제가 적용됩니다. 이를 통해 데이터 손실 없는(Zero Data Loss) 페일오버가 가능합니다. 다만 동기 복제는 쓰기 지연이 발생할 수 있습니다. 시계열 데이터의 특성에 따라 비동기 복제와 적절히 선택해야 합니다.


시계열 워크로드 성능 튜닝 포인트

고가용성 아키텍처 위에서 최적의 성능을 얻기 위한 주요 튜닝 포인트입니다.


  • 청크 간격 최적화: 데이터 유입 속도에 맞춰 청크 간격(chunk_time_interval)을 조정합니다. 일반적으로 하루에 수GB 이상이면 1시간~6시간, 그 이하면 1일~7일이 적절합니다.

  • 압축 정책 설정: `compress_after` 파라미터로 일정 기간이 지난 청크를 자동 압축합니다. 예를 들어 7일 이전 데이터를 자동 압축하면 스토리지를 크게 절약하면서도 쿼리 성능에 미치는 영향은 최소화됩니다.

  • WAL 설정 튜닝: 시계열 대량 쓰기 환경에서는 `wal_buffers`, `max_wal_size`를 충분히 크게 설정합니다. `checkpoint_completion_target`을 0.9로 유지하여 체크포인트 스파이크를 방지합니다.

  • 보존 정책(Retention Policy): `drop_chunks` 함수를 활용하여 오래된 데이터를 자동 삭제합니다. 보관 기간을 비즈니스 요구사항에 맞게 설정하면 디스크 공간을 효율적으로 관리할 수 있습니다.


결론

PostgreSQL + TimescaleDB + Patroni/etcd 조합은 오픈소스만으로 엔터프라이즈급 시계열 고가용성 환경을 구축할 수 있는 검증된 아키텍처입니다. 별도의 상용 라이선스 없이도 자동 페일오버, 동기/비동기 복제, 읽기 분산, 자동 압축 및 보존 정책까지 구현할 수 있습니다. 이를 통해 TCO(총소유비용)를 크게 절감할 수 있습니다.


나래정보기술은 다년간의 DBMS 성능 튜닝 경험을 바탕으로, 고객사의 시계열 데이터 환경에 최적화된 아키텍처 설계와 SQL 성능 튜닝 컨설팅을 제공합니다. 시계열 데이터베이스 고가용성 구축에 관심이 있으시다면 언제든지 문의해 주시기 바랍니다.


 
 
 

댓글


Contact Us

Thanks for submitting!

주식회사 나래정보기술 

대표 : 정성일​ | 전화 : 031-8034-1318 | 팩스 : 031-8034-1319 | 기술지원 문의전화 : 010-4675-1782 | Email : sijung@naraeit.co.kr

 본사 및  연구소 : 경기도 남양주시 다산중앙로 19번길 21, 블루웨일지식산업센터1차  F618호

Copyright © 2019 (주)나래정보기술, All rights reserved.

bottom of page