2. DBMS이야기/01. PostgreSQL

[펌] PostgreSQL 9.1 - 동기 복제 : 퀵 스타트

OSSW(Open Source System SoftWare 2014. 5. 30. 23:55

블로그 :  꿈돌이의 꿈꾸는 세상

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 비동기 복제 에서 시작된다.

구성

여기에서는 다음과 같이 구성 시스템을 구축한다.

f : id : interdb : 20120305063125j : image : w360

마스터 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 추연경