[클러스터] 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 를 등록한다.
그럼 일정 시간을 주기로 항상 같은 파일 시스템을 유지 할수 있을 것이다.