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


동작시간은 자신에 맞게 수정하면 됩니다.


크론은 두 서버중에 한군데만 등록하면 됩니다.


블로그 이미지

iVPS 영은파더♥

가상서버호스팅 VPS 리눅스 서버관리 윈도우 IT

Tag ,

댓글을 달아 주세요

  • credit 2018.08.22 15:51  댓글주소  수정/삭제  댓글쓰기

    테스트해보셧나요? 저는 백업서버 재부팅 중에 메인서버에서 파일을 생성했을때 백업서버에서 lsyncd 가 실행되면서
    메인서버 생성파일을 지우는데 담당자님은 되시나요?

    어떤 부분이 문제일까요?

  • credit 2018.08.22 16:14  댓글주소  수정/삭제  댓글쓰기

    아 delte=false 를 하시는 군요... 제가 그부분을 놓쳤네요 죄송합니다.
    혹시 lsync+unison 말고 delete까지 가능한 무료 툴은 없겠죠?

  • credit 2018.08.23 09:21  댓글주소  수정/삭제  댓글쓰기

    죄송합니다. 제가 잘 몰라서 마지막으로 하나만 여쭤볼게요.
    저도 테스트를 동일하게 했는데 지금 lsync(delete=false) +unison 이 그냥 lsync(delete=false) 양방향과 어떤점이 다른가요?
    unison이 들어가면서 생긴 이점이 뭐라고 봐야하나요

    • iVPS 영은파더♥ 2018.08.23 09:28 신고  댓글주소  수정/삭제

      lsyncd 옵션의 delete = false 는 파일이 지워지더라도 무시하는 옵션입니다.
      이런 파일들이 남아 있더라도 별로 상관이 없다면 그냥 lsyncd 만 사용해도 됩니다.
      그런데 지워지기를 바란다면 unison 을 같이 사용하면 일정 주기로 unison 이 지워야 될 파일을 지워줍니다.

  • 123 2020.04.30 16:19  댓글주소  수정/삭제  댓글쓰기

    정말 대단하신것 같아요..
    정보 감사합니다

  • 456 2021.07.01 13:49  댓글주소  수정/삭제  댓글쓰기

    lsyncd 로드밸런스 양방향에서 데몬실행 동기화시 충돌발생 전송시간이 긴 파일의 경우 전송도중 짤린데이터로 sync가 맞추어지는 문제가 있어서 그냥 unison한쪽서버에만 cron돌리니까 잘 되네여 단 unison이 lsync 보다 부하가 좀 있네여
    작성자님도 lsyncd말고 unison만 쓰셔도 양방향 동기화 가능하지 않나요?