참조
    1. http://sidharthdeshpande.blogspot.kr/2011/08/postgresql-904-streaming-replication.html
    2. http://wiki.postgresql.org/wiki/Streaming_Replication


2번 참조가 공식 사이트의 사용방법이고, 1번 참조가 좀 더 자세하게 나온 것이다.


PostgreSQL은 9.1버전의 deb파일을 구해서 ubuntu 10.0.4에 설치하여 테스트했다.
    - PostgreSQL 9.1 설치 : http://wiki.openscg.com/index.php/Postgres_9.1_DEB
    - PostgreSQL 9.1 deb 및 rpm 파일 : http://www.openscg.com/se/postgresql/packages.jsp


설정은 master를 먼저 하고, slave를 실행한다.
ubuntu 기준으로 설치 시 /opt/postgresql/9.1/ 폴더에 설치가 되었다.
설정 중 경로가 없는것들이 몇 개 있는데 mkdir로 만들어 준다.


=== Master 설치 ===

1. PostgreSQL 9.1 설치 및 초기화
    # dpkg -i postgresql...deb
    # /etc/init.d/postgres-9.1-openscg start

2. 환경설정파일 수정
    # cd /opt/postgres/9.1/data
    - postgresql.conf파일과 pg_hba.conf파일을 수정해야 하는데, 수정하는 내용은 위의 참조 사이트를 참고한다.

3. DB 및 테이블 생성
    - 실제 데이터가 들어갈 DB 및 테이블을 생성
    - DB 생성은 createdb 를 사용하면 된다.

4. DB 데이터 백업
    - 2번 참조 사이트의 How to Use섹션 5번, 6번 항목을 참고한다.
    - rsync는 scp를 내부적으로 사용한다. 따라서 파라미터도 scp에 들어가는 것과 같다.

5. 4번까지 끝나면 slave의 /srv/pgsql/standby 폴더에 /opt/postgres/9.1/data의 파일들이 전부 복사되어 있다.


=== Slave 설치 ===

6. PostgreSQL 9.1 설치
    # dpkg -i postgresql....db
    - slave에서는 초기화를 하지 않는다.

7. DB 데이터 파일 복사
    - 4번에서 복사한 /srv/pgsql/standby의 모든 파일을 /opt/postgres/9.1/data 폴더에 복사한다.
    - 그 후 권한과 사용자를 변경한다.
    # cd /opt/postgres/9.1/data
    # chmod 700 .
    # chown -R postgres:postgres .

8. 환경 설정파일 수정
    - data폴더의 모든 파일을 복사 하였기 때문에 master와 똑같은 설정이 몇가지 있어서 수정한다.
    - postgresql.conf 파일의 master설정 부분을 주석처리한다.
    # vi postgresql.conf
    max_wal_senders = 5 -> #max_wal_senders = 5
    
wal_keep_segments = 32 -> #wal_keep_segments = 32
    - slave라는것을 알 수 있도록 hot_standby 항목의 값을 변경한다
    #hot_standby = off -> hot_standby = on

    # vi pg_hba.conf
    - replication으로 설정된 항목 삭제

9. 환경설정 파일 추가
    - 2번 참조 사이트의 How to Use섹션 9번을 참고한다.

10. 마무리
    - 1번 참조 사이트에서 slave의 recovery.conf파일을 생성 한 후 하는 명령어를 실행한다.
        - initdb 실행
        - DB 시작

    - 정상적으로 replication이 설정되었다면 1번 참조 사이트의 로그 내용이 출력된다. 로그는 pg_log 폴더에 있다.

11. 테스트
    - master에서 DB에 아무 값이나 넣어본 후 slave에서 정상적으로 데이터가 복제되나 확인해본다.


※ 에러 사항

1. slave를 시작하는데 시작하는 시간이 오래 걸리고, 로그 내용중 "database system identifier differs between the primary and standby" 이란 에러가 있다면, slave에서 DB초기화를 해서 생긴 에러다.
    ==> data폴더를 삭제 후 다시 slave 설정을 하거나, 그래도 안되면 slave에서 PostgreSQL 9.1을 삭제한 후 다시 설치한다.

2. FATAL:  data directory "/opt/postgres/9.1/data" has group or world access
DETAIL:  Permissions should be u=rwx (0700).
    ==> 말 그대로 data폴더의 권한을 700 으로 주란 소리다.



+ Recent posts