[클러스터] Csync2 로 클러스터 파일 시스템 동기화 하기

Csync2 로 클러스터 파일 시스템 동기화 하기

*             작성자 :   서 진우 ( alang@clunix.com )

*             작성일 :   2005년 1월 10일

*

*             이 문서의 무단 배포 및 복사를 금지 합니다.

csync2 는 rsync 와 같이 file level 에서의 file sync tool 이다.

rsync 와 다른 점은 rsync 의 경우는 특정 file sync 기준이 되는 시스템에서 rsync-server 서비스를 해야 하고 클라이언트에서는 rsync client 로 서버에서 허락된 자원을 가져 갈수 있다. 즉 파일 서비스의 동기화 방식이 서버 시스템에서 클라이언트로만 전달되는 방식의 파일 동기화 프로그램이다.

이에 비해 csync2 는 같은 클러스터 그룹에 속한 시스템에게는 일괄적인 전 노드 동기화가 가능하다. 별도의 서버와 클라이언트 계념이 없다. csync2 명령어가 실행되는 시스템의 자원을 나머지 같은 클러스터 그룹에 속해진 다른 노드들로 일괄적으로 파일이 전송 동기화 되어진다.

rsync : 동기화 명령 자체가 클라이언트 입장에서 이루어진다.

csync2 : 동기화 명령 자체가 서버 입장에서 이루어진다.  

뿐만 아니라 csync2 설정에서 다중호스트 지정이 가능하기 때문에 여러대의 시스템 의 파일 동기화를 효율적을 진행할 수 있다.

설치 방법 :

csync2 를 설치 하기 위해 필요한 프로그램

librsync-0.9.6.tar.gz

sqlite-2.8.15-1.i386.rpm

sqlite-devel-2.8.15-1.i386.rpm

csync2-1.16.tar.gz

download : ftp.syszone.co.kr/pub/linux/server/cluster/csync

test03 src # rpm -Uvh sqlite-2.8.15-1.i386.rpm

test03 src # rpm -Uvh sqlite-devel-2.8.15-1.i386.rpm

test03 src # tar xzvf librsync-0.9.6.tar.gz

test03 src # cd librsync-0.9.6

test03 librsync-0.9.6 # ./configure && make && make install

test03 librsync-0.9.6 # cd ..

test03 src # tar xzvf csync2-1.16.tar.gz

test03 src # cd csync2-1.16

test03 csync2-1.16 # ./configure

test03 csync2-1.16 # make install

In file included from /usr/include/openssl/ssl.h:179,

                 from conn.c:30:

/usr/include/openssl/kssl.h:72:18: krb5.h: 그런 파일이나 디렉토리가 없음

make[1]: *** [conn.o] 오류 1

ssl 관련 오류 발생 시~ Makefile 의 139 line 인

DEFAULT_INCLUDES =  -I. -I$(srcdir) -I.

을..

DEFAULT_INCLUDES =  -I. -I$(srcdir) -I. -I /usr/kerberos/include -I.

로 변경 한후 다시 make install 한다.

test03 csync2-1.16 # make install

그런 후 /etc/services 에 csync2 관련 서비스 포트를 정의해 준다.

test03 csync2-1.16 # vi /etc/services

—————————————————————————–

.

.

fido            60179/tcp                       # Ifmail

fido            60179/udp                       # Ifmail

# Local services

csync2          30865/tcp

—————————————————————————–

그런 후 csync2 를 xinetd 에 추가한다.

test03 csync2-1.16 # vi /etc/xinetd.d/csync2

—————————————————————————–

service csync2

{

        socket_type             = stream

        protocol                = tcp

        wait                    = no

        user                    = root

        server                  = /usr/local/sbin/csync2

        server_args             = -i

        disable                 = no

}

——————————————————————————

그런 후 /etc/csync2.cfg 설정 파일을 만든다.

test03 csync2-1.16 # vi /etc/csync2.cfg

——————————————————————————

group mygroup

   {

           host test01 test02;

           host test03@eth03-eth0;

           key /etc/csync2.key_mygroup;

           include /home;

           exclude /home/clunix;

           action {

                   pattern /home/test1;

                   pattern /home/test;

                   exec “/etc/rc.d/init.d/xinetd restart”;

                   logfile “/var/log/csync2_action.log”;

                   do-local;

           }

   }

nossl test01    test02;

nossl test01    test03;

nossl test02    test01;

nossl test02    test03;

nossl test03    test01;

nossl test03    test02;

—————————————————————————

설정 파일을 간단히 설명하면

group <group_name>

먼저 같은 file sync group 을 정의 한다. 위 설정에서는 mygroup 이라 정의했다.

