오늘의 포스팅은 증분백업이다.

서버관리를 하다보면 백업이 중요하니까, 하지만 풀백업을 하면, 전날의 자료가 없고,

그렇다고 매일매일 풀백업을 하면 디스크가 견디질 못한다.

이럴때 사용하는게 증분백업, 전날 소스와 비교해서 변한 자료만 동기화 한다. 

당연히 용량의 증가도 많지 않다. 


돈주고 솔루션 사 쓸거면 포스팅도 안하겠지. 무료다.

rsync 를 사용한 솔루션 rsnapshot 이다.


1. 리눅스에 rsnapshot 을 yum으로 설치해보자

   아주 간단하게 설치가 된다.


1
$ yum install rsnapshot
cs


2. rnsapshot 설정파일을 간단하게 보도록 한다.


1
$ vim /etc/rsnapshot.conf
cs


   - 23번째 줄, rsnapshot_root : 백업 파일이 저장될 경로

   - 93 ~ 95줄 백업 주기를 설정

      alpha -> beta -> gamma 순으로 동작하며 각각 daliy, weekly, monthly 정도로 생각하면 된다. 

      맨 뒤의 숫자는 보관할 파일의 갯수, 숫자만큼 저장하며 오래된 것부터 삭제한다.

   - 보통 위의 두개 정도만 신경쓰면 된다. 추가적으로 할건 logfile 이나 loglevel 정도..?

   - 설정 파일에 있지만 가장 중요한 backup 경로 설정 방법은 새로 번호를 찍겠다.


3. 백업 스크립트 작성

    conf 파일 내의 225줄 #LOCALHOST 아래 부분부터 보면 된다.


    1) 서버내에서 파일을 백업할때 사용한다. conf 파일 내의 소스가 매우 잘 되어있다.


1
backup    /home/    localhost/
cs


        /home/ 하위에 있는 모든 파일을 /{rsnapshot_root}/localhost 폴더에 저장하겠다는 뜻이다.

        여기서 중요한 점은 저 공백은 꼭 탭으로 해야 한다. 스페이스로 하면 에러가 발생한다.

   

   2) rsync로 외부 서버의 파일 가져오기


1
backup    root@example.com:/home    example.com/    {rsync_option}
cs


rsync 로 example.com 서버의 /home 폴더를  {rsnaphost_root}/example.com/ 하위에 저장한다.

3번째 인자로 rsync 옵션을 지정할 수 있다.

example.com 서버의 rsync 접속 보안에 약간 신경을 써줘야 할 것으로 보인다.


   3) backup 스크립트 실행하기

 

1
backup_script    /usr/local/bin/backup_pgsql.sh    localhost/postgres/
cs


sqldump 를 위해 미리 생성해 둔 스크립트를 실행한다. 



대충 이정도만 알아도 증분백업을 돌리는데는 문제가 없다.

설정을 완료 했으면 테스트를 해본다


1
2
$ rsnaphost configtest
Syntax OK
cs


위와 같이 뜨면 매우 아름답게 설정은 완료 되었다.


실제로 실행을 하기 위해선 다음과 같이 한다.


1
$ rsnapshot alpha

cs


위 명령어를 실행하고 기다리면 백업 폴더에 백업 파일이 똭 있다.

그럼 이걸 주기적으로 백업하는 방법은 ???


정답은 크론이다


1
2
3
4
5
$ crontab -e
 
00    01    *    *    *    /usr/bin/rsnapshot alpha
00    01    *    *    1    /usr/bin/rsnapshot beta
00    01    1    *    *    /usr/bin/rsnapshot gamma
cs


크론에 대한 사용법은 대충 알거라 생각하지만... 가볍게 설명하면

인자별로 분, 시, 일, 월, 요일 이다


3번줄은 매일 AM 1:00 에 실행하라

4번줄은 월요일마다 실행하라 (0:일요일 ~ 6:토요일)

5번줄은 1일마다 실행하라 


라는 뜻이다


끝.!


===================================================================================================================================


참고사이트는 아래와 같다.


https://github.com/php79/backup
https://github.com/php79/backup/blob/master/docs/local-incremental-backup.md
https://github.com/php79/backup/blob/master/docs/remote-incremental-backup.md
https://github.com/php79/backup/blob/master/docs/rsnapshot-result.md

'기억할것들 > CentOS' 카테고리의 다른 글

