-
반응형
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번과 같은 상황으로 구성을 하여 운영합니다.
1. 방화벽 정지 ( Primary, Standby 두대 모두 실행 )
#> systemctl stop firewalld 2. DB 초기화 ( Primary, Standby 두대 모두 실행 )
#> cd /usr/pgsql-10/bin --> 설치 위치 이동하여 실행
#> sudo ./postgresql-10-setup initdb
Initializing database ... OK3. DB 기동 ( Primary, Standby 두대 모두 실행 )
#> systemctl start postgresql-10 4. 관리자 비밀 번호 초기화 ( Primary, Standby 두대 모두 실행 )
#> su – postgres
postgres=# psql -dpostgres
psql (10.11)
도움말을 보려면 "help"를 입력하십시오.
postgres-# \password postgres
새 암호를 입력하세요:password
다시 입력해 주세요: passwod
postgres-# \q5. OS의 postgres 계정 비밀번호 변경 ( Primary, Standby 두대 모두 실행 )
#> passwd postgres
postgres 사용자의 비밀 번호 변경 중
새 암호:password
잘못된 암호: 암호는 사전 검사에 실패했습니다 - 사전에 있는 단어를 기반으로 합니다
새 암호 재입력: password
passwd: 모든 인증 토큰이 성공적으로 업데이트 되었습니다.1. 프로세스 시작 또는 중지
- Primary 는 시작
#> systemctl restart postgresql-10 - Standby는 중지
#> systemctl stop postgresql-10 2. 아카이브 디렉토리 생성 ( Primary, Standby 두대 모두 실행 )
#> mkdir -p /var/lib/pgsql/10/archive
#> chown -R postgres:postgres /var/lib/pgsql/10/archive
3. 복제 계정 생성 ( Primary 만 실행 )
#> su - postgres
> psql
psql (10.11)
도움말을 보려면 "help"를 입력하십시오.
postgres=# create user repusrr replication login encrypted password 'password' connection limit -1;
CREATE ROLE
postgres=# \du
postgres=# \q4. 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 = on5. pg_hba.conf 수정 ( Primary 만 실행 )
#> su – postgres
> vi /var/lib/pgsql/10/data/pg_hba.conf
host all all 192.168.xxx.0/24 md5
local replication postgres trust
host replication repuser 192.168.xxx.101/32 md5
host replication repuser 192.168.xxx.102/32 md56. 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 completed8. 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 = on9. recovery.conf 작성 ( Standby 만 실행 )
#> su – postgres
> vi /var/lib/pgsql/10/data/recovery.conf
standby_mode = 'on'
primary_conninfo = 'host=192.168.xxx.101 port=5432 user=repuser password=password'
restore_command = 'cp /var/lib/pgsql/10/archive/%f %p'
recovery_target_timeline = 'latest'
trigger_file = '/tmp/postgresql.trigger.5432'
#> systemctl start postgresql-10재기동도 해 줍니다.
10. 테스트
1) Primary 서버에 테이블을 생성해서 데이터를 입력합니다.
2) Standby 서버에서 1)에서 입력한 데이터를 조회해 봅니다. 조회가 되면 구성이 완료 되었습니다.
위의 내용은 1번 개념에 대한 내용을 구성하는 방법입니다.
이상으로 이중화 복제 구성하는 방법에 대한 포스팅을 하였습니다.
다음 포스팅에서는 2번, 3번 개념에 해당하는 장애 발생시 standby 서버가 읽기/쓰기가 가능하여 primary 역할을 할 수 있도록 구성 변경하는 방법 및 다시 1번의 개념을 되돌리는 failback 하는 내용을 포스팅 예정입니다.
반응형'IT 이야기 공간 > 데이터베이스' 카테고리의 다른 글
PostgreSQL 이중화(HA) 구성 방법 #2 - Failover, Failback (0) 2020.09.09 PostgreSQL 이중화를 위한 DB yum으로 설치하기 (2) 2020.08.28