PostgreSQL 의 이중화구성 방법 중 Active-Standby 로 구성하는 방법을 포스팅합니다.
먼저 이중화 구성 방법을 개념도로 설명하여 이해를 돕겠습니다.
1. 정상 동작 중일 경우
정상 동작 시 구성 형태 입니다. Primary(Active) 서버에서 DB에 read/write 하고 secondary( Standby ) 서버는 read 만 가능합니다. Primary 서버에 변경된 데이터는 스트리밍 복제 방식으로 Secondary 서버에 계속 반영됩니다.
2. Active 서버 장애 발생시 : failover
Primary 서버에 장애가 발생하여 더 이상 DB 를 사용 할 수 없을 경우 입니다.
이때는 secondary 서버를 Active 상태로 만들고 프로그램에서는 secondary 서버만 연결하여 사용합니다. 이렇게 만들어 주는 것을 Failover 라고 합니다.
3. 장애 복구 후 원복 : Failback
Primary 서버의 장애가 해결이 되면 2번 상황에서 Active 의 역할을 하였던 secondary 서버를 다시 standby 서버로 구성해 주고 그 동안 변경된 데이터가 있으므로 다시 primary 서버에 동기화 해 줍니다. 이렇게 하는 것을 Failback 이라고 하며 다시 1번과 같은 상황으로 구성을 하여 운영합니다.
#> su - postgres > psql psql (10.11) 도움말을보려면 "help"를입력하십시오. postgres=# create user repusrr replication login encrypted password 'password' connection limit -1; CREATE ROLE postgres=# \du postgres=# \q
4.postgresql.conf 수정( Primary 만 실행 )
archive아니면, archive_* 앞에# 합니다.
#> 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' max_wal_senders = 3 wal_keep_segments = 64 hot_standby = on logging_collector = on
5.pg_hba.conf 수정( Primary 만 실행 )
#> su – postgres > vi /var/lib/pgsql/10/data/pg_hba.conf hostallall192.168.xxx.0/24md5 local replicationpostgrestrust hostreplicationrepuser192.168.xxx.101/32md5 hostreplicationrepuser192.168.xxx.102/32md5
6. DB 재기동( Primary 만 실행 )
#> systemctl restart postgresql-10
7. Primary 서버의 데이터 복제( Standby 만 실행 )
#> mv /var/lib/pgsql/10/data /var/lib/pgsql/10/data.org #> mkdir /var/lib/pgsql/10/data #> chown -R postgres:postgres /var/lib/pgsql/10/data #> chmod -R 0700 /var/lib/pgsql/10/data #> su - postgres > export LANG=C > cd /usr/pgsql-10/bin > ./pg_basebackup -h 192.168.xxx.101 -D /var/lib/pgsql/10/data -U repuser -v -P -X stream Password:password pg_basebackup: initiating base backup, waiting for checkpoint to complete pg_basebackup: checkpoint completed pg_basebackup: write-ahead log start point: 0/D000028 on timeline 1 pg_basebackup: starting background WAL receiver 24592/24592 kB (100%), 1/1 tablespace pg_basebackup: write-ahead log end point: 0/D0000F8 pg_basebackup: waiting for background process to finish streaming ... pg_basebackup: base backup completed
8.postgresql.conf수정( Standby만 실행 )
아카이브 # 처리
#> 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' max_wal_senders = 3 wal_keep_segments = 64 hot_standby = on logging_collector = on