PostgreSQL 복제 스탠바이 서버 구축
마스터 서버에서 발생하는 모든 작업 로그 생성
생성된 로그를 슬레이브 서버로 전달
슬레이브 서버에서 받은 로그의 복원(재실행)
위와 같은 동작으로 마스터 서버와 같은 스키마/데이터를 가지는 복제 서버를 생성한다. 이 마스터 서버의 로그를 WAL이라고 하며, 로그 위치는 $PG_SQL/data/pg_xlog 에 쌓인다.
Log-Shipping 방식 : pg_xlog 안의 WAL 파일 자체를 슬레이브 서버로 전달(File Copy)
Streaming 방식 : WAL 파일 저장 여부와 관계없이 로그의 내용을 슬레이브 서버로 전달(Streaming)
마스터 서버에서 저장된 WAL 파일의 크기를 지정된 사이즈 만큼 채워야 슬레이브 서버로 전송, 채워지는 시간 동안 마스터/슬레이브 서버의 데이터가 어긋남
마스터 서버의 장애 발생 시, WAL 파일을 다 채우지 못하여 전달되지 않을 경우 데이터의 유실 있음
Streaming 방식은 PostgreSQL 9.0 이상에서 사용이 가능하다.
두 서버 간의 네트워크 문제가 없다는 가정하에, 거의 실시간으로 동작(1초 미만의 작은 지연 발생 가능)
슬레이브 서버의 긴 장애가 발생하여 문제가 생길 경우, 유실된 데이터 복구 방법은 슬레이브 서버를 처음부터 다시 구축해야 한다.
따라서 Streaming 방식을 사용하더라도, 이와 같은 문제를 피하기 위해서 Log-Shipping 방식을 적용해 놓는 것이 좋다.
마스터와 슬레이브 2대의 서버가 존재하는 상태에서 진행된다.
실행 계정은 설치할 때 생성한 postgres이다.
Streaming 방식 적용을 위해 슬레이브 서버에서 마스터 서버에 접근할 Replication 전용 유저를 생성한다.
# CREATE ROLE repluser WITH REPLICATION PASSWORD '' LOGIN;
방금 생성한 계정의 접근 권한을 설정하기 위해 $PG_SQL/data/pg_hba.conf 파일에 다음을 추가한다.
원본 문서에서는 md5로 되어 있으나 단순하게 trust로 변경
host replication repluser 192.168.0.0/32 trust
복제를 위한 $PG_SQL/data/postgresql.conf 설정 변경
listen_addresses = '*' # 인증/권한 관리는 pg_hba.conf 파일에서 진행
wal_level = hot_standby # 대기 서버에 읽기 전용 작업 가능
max_wal_senders = 2 # WAL 파일을 전송할 수 있는 최대 서버 수
wal_keep_segments = 32 # 마스터 서버 디렉터리에 보관할 최근 WAL 파일의 수
# 기동
$PG_SQL/bin/pg_ctl -D $PG_SQL/data -l logfile start
# 재시작
$PG_SQL/bin/pg_ctl -D $PG_SQL/data -l logfile restart
# 종료
$PG_SQL/bin/pg_ctl -D $PG_SQL/data -l logfile stop
1. 마스터 서버 basebackup
pg_basebackup 명령어를 이용하여 최초 백업을 진행한다.
이 명령은 마스터 서버의 $PG_SQL/data 디렉터리를 통째로 슬레이브 서버의 $PG_SQL/data 디렉터리로 복제/복원하는 명령이다.
이 명령을 실행하기 전에 슬레이브 서버에 $PG_SQL/data는 비어 있어야 한다.
$PG_SQL/bin/pg_basebackup -h $MASTER_IP -D $PG_SQL/data -U repluser -v -P --xlog-method=stream
2. 설정 변경
$PG_SQL/data/postgresql.conf 설정 변경
listen_addresses = '*' # 인증/권한 관리는 pg_hba.conf 파일에서 진행
hot_standby = on # 대기 서버에 읽기 전용 작업 가능
$PG_SQL/data/recovery.conf 파일을 추가하고 다음의 내용을 작성한다.
standby_mode = on
primary_conninfo = 'host=MASTER_IP port=5432 user=repluser password=password'
trigger_file = '/path/of/triggerfile' # failover시 마스터 승격을 위한 트리거 파일
primary_conninfo 옵션 정보로 마스터 서버에 접속해 실시간 WAL 파일을 전달받는다.
슬레이브 서버를 마스터 서버로 전환하는 방법은 두 가지가 있는데, pg_ctl promote 명령어를 이용하는 방법과 recovery.conf파일의 trigger_file 옵션을 이용하는 방법이다.
단순하게 해당 경로에 파일이 생성되었을 때, (touch 등으로) 스텐바이 서버가 새로운 마스터로 승격된다.
슬레이브 서버를 마스터로 변경할 때는 기존 마스터가 확실히가 다운된 상태인지 확인해야 한다.
# -p PORT
# -D 데이터 파일 위치
# & 백그라운드 실행
$PG_SQL/postmaster -p 5433 -D $PG_SQL/data &
마스터 서버 장애가 복구되면 이 서버를 슬레이브 서버로 구축
이외의 방법은 PostgreSQL Wiki-Replication, Clustering, and Connection Pooling에서 볼 수 있다.
PostgreSQL Replication 구축하기
PostgreSQL Replication – Log Shipping
Postgresql 9.x Replication – Streaming Log