postgresql은 프로세스 기반의 GIS 기능으로 유명한 오픈소스DB 입니다.
세계적인 인기(?) 에 비해 유독 우리나라에선 postgresql 을 사용하는 곳이 드문데
저도 아무것도 모르지만 설치부터 하나하나 공부해가는 마음으로 포스팅을 시작하겠습니다.
제가 구성하고자 하는 PostgreSQL 아키텍처는 아래와 같습니다.
셋업 환경
OS & DB
- OS : CentOS release 6.9
- DB : PostgreSQL 11.7 (20.02 기준 postgresql 12 버전 출시되었으나 안정화된 11버전 설치)
- replication : streaming-replication (master-standby)
- auto-failover : pgpool-II
- backup : pg_start_backup
아래는 위 아키텍처 요소들에 대한 간단한 설명입니다.
PostgreSQL 아키텍처
single
- 프로세스 기반 dbms로 oracle 과 전체적인 아키텍처가 유사함
- 1개의 connection 마다 1개의 background process 생성됨
- postmaster : postgresql 기동 시 가장 먼저 시작되는 프로세스. 다른 background process를 기동하고 user와의 connection 생성하는 기능을 수행
- shared buffer : 데이터 캐싱하는 메모리, 서버 메모리의 1/4 이상 권장됨
- WAL buffer : 세션들이 수행하는 트랜잭션에 대한 변경 로그를 캐싱함 (redo log) shared buffer 의 1/32 이상 권장됨
- CLOG buffer : commit log, 트랜잭션 상태를 캐싱하는 메모리 공간으로 트랜잭션이 commit 되었는지를 기록함
- autovacuum : mvcc를 위해 update /delete 수행 시 db에 다중 버전의 레코드를 저장하는데 vacuum 을 통해 더이상 참조되지 않는 레코드를 정리함, 그 외에도 트랜잭션 ID (XID) 정리 , 테이블 통계작업 등을 수행함
replication (streaming-replication)
- Master 에서 생성된 WAL log를 Slave DB로 실시간성으로 전달하여 정합성을 일치시키는 replication 방법
HA with auto failover ( pgpool 2)
- pgpool 미들웨어를 앞단에 두어 load balancing , auto failover 기능을 수행함