slonik <<_EOF_
cluster name = $CLUSTERNAME;
node 1 admin conninfo = 'dbname=$DB1 host=$HOST1 user=$RUSER';
node 2 admin conninfo = 'dbname=$DB2 host=$HOST2 user=$RUSER';
[cluster name]은 반드시 선두에 기술한다. 이것은 리플리케이션하는 데이타베이스 그룹의 이름이된다. 다음2행은 [admin conninfo]명령어이다. 이것은 이 스크립트를 실행하는 호스트로부터 각데이타베이스노드에 어떤식으로 접속할까를, PostgreSQL의 클라이언트API인libpq라이브러리의 PQconnectdb함수와 같은서식으로 기술한다. 즉, 이 정보만 정확하게 기술 되어있고, slonik명령이 인스톨 되어있으면, 리플리케이션하는 데이타베이스 서버와는 별도의 호스트상에서 실행해도 괜찮다.
init cluster ( id=1, comment = 'Master');
[init cluster]은 클라스터의 최초의 노드의 초기화를 실행한다. "id"는 "1"을 지정하지않으면 안되는것에 주의하자. "comment"는 Slony-I가 작성하는 관리용의 스키마상에 작성되는 "sl_node"테이블에 등록되는 코멘트이다. psql에서 slmaster에 접속하여, 다음과같이 검색하면 참조가 가능하다.
slmaster=# select * from _클러스터이름.sl_node;
no_id | no_active | no_comment
-------+-----------+------------
1 | t | Master
2 | t | Slave
(2 rows)
create set (id=1, origin=1, comment='All tables');
클라스터를 초기화하면, 다음은 Slony-I가 리플리케이션 해야만 하는 테이블을 통합해서 관리하는 단위인 [세트]를, [create set]로 작성한다. 세트에는 반드시 한개의 "origin", 즉, 기둥이되는 노드가 있다. 한편, "origin"부터 데이타를 받는쪽은 "subscriber"라고 부른다. "origin"은 일반적으로는 [마스타]와 같은 뜻이지만, Slony-I에서는 한 노드가 셋트의 "origin"이면서, 별도의 셋트의 "subscriber"로 될수도 있으므로, 혼란하지 않도록 주의가 필요하다
set add table (set id=1, origin=1, id=1, fully qualified name = 'public.member', comment='member');
셋트에 테이블을 추가하는것은 [set add table] 명령을 사용한다. 여기에서 "public"스키마의 "member"테이블을 추가하고있다. 복수의 테이블을 셋트에 추가하고 싶으면, [set add table]를 테이블 수만큼 기술할 필요가 있다.
store node (id=2, comment = 'Slave');
[store node]는 2번쨰이후의 노드를 클라스터에 추가한다. 이번에는 단순한 마스터, 슬레이브에서의 테스트이므로, 슬레이브노드를 하나만 추가하고 있다.
store path (server = 1, client = 2, conninfo='dbname=$DB1 host=$HOST1 user=$RUSER');
store path (server = 2, client = 1, conninfo='dbname=$DB2 host=$HOST2 user=$RUSER');
[store path]는, 각 slon데문이 상호통신이 가능하도록 접속의 방법을 설정하는 명령이다. [admin conninfo]는 관리용의 호스트로부터 각 노드에의 접속이지만, [store path]는 노드사이의 통신을 위해 설정하는것이다.
store listen (origin=1, provider = 1, receiver =2);
store listen (origin=2, provider = 2, receiver =1);
각 노드는 상호의 이벤트를 감시하고, 상호확인하면서 동기를 한다. [store listen]는 "receiver"(클라이언트)로부터 "provider"(서버)에대해서, 여러가지 이벤트에 관한 질의,확인을 할수있도록 한다.
또한가지, 슬레이브측에서 실행한 스크립트에는, 이하와 같이 기술 되어있다. 실은 이 스크립트도 특별히 슬레이브 쪽에서 실행할 필연성은 없고, admin conninfo가 확실히 설정되어있으면 리플리케이션노드이외의 호스트에서 실행해도 괜찮다.
subscribe set ( id = 1, provider = 1, receiver = 2, forward = no);
[subscribe set] 는 "origin"에 대한"subscriber"를 설정하고, 데이터의 리플리케이션을 개시하는 명령어다. "provider"에는 데이타의 공급원이 되는 노드, "receiver"에는 데이타의 복제를 하게될 노드의 ID를 기술한다. "receiver"가, 게다가 다른 노드에 대한 데이타의 공급원이 되는 [Cascade]를 실행하는 경우는 "forward"를 "yes"로 설정하는면 될것이다.
이상이 이번에 사용한 slonik의 명령어이다. 보다 상세한 정보는 Slony-I의 배포 화일중에, doc/howto디렉토리에있는 [slonik_commands.html]에 기술되어있으므로, 흥미가 있는 사람은 참고하기 바란다.
___________________________________________________________________________________
이상입니다. 더이상 자세한건 저도 잘 모릅니다.
By 천주현. |