IT Japan

PostgreSQL9의 Replication 본문

IT/PostgreSQL

PostgreSQL9의 Replication

swhwang 2016. 5. 30. 14:07
반응형


PostgreSQL9 복제 기능  스트리밍 복제 상시 대기 기능을 결합한 제품이다.

http://www.interdb.jp/techinfo/pg_sr/sr02.html
http://www.interdb.jp/techinfo/pg_sr/sr01.html


문서에서는 마스터 1 대와 슬레이브 마스터 1 2 구성에서 복제 구성 예를 나타낸다. 또한, 설정에 대한 검증 프로덕션 환경으로 의미가 없지만 Xen 이용한 2 개의 가상 머신에서 테스트 실시했다.
여기에서는 마스터 컴퓨터의 IP 주소 192.168.0.1 슬레이브 컴퓨터의 IP 주소 192.168.0.2 설명한다.

마스터 측
PostgreSQL9을 셋업
①우선은 소스로부터 컴파일한다.

wget ftp://ftp2.jp.postgresql.org/pub/postgresql/source/v9.0beta2/postgresql-9.0beta2.tar.gz
tar xvfz postgresql-9.0beta2.tar.gz
cd postgresql-9.0beta2
./configure
make
make install
②다음으로 유져(postgres)를 작성

useradd postgres
chown postgres.postgres -R /usr/local/pgsql
③환경변수의 설정
 이하의 행을 /home/postgres/.bash_profile에 추가

export POSTGRES_HOME=/usr/local/pgsql
export PGLIB=$POSTGRES_HOME/lib
export PGDATA=$POSTGRES_HOME/data
export MANPATH=$MANPATH:$POSTGRES_HOME/man
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$PGLIB
export PATH=$PATH:$POSTGRES_HOME/bin
환경변수를 반영한다.

su - postgres
source /home/postgres/.bash_profile

④아카이브용 디렉토리작성
mkdir -p /usr/local/pgsql/archives_master
chown postgres.postgres /usr/local/pgsql/archives_master

⑤데이터베이스 초기화
initdb -E UTF8
pg_ctl start

마스터 postgresql.conf 설정 다음 내용으로한다. (shared_buffers 메모리 탑재량 등을 고려하여 적절한 값으로 설정)

# 버퍼의 크기를 정의
shared_buffers = 64M
# archive_modeはon
archive_mode = on
# hot_standby를 유효로 함
wal_level = hot_standby
# PITR용 디렉토리를 지정
archive_command = 'cp -i %p /usr/local/pgsql/archives_master/%f'    
#Slave수 。이번회는 슬레이브가 1대이므로 '1'
max_wal_senders = 1
# 모든 IP로부터 주IP주소의 연결을 허용
listen_addresses = '*'
⑧마스터측의  pg_hba.conf 를 지정

이하의 2행을 추가 192.168.0.0는 자신의 네트워크에 맞춘다.

host    replication     postgres     127.0.0.1/32            trust
host    replication     postgres     192.168.0.0/24            trust
⑨버퍼의 개시
마스터에 접속해서, 다음 명령어를 실행한다.
psql
psql의 프롬프트(template1=#)가 표시되면, 이하의 한줄을 넣는다.

SELECT pg_start_backup('SR SNAPSHOT');
결과

pg_start_backup
-----------------
0/4000020
(1 row)
Slave측

여기까지 슬레이브 PostgreSQL 컴파일 (마스터 순서 ① ~ 까지와 마찬가지로) 끝낸다.


다음에 마스터 데이터 영역 슬레이브 데이터 영역 복사한다.

su - postgres
pg_ctl stop
cd /usr/local/pgsql
mv data bak.data
scp -r 192.168.0.1:/usr/local/pgsql/data ./
또한 슬레이브 아카이브 디렉토리 생성한다.

mkdir -p /usr/local/pgsql/archives_slave
chown postgres.postgres /usr/local/pgsql/archives_slave

다시 마스터

백업 종료
데이터 영역 복사 완료되면 다음 명령을 실행한다.

psql
psqlのプロンプト(template1=#)

가 나오면 다음 문장 투입한다.
SELECT pg_stop_backup();
결과

NOTICE:  pg_stop_backup cleanup done, waiting for required WAL segments to be archived
pg_stop_backup
----------------
pg_stop_backup
----------------
0/40000D0
(1 row)

아카이브 영역을 복사한다.

scp -r /usr/local/pgsql/archives_master/* 192.168.0.2:/usr/local/pgsql/archives_slave
 

다시 슬레이브측

마스터 측 postmaster.pid 파일 남아 있으므로 삭제한다.

rm -f /usr/local/pgsql/data/postmaster.pid
スレーブ측의  postgresql.conf를 설정
#  버퍼의 크기를 정의
shared_buffers = 64M
# 이번회는 HotStandBy와 병용하므로
hot_standby = on
# archive 나 hot_standby。

이번에는 HotStandby와 병용하기 때문에 "hot_standby" wal_level = hot_standby
# PITR용。적당한 디렉토리를 지정
archive_mode = on
archive_command = 'cp -i %p /usr/local/pgsql/archives_slave/%f'    
슬레이브 recovery.conf 준비
PostgreSQL
설치 한 디렉토리 share라는 하위 디렉토리 있고 거기 샘플 파일 recovery.conf.sample이 있기 때문에 그것을 복사하여 편집한다.

cd /usr/local/pgsql/data
cp ../share/recovery.conf.sample recovery.conf
recovery.conf를 편집。

vi recovery.conf
편집내용

#
대기 모드는on
standby_mode = 'on'
#
마스터 IP 주소와 포트 지정 primary_conninfo = 'host=192.168.0.1 port=5432'
#
필수는 아니지만, Fail-over에 필요
trigger_file = '/tmp/trigger'
# PITR용
restore_command = 'cp -i /usr/local/pgsql/archives_slave/%f %p'
마스터 측의 PostgreSQL의 기동
su - postgres
pg_ctl stop
pg_ctl start
슬레이브 측의 PostgreSQL의 기동
su - postgres
pg_ctl start
この後、データベースの作成/テーブルの作成を行ったりして動作を確認する。

그후, 데이터베이스의 작성/ 테이블의 작성을 해서 동작을 확인한다.

반응형

'IT > PostgreSQL' 카테고리의 다른 글

Slave의 설정 및 reprication 동기화  (0) 2016.05.30
DB 작업 메모  (0) 2016.05.30
pgpool-II 3.4의 신기능  (0) 2016.04.10
PostgreSQL의 날짜 계산  (0) 2016.03.21
PostgreSQL의 파라미터 튜닝  (0) 2016.03.21
Comments