서비스 자동실행 등록하기  (0) 2019.08.22
SSH root 원격 접속 제한 하기  (0) 2019.07.01
증분백업. rsnapshot 사용하기.  (0) 2019.01.11
PEM Key 로 public Key 생성하기  (0) 2018.08.13
Apache HTTPD/2 설정  (0) 2018.05.24
Apache Log 가상호스트 별로 쌓기  (0) 2017.11.28

서버용 : cwRsyncServer_4.1.0_Installer

클라이언트용 : cwRsync_4.0.5_Installer 
설치

1. 서버용 설치 후 Rsync 대상 폴더에 SvcCWRSYNC 계정의 읽기/쓰기 권한 부여
2. c:\program files\ICW\rsyncd.conf 파일 수정
(invaild error 발생 방지를 위해 uid =0 gid = 0 을 추가)
예제
[ERP_DB]
path = /cygdrive/e/DB_Backup
read only = true
uid = 0
gid = 0
transfer logging = yes

3. 서비스에서 RSYNC 서비스 자동시작 옵션 변경 및 서비스 시작

※ Rsync 서버에 설정해야 할 사항

1. 기본포트는 873 (방화벽 주의)

2. rsync 를 사용할 폴더에 SvcwRsync 계정의사용권한 부여

3. 사용 설정 파일 참고사항


   아래 파일을 수정한다.

   c:\Program Files\cwRsync\cwrsync.com

   


   @ECHO OFF

   cd bin

   rsync.exe -avz "/cygdrive/[드라이브 명 c or d 등]/[target 폴더]/" "SvcRsync@ServerIP::[서버에등록된 타겟폴더(ex:ERP_DB)]/"

'기억할것들 > WindowsNT' 카테고리의 다른 글

콘솔 명령어 모음  (0) 2017.12.26
윈도우 용 Rsync config  (8) 2017.12.11
윈도우 서버 원격 포트 변경  (0) 2017.12.11
  1. 야채호빵v 2017.12.26 17:02 신고

    rsync: failed to create pid file rsyncd.pid: File exists (17) 

    rsyncd.pid 파일을 삭제한 후 
    시작->제어판->관리도구->서비스에서 rsyncserver를 시작

  2. 야채호빵v 2017.12.26 17:02 신고

    rsync:writefd_unbuffered failed to write16385 bytes: phase "unknown" [sender]: Broken pipe (32) 

    # mkdir /Temp 
    # rsync -azrt--temp-dir=/Temp--delete /backup/local/ /backup/network/ 

  3. 야채호빵v 2017.12.26 17:02 신고

    write failed on BackUpData/carpr2_public_html3/Dealer/image/program/pcanywhere10.zip : Success 
    rsync error: error in file IO (code 11) at receiver.c(243)                  
    rsync: connection unexpectedly closed (2034656 bytes read so far)              
    rsync error: error in rsync protocol data stream (code 12) at io.c(150)   
    ------------------>용량이 다 차서 더이상 백업을 받지 못함.        

  4. 야채호빵v 2017.12.26 17:03 신고

    rsync: server sent "" rather than greeting 
    rsync error: error starting client-server protocol (code 5) at main.c(924) 
    ------------------>방화벽 점검... xinit에서 실행하므로 /etc/hosts.allow/etc/hosts.deny 점검

  5. 야채호빵v 2017.12.26 17:03 신고

    rsync: failed to connect to 211.224.128.142: Connection refused 
    rsync error: error in socket IO (code 10) at clientserver.c(97) 
    ------------------>방화벽에 설정확인 

  6. 야채호빵v 2017.12.26 17:03 신고

    rsync: read error: Connection reset by peer (104) 
    rsync error: error in rsync protocol data stream (code 12) at io.c(515) 
    ------------------> 데몬이 돌아가는지 또는 방화벽에 설정확인(hosts.allow) 

  7. 야채호빵v 2017.12.26 17:03 신고

    @ERROR: chroot failed 
    rsync: connection unexpectedly closed (0 bytes received so far) [receiver] 
    rsync error: error in rsync protocol data stream (code 12) at io.c(420) 
    ------------------> 해당디렉토리에 접근권한 확인,또는 경로가 잘못된 경우 

  8. 야채호빵v 2017.12.26 17:04 신고

    chown 파일/폴더 failed: Invalid argument (22)에러 메시지의 경우, 대충 짐작되지만 구글링해보면 좀 더 많은 자료를 찾을 수 있다. 
    간단히 정리하면 rsync 옵션–a  (archive)때문이다.–a옵션은–rlptgoD 와 동일한 옵션이며, 그 중 –p (preserve permission), –o(preserve owner), –g (preserve group) 가 
    문제의 에러 메시지를 발생시킨 것이다. 
     즉, rsync 서버로부터 Windows machine으로 파일을 전송하고 나서 Permission, Owner, Group 정보를 원본 그대로 설정하려고 시도하다가 발생한 것이다.
    이는 Linux 와 환경이 근본적으로 다르기 때문이므로 옵션을 다르게 사용할 필요가 있다. 
    앞서 사용한–a옵션이 아닌–rltD라는 다소 복잡한 옵션을 지정했다.   (-vz옵션은 그대로 사용) 


