PostgreSQL Repliaction

| 2020년 6월 29일 | 0 Comments

1) PostgreSQL Repliaction 

1-1 Replication ?

두 개 이상의 DBMS 시스템을 Master / Slave로 두고 데이터를 저장하는 방식 .
– DB 장애 및 부하 분산을 위한 HA (High Ability) 구성을 위해 사용하여 사용 .

1-2 PostgreSQL Replication 방식

1. Log-Shiping

– master serverpg_xlog 디렉토리 안 WAL 파일을 slave server 로 전달하는 방식.
지정된 WAL 파일의 크기만큼 데이터가 차야 전송 .
장애 발생 시 WAL 파일을 다 채우지 못하여 전달되지 않은 경우 데이터 유실 가능성 존재 .

WAL : Write Ahead Log

pg_xlog 디렉토리에서 관리하며 이 logDB 데이터 파일에 대한 모든 조작 기록을 보관 합니다.
log를 만드는 이유는 서버가 갑자기 중지되었을 경우, 미처 데이터 파일에 적용하지 못한 작업을 로그에서 읽은 후
재 실행하여 안전하게 복구를 하기 위해서 입니다
.

2. Streaming

실시간으로 master server에서 변경된 log 내용을 slave server로 전달 .
– slave server에 장애 타임이 길 경우 master server WAL 재활용으로 인하여 내용이 덮어  쓰이면서 데이터 유실 가능성 존재 .

 

본문에서는 Streaming 방식으로  설정해 보도록 하겠습니다.

 

2) PostgreSQL Replication 설정

 PostgreSQL Version 12.02

2-1 LINUX (Cent OS 7, Ubuntu 18.04)

[Master Server 설정]

– replication 설정을 담당할 replication 전용 계정을 생성해 줍니다

postgres=# create role repltest with replication password ‘password’ login;

– \du 명령어를 통하여 계정 생성이 정상적으로 완료 됐는지 확인이 가능합니다.

생성한 계정이 복제 및 외부 접속이 가능하도록 pg_hba.conf, postgres.conf 파일 수정을 해줍니다.

*Linvux 에서의 설정 파일의 경로는 아래와 같습니다.

Cent OS = /var/lib/pgsql/data/
Ubuntu = /etc/postgresql/12/main/

# vi pg_hba.conf

host replication repltest [slave server IP]/32 trust

# vi /postgresql.conf

listen_addresses = ‘*’
wal_level = hot_standby
max_wal_senders = 3
wal_keep_segments = 32

* wal_levellog 에 대한 기록 설정이며, minimal, archive, hot_standby 3단계가 존재합니다.

-minimal 기본 값으로 복구에 필요한 최소한의 log만 기록
– archive 복구에 필요한 모든 정보를 log로 기록
– archive와 동일한 log 기록 + standby 구성을 위한 정보 기록

*max_wal_senders
접속이 가능한 slave server의 수 

*wal_keep_segments
– replication로 남길 WAL 파일의 갯수

[Slave Server 설정]

– pg_basebackup 을 이용하여 master 서버의 data 복사전 slave 서버의 data 디렉토리를 옮겨야 합니다.

Cent OS : mv /var/lib/pgsql/data /varl/ib/pgsql/data_origin
Ubuntu : mv /var/lib/postgresql/12/main /var/lib/postgresql/12/main_bak

– pg_basebackup 명령어 이용하여 Master serverdb data 복사를 합니다.

# pg_basebackup -h [master server IP] -D [DB 데이터 경로] -U repltest -v -P –wal-method=stream -R

복사 완료 후 소유권 변경 및 옮겨 놨던 slave 서버의 postgresql.conf 파일로 덮어 씁니다.

Cent OS : chown -R postgres:postgres /var/lib/postgresql/data
Ubuntu : chown -R postgres:postgres /var/lib/postgresql/12/main

Cent OS : mv /var/lib/pgsql/data_origin/postgresql.conf /var/lib/pgsql/data/postgresql.conf
Ubuntu : mv /var/lib/postgresql/12/main_bak/postgresql.conf /var/lib/postgresql/12/main/postgresql.conf

– streaming 설정을 위하여 postgresql.conf, recovery.conf 설정을 해줍니다.

# vi postgresql.conf

listen_addresses = ‘*’
hot_standby = on

설정 완료 후 master / slave postgresql 데몬을 재시작하면 replication 적용이 완료 됩니다.

[replication test]

master server 에서 임의의 table을 생성 후 데이터를 넣고 slave server에서 select 를 통하여 확인이 가능합니다.

– maseter server

– slave server

추가로 select * from pg_stat_replication; query 문을 통하여 replication 상태를 확인할 수 있습니다.

 

 

2-2 WINDOWS 2019

[Master Server 설정]

– replication 설정을 담당할 replication 전용 계정을 생성해 줍니다

postgres=# create role repltest with replication password ‘password’ login;

– \du 명령어를 통하여 계정 생성이 정상적으로 완료 됐는지 확인이 가능합니다.

생성한 계정이 복제 및 외부 접속이 가능하도록 postgres.conf, pg_hba.conf 파일 수정을 해줍니다.

*Windows 에서의 설정 파일 수정은 메모장으로 수정이 가능하며 경로는 아래와 같습니다.
C:\Program Files\PostgreSQL\12\data

pg_hba.conf

postgresql.conf

 

[Slave Server 설정]

Slaver server 설정을 위해 서비스 창을 열어 postgresql 서비스를 중단합니다.

master server C:\Program Files\PostgreSQL\12\data 복사를 위해 slave server data폴더를 data _origin 이름으로 변경합니다.

 

cmd 창을 열어 C:\Program Files\PostgreSQL\12\bin 경로로 이동 후 pg_basebackup을 이용하여 master 서버의 data 디렉토리를 복사 합니다,

이동 – “c:\Program Files\PostgreSQL\12\bin”

복사 – g_basebackup -h [Master server IP] -D “C:\Program Files\PostgreSQL\12\data” -U repltest -v -P –wal-method=stream -R

data 폴더가 생긴것을 확인 후 변경해 놨던 data_origin postgresql.conf 파일을 복사하여 data 폴더 안으로 덮어 씌웁니다.

Postgresql.conf 파일 설정을 아래와 같이 변경 합니다.

listen_addresses = ‘*’
hot_standby = on

설정 완료 후 master / slave postgresql 서비스 재시작하면 replication 적용이 완료 됩니다.

select * from pg_stat_replication; 명령어를 통하여 replicatin 적용 상태 확인이 가능합니다.

Category: LINUX, WINDOWS

Avatar

About the Author ()