메뉴 닫기

PostgreSQL HA 구성 : repmgr 데몬을 이용한 고가용성 환경 구축

PostgreSQL의 고가용성(High Availability, HA) 환경을 구축하기 위해 repmgr 데몬을 사용하는 방법을 소개합니다.

해당 글에서는 Primary/Standby 복제 설정부터 자동 장애 조치(Failover), VIP 연동까지의 전 과정을 다룹니다.

 

 

 

1. 환경 구성

  • PostgreSQL 12.2

  • repmgr 5.3.3

  • CentOS 7 / Ubuntu 20.04

  • 서버 구성:

    • postgresql-01: Primary

    • postgresql-02: Standby

    • VIP: 192.168.10.100

 

 

2. repmgr 설치

PostgreSQL이 설치된 상태에서 repmgr을 소스에서 빌드합니다.

git clone https://github.com/EnterpriseDB/repmgr.git
cd repmgr
make && make install

PostgreSQL 라이브러리가 필요하므로 pg_config가 PATH에 있어야 합니다.

 

 

 

3. repmgr 사용자 및 데이터베이스 생성

Primary 노드에서 진행

CREATE USER repmgr WITH SUPERUSER LOGIN PASSWORD 'PASSWORD';
CREATE DATABASE repmgr OWNER repmgr;

 

 

 

4. repmgr 설정

각 노드에 repmgr.conf 생성

/etc/repmgr.conf (원하는 경로에 해당 파일 직접 생성)

 

Primary (postgresql-01)

node_id=1
node_name='postgresql-01'
conninfo='host=[postgresql-01-IP] user=repmgr dbname=repmgr'
data_directory='/usr/local/pgsql/12.2/data'

log_level=INFO
log_facility=FILE
log_file='/var/log/repmgr/repmgr.log'
use_replication_slots=yes
failover=automatic
pg_bindir='/usr/local/pgsql/12.2/bin'
promote_command='/usr/local/pgsql/12.2/bin/repmgr standby promote'
follow_command='/usr/local/pgsql/12.2/bin/repmgr standby follow -W -f /etc/repmgr.conf'

 

Standby (postgresql-02)

node_id=2
node_name='postgresql-02'
conninfo='host=[postgresql-02-IP] user=repmgr dbname=repmgr'
data_directory='/usr/local/pgsql/12.2/data'

log_level=INFO
log_facility=FILE
log_file='/var/log/repmgr/repmgr.log'
use_replication_slots=yes
failover=automatic
pg_bindir='/usr/local/pgsql/12.2/bin'
promote_command='/usr/local/pgsql/12.2/bin/repmgr standby promote'
follow_command='/usr/local/pgsql/12.2/bin/repmgr standby follow -W -f /etc/repmgr.conf'

 

 

 

5. PostgreSQL 설정 변경

Primary (postgresql-01)

 

postgresql.conf 설정 

listen_addresses = '*'
wal_level = replica
max_wal_senders = 10
hot_standby = on
archive_mode = on
archive_command = 'cp %p /usr/local/pgsql/12.2/archive/%f'

/usr/local/pgsql/12.2/archive 디렉터리는 PostgreSQL에서 WAL 파일(Write-Ahead Log)을 아카이브하는 저장소로 사용됩니다. archive_mode=on 상태에서 archive_command에 의해 생성된 로그 파일이 이 경로에 복사됩니다.

즉, Primary 노드에서 생성된 WAL 파일을 복제 동기화를 위해 Standby가 요청할 때 읽을 수 있도록 저장하는 공간입니다.

반드시 해당 디렉터리가 존재해야 하며, PostgreSQL이 접근 가능하도록 소유권 및 권한 설정이 올바르게 되어 있어야 합니다.

 

pg_hba.conf 설정

host  replication  repmgr  [postgresql-02-IP]/32  trust
host  repmgr       repmgr  [postgresql-02-IP]/32  trust

 

 

Primary (postgresql-02)

 

postgresql.conf 설정 

listen_addresses = '*' 
hot_standby = on

 

postgresql.auto.conf 설정

primary_conninfo = 'host=[postgresql-01-IP] user=repmgr application_name=''postgresql-02'''
primary_slot_name = 'repmgr_slot_2'

 

 

 

6. Primary 등록

Primary (postgresql-01)에서 진행합니다. 

repmgr primary register

 

정상 등록 여부 확인

repmgr cluster show

 

 

 

7. Standby 클론 및 등록

Primary (postgresql-02)에서 진행합니다.

Standby 노드에서 Primary로부터 클론 작업 진행 

repmgr standby clone --host=[postgresql-01-IP] --user=repmgr --dbname=repmgr -f /etc/repmgr.conf

 

클론 완료 후 PostgreSQL 재시작

/usr/local/pgsql/12.2/bin/pg_ctl -D /usr/local/pgsql/12.2/data restart

 

 

 

8. repmgr 데몬 실행

각 노드에서 repmgrd 데몬 실행

repmgrd -f /etc/repmgr.conf --daemonize
systemctl enable repmgrd

 

정상적으로 HA 구성이 완료되면 아래와 같이 이중화 구성이 완료된 것을 확인할 수 있습니다. 

 

 

9. 자동 장애 조치 테스트

Primary 노드를 강제로 종료해봅니다.

/usr/local/pgsql/12.2/bin/pg_ctl -D /usr/local/pgsql/12.2/data stop

 

Standby 노드에서 로그 확인

tail -f /var/log/repmgr/repmgrd.log

정상 작동 시 Standby가 자동으로 Primary로 승격됩니다.

 

 

 

10. VIP 구성 (Keepalived 사용)

서비스 무중단을 위한 VIP 구성은 선택 사항이지만 고가용성을 실현하려면 권장됩니다.

 

/etc/keepalived/keepalived.conf 

vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1234
    }
    virtual_ipaddress {
        192.168.10.100
    }
    track_script {
        chk_pg
    }
}

VIP는 승격 노드에 할당되며, 클라이언트는 항상 VIP로 접속합니다.

 

 

 

이 글에서는repmgr 데몬을 이용하여 PostgreSQL 고가용성(HA) 환경을 구축하는 방법을 안내했습니다.

repmgr은 비교적 단순한 설정으로도 복제, 장애 감지, 자동 승격 등을 지원하며, VIP 연동으로 완성도 높은 HA 구성이 가능합니다.

 

 

[참고 링크]

repmgr 공식 문서

PostgreSQL Streaming Replication 가이드

Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x