블로그 : 꿈돌이의 꿈꾸는 세상
http://blog.naver.com/hdlee91/150137598864
참조 : http://d.hatena.ne.jp/interdb/20120305/1330896434
sr_sync02.html 보다 상세한 작동 메커니즘과 새로 추가된 함수 도구 설명이있다.
sr_sync03.html , 장애 대응에 관한 설명이있다.
설명 자료로 http://lets.postgresql.jp/documents/technical/replication/1 이 자세하다.
개요
동기 복제 의 설정은 매우 간단하다. 비동기 복제 의 차이는 두 매개 변수 의 설정이다.
슬레이브 : primary_conninfo
recovery.conf 파일 매개 변수 primary_conninfo에 슬레이브 자신의 이름을 추가한다.
예를 들어 슬레이브 이름을 "slave1"라고한다면, 다음과 같이된다.
primary_conninfo = 'host = master port = 5432 application_name = slave1'
마스터 측 : synchronous_standby_names
postgresql . conf 파일을 실행할 때 매개 변수 synchronous_standby_names에 "동기화 복제 슬레이브 이름 "을 열거한다. 연결 슬레이브 모든 동기 복제 하는 경우 '*'를 쓴다.
예를 들어, 슬레이브 이름 slave1하면 slave2 동기화 복제 하려면 다음과 같이 설정한다.
synchronous_standby_names = 'slave1, slave2'
자세한 내용은 후술하지만, 이렇게 설정하면 slave1가 동기화 복제 ,
slave2 비동기 복제 에서 시작된다.
구성
여기에서는 다음과 같이 구성 시스템을 구축한다.
마스터 1 대에 대해 3 개의 슬레이브를 연결한다. 중 slave1하면 slave2 동기화복제 , slave3 비동기 복제 한다.
그러나 PostgreSQL ver9.1 동기화 복제 는 슬레이브 하나만 유효하므로 slave2은 slave1가 멈출 때까지 "비동기 복제 "로 가동한다.
이야기가 전후하지만, PostgreSQL 는 동기 복제 와 비동기 복제 를 혼합있다.
마스터 설정
postgresql . conf
다음 마스터 postgresql . conf 설정 예이다. 이번에는 아카이브 로그를 설정하지 않습니다. 아카이브 로그의 이용은http://lets.postgresql.jp/documents/technical/replication/1 의 "WAL 보관 을 할 경우 ""WAL 보관 을하지 않는 경우 "를 참조하십시오.
listen_addresses = '*'# 적당. # archive 또는 hot_standby. 이번에는 HotStandby와 함께하기 때문에 "hot_standby" wal_level = hot_standby # 슬레이브의 최대수. 여기서 3. max_wal_senders = 3 # 동기 복제하는 노예. 여기에서는 slave1하면 slave2. 자세한 내용은 후술. synchronous_standby_names = 'slave1, slave2'
pg_hba.conf
슬레이브의 연결을 위해, pg_hba.conf에 다음 라인을 추가한다. USER는 슬레이브 실행 사용자를 지정한다. 여기서는 postgres.
# TYPE DATABASE USER CIDR-ADDRESS METHOD host replication postgres 192.168.1.0/24 trust
시작
슬레이브 준비를 위해 마스터가 시작 둔다.
master > pg_ctl -D / usr / local / pgsql / data start
슬레이브 설정
기반 백업 검색
마스터 기반 백업 을 슬레이브 서버 에 복사합니다. 여기에 ver9.1에서 지원되는 pg_basebackup 명령을 이용한다.
pg_basebackup는 마스터 서버 의 walsender 프로세스 에 연결하여 모든 테이블 스페이스 다음 파일 및 지정된 경우 최신 WAL 로그 파일을 전송한다.
먼저 slave1에 로그인 하고 다음 명령을 실행한다.
slave 1> pg_basebackup -H master -p 5432 -D /usr/local/pgsql/data -xlog -progress -verbose
이제 서버 slave1의 / usr / local / pgsql / data 다음 마스터 데이터베이스 클러스터 이하가 복사됩니다.
마찬가지로 slave2, slave3에서도 같은 명령을 실행한다.
slave 2> pg_basebackup -H master -p 5432 -D /usr/local/pgsql/data -xlog -progress -verbose
slave 3> pg_basebackup -H master -p 5432 -D /usr/local/pgsql/data -xlog -progress - verbose
recovery.conf 설정 및 시작
pg_basebackup 명령 마스터 데이터베이스 클러스터 에는 postgresql . conf와 pg_hba.conf 복사할 수있다. 적절하게 매개 변수 값을 변경한다.
다음 recovery.conf을 준비한다. PostgreSQL 을 설치 하는 디렉토리 에 share라는 서브 디렉토리 가 있고 거기에 샘플 파일 recovery.conf.sample 있으므로 그것을 복사하여 편집한다.
slave 1> cd / usr / local / pgsql / data slave 1> cp .. / share / recovery.conf.sample recovery.conf
편집이 필요한 항목을 보여준다. 이것은 slave1 예제이다. slave2, slave3하지만 같은 편집을 할 것.
standby_mode = on primary_conninfo = 'host = master port = 5432 application_name = slave1'#
슬레이브 이름을 application_name로 설정
슬레이브의 시작
슬레이브를 시작합니다.
slave 1> pg_ctl -D /usr/local/pgsql/data start
slave 2> pg_ctl -D /usr/local/pgsql/ data start
slave 3> pg_ctl -D /usr/local/pgsql/data start
동작 확인
마스터 측에서 작동 확인한다. 다음 VIEW를 표시합니다.
master > psql sampledb psql ( 9 . 1 . 0 ) Type " help " for help . sampledb = # SELECT application_name, state, sync_priority, sync_state sampledb - # FROM pg_stat_replication; application_name | state | sync_priority | sync_state ------------------ + ----------- + --------------- + --- --------- Slave1 | Streaming | 1 | Sync slave2 | Streaming | 2 | Potential slave3 | Streaming | 0 | async ( 3 rows )
slave1에서 slave3까지 3 개의 슬레이브가 연결되어있다는 것을 알 수있다.
application_name하면 sync_state 쉽게 설명한다.
- slave1 : sync
slave1 동기화 복제 하고있다.
- slave2 : potential
slave2는 현재 비동기 복제 하지만 slave1가 다운되면 동기화 복제 로 마이그레이션할 수 (potential을 가진다).
- slave3 : async
slave3 비동기 복제 하고있다.
by 추연경
'2. DBMS이야기 > 01. PostgreSQL' 카테고리의 다른 글
[Admin] 2.Orations (명령어) (0) | 2014.06.02 |
---|---|
PostgreSQL vs ORACLE Insert 성능 비교 (0) | 2014.06.02 |
PostgreSQL 스키마 개념 및 활용 (0) | 2014.05.29 |
PostgreSQL 사용자 Data Type 정의 (0) | 2014.05.25 |
PPAS DB Full 백업 스크립트 작성 및 관리 방법 (0) | 2014.05.23 |