Rsync 설치 및 사용 방법(서버간 또는 서버내 파일 동기화)(Crontab을 통한 스케쥴링 포함)

리눅스의 rsync 패키지를 사용해서 서버간 또는 서버내 디렉토리 및 파일을 전송하고 동기화할 수 있는 방법입니다.


# Rsync 설치 및 환경 설정
rsync 설치
$ sudo apt-get install rsync

rsync 환경설정 파일 수정
$ sudo nano /etc/default/rsync

RSYNC_ENABLE=false 라인을 찾고 아래와 같이 수정
RSYNC_ENABLE=true

rsync 서비스 재시작
$ sudo /etc/init.d/rsync restart



# Rsync 기본 문법 및 옵션
rsync options source destination

-a : archive 모드로 타임스탬프, 심볼릭링크, 퍼미션, 그룹, 소유자, 장치 등의 파일 보존
-v : 상세 정보 출력
-r : 하위 디렉토리까지 복사
-z : 데이터를 압축해서 전송. 단 destination에서는 압축이 해제되어 들어감.

일반적으로 아래와 같이 많이 사용
$ rsync avz  소스디렉토리경로 목적지디렉토리경로




# 한 서버에서 디렉토리간 동기화 하기
만약 서버내 AAA라는 디렉토리의 files를 BBB라는 디렉토리에도 동일하게 만들어 주고 싶다면 아래와 같은 명령어를 사용.

$ rsync -avz  /AAA/files  /BBB



# 한 서버에서 다른 서버의 디렉토리 동기화 하기
1) ssh 또는 rsh를 사용하는 방법(데이터 전송시 암호화 적용)
$ rsync  -avz   root@호스트네임:/AAA/fies   /BBB
또는
$ rsync -avz    호스트아이피:/AAA/files    /BBB

2) rsync 데몬을 사용하는 방법(데이터 전송시 암호화 없음. inetd 서비스가 실행상태여야함)
$ rsync -avz   호스트아이피::/AAA/files    /BBB

만약 rsync를 사용해서 /AAA/files의 어떤 파일을 삭제했을 때 destination 디렉토리에서도 지워지길 원하는 경우 아래와 같은 명령어 사용.
$ rsync -av --delete  /AAA/files  /BBB


서버간 동기화를 해야 하는 경우 아래의 사항 참고

[Source 서버용]
1. rsync 설치
2. rsync 설정(/etc/default/rsync)
3. rsync.conf 생성 및 아래 구문 복사 후 붙여넣기
   $ sudo nano /etc/rsyncd.conf
  
log file = /var/log/rsync.log            # 로그 파일 경로
[source]                                         # 부르고 싶은 명칭
path = /var/www/omeka1/files       # 소스 디렉토리 설정
uid = root                                       # rsync 사용 가능한 사용자
gid = root                                       # rsync 사용 가능한 그룹
use chroot = yes                            # chroot 사용여부
host allow = x.x.x.x                        # 해당 호스트 아이피만 접근 가능
max connection = 100                   # 최대 연결 개수
timeout 300                                    # 타임아웃 시간 설정



[Destination 서버용]
1. rsync 설치
2. rsync 설정(/etc/default/rsync)
3. rsync 명령어 실행
    문법은 rsync -avz 소스서버아이피 또는 도메인주소::부르고싶은명칭  목적지경로
    아래와 같이 작성하고 엔터.
    
     $ rsync  -avz   소스서버아이피::source    /var/www/omeka2



# Crontab을 활용한 주기적이고 자동적인 파일 동기화
크론탭을 열고 아래의 명령어 예시와 같이 원하는 시점으로 작성
분/시/일/월/요일 순으로 작성
$ crontab -e

[명령어 입력 예시]
15 2 30 7 *   rsync -avz  /AAA/files  /BBB      # 7월 30일 2시 15분에  rsync 실행

15 2 * * 1     rsync -avz  /AAA/files  /BBB      #  매주 첫날 2시 15분에 rsync 실행

0 1 *  * *       rsync -avz  /AAA/files  /BBB      # 매일 1시 정각에 rsync 실행

0-59/1 * * * *   rsync  -avz   소스서버아이피::source    /var/www/omeka2   # 1분마다 rsync 실행







코멘트

  • rsync 설정시 유의사항 관련 첨부파일 참고
    pdf
    pdf
    동기화 프로그램(rsync) 설정 오류로 인한 웹 서버 침해사고사례.pdf
    1M
  • 한 서버에서 rsync 테스트시 실행이 되지 않는 경우 아래와 같이 rsync.conf를 생성하고 rsync 서비스를 재실행하면 정상 작동됩니다.

    rsyncd.conf 생성
    $ sudo nano /etc/rsyncd.conf

    아래와 같이 입력 후 저장하고 에디터 종료
     
    log file = /var/log/rsync.log            # 로그 파일 경로
    [test]                                              # 부르고 싶은 명칭
    path = 원하는 경로 입력                # rsync 디렉토리 설정
    uid = root                                       # rsync 사용 가능한 사용자
    gid = root                                       # rsync 사용 가능한 그룹
    use chroot = yes                            # chroot 사용여부
    host allow = localhost                    # localhost만 허용
    max connection = 100                   # 최대 연결 개수
    timeout 300                                    # 타임아웃 시간 설정

    $ sudo /etc/init.d/rsync restart


코멘트에 접속 혹은 등록.