posted by 희정냥★ 2012. 7. 7. 01:11

Postgresql 9.1에서의 리플리케이션 방식은 디폴트로 비동기화 방식이다.

동기화 방식으로 변경하기 위해선 슬레이브 서버의 이름을 설정하고 마스터와 슬레이브 설정 파일에 각각 지정해주면 된다.

우선 리플리케이션 기본 설정 방법.


마스터 : 192.168.0.100

슬레이브 : 192.168.0.101


[마스터 DB 설정]


1. pg_hba.conf 파일 수정


# vi /usr/local/pgsql/data/pg_hba.conf


# IPv4 local connections:

host all all 0.0.0.0/0 md5

host replication postgres 192.168.0.101/32 md5

host replication postgres 192.168.0.100/32 md5

마스터와 슬레이브에 대해 replication이라는 이름의 가상DB 접속권한을 부여한다.


2. postgresql.conf 수정


# vi /usr/local/pgsql/data/postgresql.conf


# WRITE AHEAD LOG

# - Settings -

wal_level = hot_standby


# - Archiving -

archive_mode = on

archive_command = 'cp %p /usr/local/pgsql/data/pg_archive/%f'


# REPLICATION

# - Master Server -

max_wal_senders = 2

wal_keep_segments = 8

#synchronous_standby_names = 'slave1'

# wal_level = hot_standby

마스터가 슬레이브의 접속을 받아들일 수 있도록 준비.


# archive_mode = on

슬레이브 DB의 반영처리가 늦어지는 경우, 또는 장시간동안 슬레이브 DB를 정지한 후에 재가동한 경우등에

아카이브된 WAL archive 파일을 사용해서 마스터 DB와 동기화시킬 수 있는 이점이 있다.

주의할 점은 WAL archive 파일의 수납장소가 마스터와 슬레이브 양쪽에서 참조할 수 있는 곳이여야 한다.

또한 디스크 용량확보를 위해 오래된 WAL archive 파일은 정기적으로 삭제해주는 것이 좋다.


# archive_mode = off

WAL archive 파일을 위한 디스크 확보가 어렵거나 DB의 유지 보수 점검이 어려울 경우에 archive 모드를 off로

할 수도 있다.

단점으로는 슬레이브 DB의 데이터 갱신이 장시간 지연되었을 경우 그 이후 데이터 처리가 정확히 반영되지

못할 수도 있다. 마스터 DB와 동기화가 이뤄지지 않았을 경우에는 다시 마스터 DB의 복제를 해야 할 필요도 생긴다.


# archive 사용 시

archive_mode = on

archive_command = 'cp %p /usr/local/pgsql/data/pg_archive/%f'


# archive 사용하지 않을 시

archive_mode = off

wal_keep_segments = 8 (8~32가 적당)


# max_wal_senders = 2

접속가능한 슬레이브의 접속수를 설정.


# wal_keep_segments = 8

리플리케이션용으로 남겨둘 WAL 파일의 수를 지정.


# synchronous_standby_names = 'slave1'

replication을 동기화 방식으로 처리하고자 할 경우 슬레이브 DB의 이름을 설정한다.

또한 이후에 슬레이브 DB 설정 시에도 위에 적은 이름을 사용한다.


3. WAL Archive 저장 디렉토리 생성

# mkdir /usr/local/pgsql/data/pg_archive

# chown -R postgres:postgres /usr/local/pgsql/data/pg_archive


4. 마스터 DB 재실행

$ /usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data restart -m fast



[슬레이브 DB 설정]


1. DB 설치


# tar xvzf postgresql-9.1.1.tar.gz

# ./configure

# gmake

# su

# gmake install

# adduser postgres -d /home/pgsql


2. 마스터 DB 복제


9.1에서는 DB 복제 전용툴로 pg_basebackup이 추가되었다. 원격 서버의 백업용도로도 활용할 수 있고,

테이블스페이스가 있을 경우에도 전체를 다 백업해 준다.


# /usr/local/pgsql/bin/pg_basebackup -h 192.168.0.100 -p 5432 -U postgres -D /usr/local/pgsql/data --xlog --checkpoint=fast --progress


3. postgresql.conf 수정


# vi /usr/local/pgsql/data/postgresql.conf


hot_standby = on


4. pg_archivecleanup 유틸리티 설치


# cd 소스파일/contrib/pg_archivecleanup

# make all && make install


5. recovery.conf 파일 생성


# cp /usr/local/pgsql/share/recovery.conf.sample /usr/local/pgsql/data/recovery.conf

# vi /usr/local/pgsql/data/recovery.conf


restore_command = 'cp /usr/local/pgsql/data/pg_archive/%f %p'

archive_cleanup_command = 'pg_archivecleanup /usr/local/pgsql/data/pg_archive %r'

recovery_target_timeline = 'latest'

standby_mode = on

primary_conninfo = 'host=192.168.0.100 port=5432 user=postgres password=비밀번호'

#trigger_file = '/tmp/pgsql.trigger'

# 동기화 방식 replication

마스터와 슬레이브의 설정 파일에서 슬레이브 DB의 이름을 같은 것으로 설정하면 동기화 방식이 이루어진다.


마스터 DB postgresql.conf

synchronous_standby_names = 'slave1'


슬레이브 DB recovery.conf

primary_conninfo = 'host=192.168.0.100 port=5432 user=postgres password=비밀번호 application_name=slave1'


# 동기화 방식으로 replication을 할 경우에 슬레이브 DB가 멈춰 있으면 입력 처리가 되지 않는 것에 주의한다.


6. 슬레이브 DB 실행


$ /usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data start -m fast


7. replication 상태 확인


$ /usr/local/pgsql/bin/psql -x -c "Select * From pg_stat_replication"


-[ RECORD 1 ]----+------------------------------

procpid | 2876

usesysid | 10

usename | postgres

application_name | walreceiver

client_addr | 192.168.0.101

client_hostname |

client_port | 49082

backend_start | 2012-05-30 12:16:37.720519+09

state | streaming

sent_location | 0/5D00C980

write_location | 0/5D00C980

flush_location | 0/5D00C980

replay_location | 0/5D00C930

sync_priority | 0

sync_state | async


마스터와 슬레이브에서 슬레이브 DB의 이름을 지정하지 않았기 때문에 async(비동기방식)으로 표시된다.

 

'Computer > DB' 카테고리의 다른 글

Postgresql 9.1 Replication  (0) 2012.07.07
Java JDBC 이용한 MySql connection  (1) 2008.10.04

댓글을 달아 주세요