RSYNC.

생각보다 많은 곳에 사용하는 기능이다.


백업, 배포, 등등등 생각보다 많은 장소에서 쓰인다.

LINUX 에서 파일을 복사하는 등의 작업을 하는 경우,

이어받기와 비슷한 느낌의 기능도 되어있기 때문에

(RSYNC 는 Server 와 Client 간 서로 다른 자료만 전달한다)

서버 개발자 또는 관리자라면 굉장히 긴밀하게 사용할 것이다.


RSYNC 를 사용하기 위해선 먼저 xinetd 와 rsync 가 설치되어 있어야 한다.

RSYNC는 굳이 버전에 큰 차이가 없으니 귀찮으니까 yum 으로 설치하려 한다.


$ rpm -qa | grep rsync
$ rpm -qa | grep xinetd


위 명령어로 설치 여부를 확인 후 없으면 없는 것만 설치하자.

$ yum install rsync
$ yum install xinetd


xinetd 와 rsync 가 설치되었다면, rsync 설치 화면 으로 넘어간다.

$ vim /etc/xinetd.d/rsync


service rsync
{
disable = yes
socket_type = stream
wait = no
user = root
server = /usr/bin/rsync
server_args = --daemon
log_on_failure += USERID
}

위 파일에 들어가면 아랫줄과 같은 부분이 있는데, disable 부분을 no 로 바꾸고 저장한다.



- SERVER 설정


rsync 는 rsync 포트 (기본 873) 를 사용해 전송하는 방식이 있고,

ssh 포트 (기본 22) 를 사용해 전송하는 방식이 있다.


873 포트를 이용한 전송방식은 아래와 같은 셋팅이 필요하다

$ vim /etc/rsync.conf

max connection = 10
log file = /var/log/rsync.log
timeout = 300

[test]
comment = rsync server test
path = /home/Service/test
read only = no
uid = root
gid = root
hosts allow = 127.0.0.1


맨 위 대괄호로 되어 있는 부분이 rsync 의 프로젝트 명이다.

host allow 는 보안을 위해 있는 부분인데, 입력하지 않으면 전체 오픈된다.

위 셋팅을 완료 후 rsync  서비스를 재시작 한다.


$ /etc/init.d/xinetd restart


위와 같이 생성했으면, client 에서 테스트를 해보자.


$ rsync -avz --progress --delete --exclude 'file_backup.sh' /home/Service/source/ 127.0.0.1::test

위 명령어 중 avz 는

a = archive 모드로 심볼링크, 퍼미션, 소유권 등을 보존

v = 진행상황을 상세히 보여줌

z = 전송 시 압축하여 전송


progress 는 진행상태를 보여주라는 뜻


delete 는 송신측과 수신측을 동일하게 유지 하기 위해 송신측에 없는 정보는 지우라는 명령어

누적 전송을 위해서는 delete 는 빼준다


exclude 는 전송 을 제외하고자 하는 폴더 또는 파일이다.



SSH 를 통해 전송하고자 하는 경우


$ rsync -avz --progress --delete --exclude 'file_backup.sh' /home/Service/source/ 127.0.0.1:/home/Service/backup

과 같이 맨 뒷부분을 수정해 준다.


끝.


혹시나 open failed : permission denied 과 같은 에러가 발생하면

selinux 쪽을 확인해 보자.


윈도우용으로도 cwrsync 라는 프로그램도 있으나, 현재 해당 프로그램이 유료화 된 상태인지라...

저작권이 두려워 차마 업로드는 못하고.......관심있으신 분은 댓글로 달아주세요

+ Recent posts