{

        host <host1_name> <host2_name> …

host 이후 서로 file sync 가 되어져야 할 host 를 추가한다. 여기에 hostname 형식으로 추가하면 반드시 /etc/hosts 에 각 host 정보가 설정되어져 있어야 한다.

host 정의 방식은 단순히 host <host_name> 으로 정의도 가능하고 다음 설정과 같이 해당 호스트의 특정 네트워크 디바이스를 정의하여도 된다. 이는 시스템에 네트워크 디바이스가 여러개 있을 경우 특정 디바이스를 정의 할수 있다. 이는 file sync 에 사용되는 네트워크 채널을 별도로 분리 할때 사용하면 유용하다.

        host <host_name>@<host_name>-<net_dev_name>

        key <path/key_filename>

key 는 file sync 시스템간의 file sync 에 필요한 인증 파일이라 보면 된다.

key 생성은 csync2 의 -k option 으로 생성이 가능하다. 같은 file sync 그룹인 경우 동일한 key를 가지고 있어야 한다.

        include <path>

include 는 sync target path 라고 생각하면 된다.

exclude 는 include 에 포함되어진 sub directory 나 sub file 의 경우 sync 대상에서 예외를 지정할 수 있는 것이다. 굳이 불필요한 파일을 sync target 에 지정할 필요가 없다.

        action {

action 은 sync 이후 추가적으로 처리되어 지는 내용이라 보면된다.

                   pattern /home/test1;

                   pattern /home/test;

pattern 은 쉽게 설명하면 위 두가지 pattern이 일치 해야 만이 sync 를 하게 된다.

즉 위 설정은 include /home 이란 설정에 의해 /home 밑에 있는 file, directory 가 test01, test02, test03 노드에 복제가 되어질 것이다. ( 물런 clunix directory 는 exclude 설정에 의해 제외된다. ) 하지만 /home 밑에 test1, test 라는 file or directory 가 존재 할 경우에 sync 가 진행 되는 의미이다.

                   exec “/etc/rc.d/init.d/xinetd restart”;

                   logfile “/var/log/csync2_action.log”;

                   do-local;

                

exec 는 sync 이후 특정 명령을 실행 할때 사용되고 logfile 은 csync log 가 남겨질 곳을 설정한다. do-local 은 csync 명령이 local 에서 행해지도록 한다는 의미다.

           }

   }

nossl test01    test02;

nossl test01    test03;

nossl test02    test01;

nossl test02    test03;

nossl test03    test01;

nossl test03    test02;

nossl 설정은 csync2 는 기본적으로 ssl 을 이용하여 시스템간의 인증을 하도록 한다.

만일 ssl 인증을 거치지 않고 csync2 에서 제공하는 자체 인증을 사용할 경우 (…

/etc/csync2.key-<group_name> ..) 에는 nossl 설정에서 해당 노드를 등록해 주어야 한다.

nossl test01    test02; 의미는 test01 에서 test02 로 file 이 sync 될때 ssl 를 사용

하지 않고..csync2.key file 을 사용하겠다는 의미다.

이와 같이 설정 이후 ..

test03 home # /etc/rc.d/init.d/xinetd restart

test03 home # csync2 -c  # csync2 의 config status check

test03 home # csync2 -T  # 실제 네트워크 상태 및 sync file list 상태를 sync 전

                                                   테스트한다.

..

..

L /home/oracle/.gtkrc

L /home/oracle/.viminfo

L /home/oracle/.wm_style

L /home/oracle/.zshrc

L /home/oracle/sqlnet.log

R /home/qq

R /home/test1

R /home/tt

L /home/www

L /home/www/.bash_history

L /home/www/.bash_logout

L /home/www/.bash_profile

L /home/www/.bashrc

L /home/www/.emacs

L /home/www/.gtkrc

L /home/www/.viminfo

L /home/www/.zshrc

L /home/www/www

L /home/www/www/index.html

..

..

csync2 -T 명령을 하면 위와 같이 각 노드에서 file sync 시 다른 노드로 sync 시킬 파일 (L) 과 다른 노드에서 sync 를 받을 file (R) list 가 파익이 되고 이는 sqlite 에 의해 db 파일로 생성이 된다. ( /var/lib/csync2/$HOSTNAME.db )

test01 home # csync2 -x

를 하게 되면 file 이 sync 가 되어진다.  

만일 csync 로 file sync 를 진행을 하다가 수동으로 특정 노드에 파일 관련 작업을 많이 하여 각 노드의 파일 시스템 list 가 일치 하지 않을 경우 다시 해 주어야 하는 경우가 발생한다.

이때는 -R option 으로 file list 를 모두 clean 하고 다시 초기 상태에서 재 진행을 해 주어야 한다.

test01 home # csync2 -R

이제 정상적인 csync2 로 sync 가 작동하면 각 시스템의 cron 에 csync2 -c ; csync2 -x 를 등록한다.

그럼 일정 시간을 주기로 항상 같은 파일 시스템을 유지 할수 있을 것이다.

서진우

슈퍼컴퓨팅 전문 기업 클루닉스/ 상무(기술이사)/ 정보시스템감리사/ 시스존 블로그 운영자

You may also like...

페이스북/트위트/구글 계정으로 댓글 가능합니다.