참조 : http://slony.info/documentation/1.2/firstdb.html

replication의 초기화는 master에서 설정하고, replication 동작은 slave에서 실행한다. 참조의 쉘 스크립트 자체가 master->slave로 되어 있다.


master에서 초기화 쉘 스크립트를 만든다. 파일명은 맘대로....
참조 웹 페이지의 2.3.1 섹션의 쉘 스크립트를 가져다가 적당히 수정한다. 테이블이라던가.... 패스워드라던가...
참조에는 없는 부분인데... store path 아래에 아래 두줄을 넣어준다.

store listen (origin=1, provider = 1, receiver =2);
store listen (origin=2, provider = 2, receiver =1);


만든 쉘 스크립트를 실행 한 후 참조에 있는대로 master와 slave에서 slon데몬을 실행한다.

slon $CLUSTERNAME "dbname=$MASTERDBNAME user=$REPLICATIONUSER host=$MASTERHOST" -> master

slon $CLUSTERNAME "dbname=$SLAVEDBNAME user=$REPLICATIONUSER host=$SLAVEHOST" -> slave

정상적으로 설정이 되었다면 master(node에서 id를 1로 지정)의 로그 중 slave(node에서 id를 2로 지정)와의 싱크중이라는 뜻으로 대략 아래와 같은 메세지가 출력된다. slave의 로그는 id에 해당하는 부분만 1로 출력된다.

remoteListenThread_2: LISTEN
remoteWorkerThread_2: Received event 2,nnn SYNC


만약 db_getLocalNodeId() returned 2 - wrong database? 이런 에러가 뜨면 ip문제일 수도 있다. (테스트 시 localhost로 지정했더니 이같은 에러가 나타나 localhost의 실제 ip주소를 적어주었다. (1) 초기 설정 편의 예시를 보면 된다)

이 에러가 떴다면 master와 slave에서 일단 이전에 만든 정보를 삭제해준다.
psql -h localhost -U postgres -d test_db -c "drop schema _$CLUSTERNAME cascade"

그 후에 다시 초기화 스크립트를 실행해준다.


싱크가 잘 된다면, slave에서 데이터를 받아오도록 하는 스크립트를 실행한다. 역시나 마찬가지로 참조의 스크립트를 가져다가 적당히 수정해서 사용하면 된다.

데이터 가져오는 스크립트를 한번 실행하면 그 후로는 pc가 껐다 켜져도 데몬만 실행하면 된다.


테스트를 해본다. 잘 된다. 끗! 

+ Recent posts