-
반응형
이전 포스팅에서 PostgreSQL 스트리밍 방식 이중화 구성 관련 초기 설정 방법에 대해 포스팅하였습니다.
[IT 이야기 공간/데이터베이스] - PostgreSQL 이중화(HA) 구성 방법 #1 - 개념 및 초기 복제 구성
이번 포스팅은 primary (Active) 서버에 장애 발생시 standby 서버가 Active 서버 역할(Failover)을 할 수 있도록 구성하는 방법과 Primary 서버의 장애가 해결 되었을때 다시 원래 상태로 되돌리는(Failback) 방법에 대해 포스팅 합니다.
[ Primary 서버의 DB에 장애가 발생하여 사용 할 수 없을 경우 : failover ]
1. Primary 서버 기동 중지
#> systemctl stop postgresql-10 2. standby 서버 운영 서버로 전환
#> su – postgres
> vi /var/lib/pgsql/10/data/postgresql.conf
archive_mode = on # (change requires restart)
archive_command = 'test ! -f /var/lib/pgsql/10/archive/%f && cp %p /var/lib/pgsql/10/archive/%f'
archive_*의 #을 제거한다.
#> su – postgres
> cd /usr/pgsql-10/bin
> ./pg_ctl promote
waiting for server to promote.... done
server promoted3. 운영 서버로 전환된 standby 서버의 쓰기 테스트
standby 서버의 임의의 테이블에 데이터를 insert가 가능한지 테스트 해 봅니다.
[ Primary 서버를 다시 운영 서버로 전환 : failback ]
primary 서버의 장애가 해결 되었을 경우 다시 원래 상태로 되돌리는 방법입니다.
즉 primary 서버를 active 서버로 만들고 standby 서버를 다시 읽기만 가능한 서버로 구성하는 방법입니다.
1. postgresql.conf 수정 ( Primary 서버에서 )
#> su – postgres
> vi /var/lib/pgsql/10/data/postgresql.conf
#archive_mode = on # (change requires restart)
#archive_command = 'test ! -f /var/lib/pgsql/10/archive/%f && cp %p /var/lib/pgsql/10/archive/%f'2. recovery.conf 생성 ( Primary 서버에서 )
#> su – postgres
> vi /var/lib/pgsql/10/data/recovery.conf
standby_mode = 'on'
primary_conninfo = 'host=192.168.xxx.102 port=5432 user=repuser password=password'
restore_command = 'cp /var/lib/pgsql/archive/%f %p'
recovery_target_timeline = 'latest'
trigger_file = '/tmp/postgresql.trigger.5432'
#> systemctl start postgresql-10
3. pg_rewind ( Primary 서버에서 )
#> su – postgres
> cd /usr/pgsql-10/bin
> ./pg_rewind \
--target-pgdata /var/lib/pgsql/10/data \
--source-server="host=192.168.246.105 port=5432 user=postgres password=passw0rd" \
--progress
connected to server
servers diverged at WAL location 0/4026FF0 on timeline 2
rewinding from last common checkpoint at 0/4026F48 on timeline 2
reading source file list
reading target file list
reading WAL in target
need to copy 69 MB (total source directory size is 104 MB)
70876/70876 kB (100%) copied
creating backup label and updating control file
syncing target data directory
Done!
#> systemctl start postgresql-10
4. 정상적으로 구성 되었는지 확인
- Primary 서버에서
#> su – postgres
> cd /usr/pgsql-10/bin
> export LANG=C
> ./pg_controldata | grep cluster
Database cluster state: in archive recovery- Standby 서버에서
#> su – postgres
> cd /usr/pgsql-10/bin
> export LANG=C
> ./pg_controldata | grep cluster
Database cluster state: in production5. 데이터 복구 확인 ( Primary 서버에서 )
standby에서 입력 되었던 데이터를 조회하여 정상적으로 조회되는지 확인합니다.
6. recovery.done 복구 ( Standby 서버에서 )
#> systemctl stop postgresql-10
#> su – postgres
> cd /var/lib/pgsql/10/data
> mv recovery.done recovery.conf
#> su – postgres
> vi /var/lib/pgsql/10/data/postgresql.conf
listen_addresses = '*'
port = 5432
wal_level = hot_standby
wal_log_hints = on
#archive_mode = on # (change requires restart)
#archive_command = 'test ! -f /var/lib/pgsql/10/archive/%f && cp %p /var/lib/pgsql/10/archive/%f'
#> systemctl start postgresql-10
7. postgresql.conf 수정 ( Primary 서버에서 )
#> su – postgres
> vi /var/lib/pgsql/10/data/postgresql.conf
archive_mode = on # (change requires restart)
archive_command = 'test ! -f /var/lib/pgsql/10/archive/%f && cp %p /var/lib/pgsql/10/archive/%f'
archive_* 앞에 $을 제거한다.
#> systemctl restart postgresql-108. 정상적으로 구성 되었는지 확인
- Primary 서버에서
#> su – postgres
> cd /usr/pgsql-10/bin
> export LANG=C
> ./pg_controldata | grep cluster
Database cluster state: in production자동으로 production으로 됩니다.
- Standby 서버에서
#> su – postgres
> cd /usr/pgsql-10/bin
> export LANG=C
> ./pg_controldata | grep cluster
Database cluster state: in archive recovery9. Failback 완료 확인
Primary 서버에서는 데이터 입력을 해 봅니다.
Standby 서버에서는 데이터 조회를 해 봅니다.
이상으로 postgresql 스트리밍 이중화 구성 방법 및 복구 방법에 대한 포스팅이였습니다.
반응형'IT 이야기 공간 > 데이터베이스' 카테고리의 다른 글
PostgreSQL 이중화(HA) 구성 방법 #1 - 개념 및 초기 복제 구성 (0) 2020.09.09 PostgreSQL 이중화를 위한 DB yum으로 설치하기 (2) 2020.08.28