CentOS 7.x unison 양방향 파일동기화
LSYNCD 데몬을 두 서버 모두 기동시키면 lsyncd 로도 양방향 파일동기화가 가능하지만 delete = true 로 옵션을 걸었을 때 문제가 있습니다.
lsyncd 데몬이 한 군데가 멈추었다던가, 두 서버 중 한 서버가 기타 여러 이유로 싱크가 잠시 중단이 되었을 때는 의도하지 않게 파일이 삭제되는 위험성이 있습니다.
메인서버 -> 백업서버 이런 단방향은 아무런 문제가 없습니다. 하지만 로드밸런싱으로 구축된 서버라면 문제가 생길 수 있다는 겁니다.
예를 들어 백업서버가 재부팅되고 있는 사이에 메인서버에 파일이 업로드가 되었다면 이 때 문제가 발생합니다.
백업서버 재부팅이 되면 lsyncd 데몬이 실행이 되겠지요. 이 때 파일 싱크가 이루어 지게 되는데 메인서버에는 있지만 백업서버에는 파일이 없는 파일이 있습니다. 이 파일은 없는 파일이기 때문에 메인서버의 파일까지 삭제가 되게 됩니다.
그렇다고 delete 옵션을 false 를 주게 되면 위 문제는 생기지 않겠지만 불필요한 파일을 계속 가지고 있어야 한다는 문제가 있습니다.
이런 경우에 lsyncd 유틸도 사용하면서 unison 을 보조적으로 크론을 이용해서 하루에 한번 동기화를 하게되면 위 문제가 해결이 가능합니다.
▶ unison 설치
# yum install unison
서버 양쪽에 모두 설치를 하여야 합니다.
한쪽만 설치를 하게 되면 아래와 같은 에러가 발생합니다.
Contacting server...
bash: unison: command not found
Fatal error: Lost connection with the server
▶ lsyncd 설정
settings {
logfile="/var/log/lsyncd/lsyncd.log",
statusFile="/var/log/lsyncd/lsyncd-status.log"
}
sync {
default.rsyncssh,
source="/var/www/html",
host="192.168.1.3", -- 메인서버, 백업서버 다르게 설정
targetdir="/var/www/html",
delete = false,
rsync = {
archive = true,
compress = false,
verbose = false
}
}
서버 양쪽에 모두 설정을 합니다.
자세한 lsyncd 설정방법은 https://ivps.tistory.com/150 여기를 참고하세요.
▶ unison 환경설정 ( /root/.unison/default.prf )
# Unison preferences file
root = /var/www/html
root = ssh://root@192.168.1.3//var/www/html
ignore = Path test1
ignore = Path test2
ignore = Path test3
batch = true
times = true
logfile = /var/log/unison.log
/root/.unison 폴더가 없다면 unison 을 한번 실행해주면 폴더가 생깁니다.
첫번째 root 는 로컬의 디렉토리
두번째 root 는 원격지의 디렉토리 ( 포트가 22번이 아니라면 아이피 뒤에 :포트번호를 적어주면 됩니다. )
ignore 는 제외할 폴더를 나열하며 됩니다. /var/www/html/test1 이라면 test1 만 적어주면 됩니다.
▶ cron 등록
# echo "00 03 * * * root /usr/bin/unison" > /etc/cron.d/unison
# chmod 600 /etc/cron.d/unison
동작시간은 자신에 맞게 수정하면 됩니다.
크론은 두 서버중에 한군데만 등록하면 됩니다.
'LINUX' 카테고리의 다른 글
리눅스 특정 계정만 su 명령어 허용하기 (0) | 2017.03.28 |
---|---|
리눅스 UNISON 환경설정 (0) | 2017.03.27 |
CentOS 7.x unison 양방향 파일동기화 (10) | 2017.03.27 |
CentOS 7.x logwatch 로그분석 알림 유틸 (0) | 2017.03.24 |
MySQL mysqldump 전용 계정 만들기 (0) | 2017.03.23 |
리눅스 SSH 특정 계정만 접속 허용하기 (0) | 2017.03.23 |
댓글을 달아 주세요
테스트해보셧나요? 저는 백업서버 재부팅 중에 메인서버에서 파일을 생성했을때 백업서버에서 lsyncd 가 실행되면서
메인서버 생성파일을 지우는데 담당자님은 되시나요?
어떤 부분이 문제일까요?
테스트 해보고 올린 글입니다~
lsynd 설정에 delete = false 옵션을 넣어 주어야 하는데 이를 놓친게 아닌가요?
아 delte=false 를 하시는 군요... 제가 그부분을 놓쳤네요 죄송합니다.
혹시 lsync+unison 말고 delete까지 가능한 무료 툴은 없겠죠?
양방향 싱크는 lsync + unison 조합 말고는 모르겠네요~
죄송합니다. 제가 잘 몰라서 마지막으로 하나만 여쭤볼게요.
저도 테스트를 동일하게 했는데 지금 lsync(delete=false) +unison 이 그냥 lsync(delete=false) 양방향과 어떤점이 다른가요?
unison이 들어가면서 생긴 이점이 뭐라고 봐야하나요
lsyncd 옵션의 delete = false 는 파일이 지워지더라도 무시하는 옵션입니다.
이런 파일들이 남아 있더라도 별로 상관이 없다면 그냥 lsyncd 만 사용해도 됩니다.
그런데 지워지기를 바란다면 unison 을 같이 사용하면 일정 주기로 unison 이 지워야 될 파일을 지워줍니다.
정말 대단하신것 같아요..
정보 감사합니다
댓글 감사합니다~~
lsyncd 로드밸런스 양방향에서 데몬실행 동기화시 충돌발생 전송시간이 긴 파일의 경우 전송도중 짤린데이터로 sync가 맞추어지는 문제가 있어서 그냥 unison한쪽서버에만 cron돌리니까 잘 되네여 단 unison이 lsync 보다 부하가 좀 있네여
작성자님도 lsyncd말고 unison만 쓰셔도 양방향 동기화 가능하지 않나요?
unison은 실시간이 아니라서요~
실시간 동기화가 필요 없다면 괜찮겠네요~
CentOS 7.x LSYNCD 서버 파일 동기화 시키기
LINUX 2016. 12. 23. 14:03LSYNCD 서버 파일 동기화 시키기
웹서버의 이미지나 데이터 파일을 다른 원격지 서버에 실시간 동기화를 원할 때 lsyncd 데몬을 사용하면 간단히 파일 동기화가 가능합니다.
그리고 같은 서버내 다른 디렉토리에도 백업이 가능하고 특정 폴더나 특정 파일을 제외하는 것도 가능합니다.
lsyncd.conf 설정 옵션에 대해서 알아보겠습니다.
▶ LSYNCD 설치
# yum install lsyncd lua rsync
lsyncd 와 lua 를 설치하여야 한다.
rsync 는 기본적으로 설치가 되어있겠지만 안되어 있다면 설치를 해주면 된다.
▶ 데몬 동작 설정
# systemctl enable lsyncd
# systemctl start lsyncd
6.x 버전은
# chkconfig --level 2345 lsyncd on
# service lsyncd start
아직 설정전이라 에러가 발생할겁니다.
이제 설정파일을 설정해보겠습니다.
▶ 같은 서버에 파일 동기화 설정 ( vi /etc/lsyncd.conf )
settings {
logfile="/tmp/lsyncd.log",
statusFile="/tmp/lsyncd-status.log"
}
sync {
default.rsync,
source="/var/www/html",
target="/var/www/html_backup"
}
▶ 동작 테스트
# touch /var/www/html/test.{1..5}
# ls -l /var/www/html_backup/
-rw-r--r-- 1 root root 0 12월 23 13:51 test.1
-rw-r--r-- 1 root root 0 12월 23 13:51 test.2
-rw-r--r-- 1 root root 0 12월 23 13:51 test.3
-rw-r--r-- 1 root root 0 12월 23 13:51 test.4
-rw-r--r-- 1 root root 0 12월 23 13:51 test.5
파일이 동기화가 안되어 있다면 몇 초 후에 재확인 해보세요.
그래도 파일이 동기화가 안된다면 /var/log/message 로그 파일을 확인해 보고 에러를 잡아주면 됩니다.
/etc/lsyncd.conf 파일에 설정이 잘 못 되었을 가능성이 큽니다.
이번엔 원격지 서버에 파일을 동기화 시키는 방법에 대해서 알아보겠습니다.
먼저 ssh 암호 입력 없이 접속이 가능하도록 만들어 주어야 합니다.
▶ 암호키 생성 및 복사
# ssh-keygen
# ssh-copy-id -p포트번호 root@192.168.1.3
에러가 나면 scp ./.ssh/id_rsa.pub root@192.168.1.3:~/.ssh/authorized_keys 이렇게 복사를 하면 됩니다.
원격지에 다른서버의 key값이 있다면 덥어쓰면 안되니깐 아래의 방법을 사용하여야 합니다.
cat ./.ssh/id_rsa.pub | ssh -p포트번호 root@192.168.1.3 "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
ssh-copy-id 명령어를 사용하면 덥어쓰지 않고 추가가 됩니다.
▶ 원격지 서버에 파일 동기화 설정 ( vi /etc/lsyncd.conf )
settings {
logfile="/tmp/lsyncd.log",
statusFile="/tmp/lsyncd-status.log"
}
sync {
default.rsyncssh,
source="/var/www/html",
host="192.168.1.3",
targetdir="/var/www/html"
}
▶ 로컬 및 원격지 서버에 파일 동기화 설정 ( vi /etc/lsyncd.conf )
settings {
logfile="/tmp/lsyncd.log",
statusFile="/tmp/lsyncd-status.log"
}
sync {
default.rsync,
source="/var/www/html",
target="/var/www/html_backup"
}
sync {
default.rsyncssh,
source="/var/www/html",
host="192.168.1.3",
targetdir="/var/www/html"
}
이렇게 하면 이중으로 백업이 가능합니다.
▶ 기타 설정
settings {
logfile="/tmp/lsyncd.log",
statusFile="/tmp/lsyncd-status.log"
}
sync {
default.rsyncssh,
source="/var/www/html",
host="192.168.1.3",
targetdir="/var/www/html",
delay = 1,
delete = true,
exclude = {
'/test1' ,
'/test3' ,
'*.tmp' ,
'*.swp'
},
ssh = {
port = 10022
},
rsync = {
archive = true,
compress = false,
verbose = false
}
}
delay : 동기화 작동 시점을 초단위로 조절할 수 있습니다. 디폴트는 15초 입니다.
delete :
원본에서 파일 삭제시 타겟까지 삭제하는 옵션입니다.
false 면 삭제를 하지 않습니다.
exclude :
/var/www/html/test1 폴더를 제외하려면 위에 처럼 exclude 옵션을 사용하면 됩니다.
source 폴더가 루트로 보고 적어주면 됩니다.
파일을 제외 하려면 *.swp 처럼 적어주면 됩니다.
ssh :
ssh 포트를 설정할 수 있습니다.
rsync :
archive 소유권까지 동일하게 복사가 됩니다.
compress 압축여부을 지정할 수 있습니다.
verbose 로그를 상세하게 보여주는 옵션입니다.
▶ lsyncd.log 에러
Wed Mar 15 14:05:54 2017 Normal: --- TERM signal, fading ---
Wed Mar 15 14:05:56 2017 Error: Terminating since out of inotify watches.
Consider increasing /proc/sys/fs/inotify/max_user_watches
동기화 시키려는 파일이 많은 때는 위와 같은 에러가 발생합니다.
이럴때는 max_user_watches 수를 증가시켜 주면 됩니다.
# echo 65536 > /proc/sys/fs/inotify/max_user_watches
이제 lsyncd 를 재시작 하면 됩니다.
MySQL DB 동기화는 https://ivps.tistory.com/217 여기를 참고하세요.
'LINUX' 카테고리의 다른 글
영은파더♥
가상서버호스팅 VPS 리눅스 서버관리 윈도우 IT
댓글을 달아 주세요
공지사항
카테고리
태그목록
글 보관함
달력
링크