달력

42024  이전 다음

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

rsync 의 미러링 기능을 이용한 백업


/***************************************************************/
* rsync 백업 서버 구축에 대해서


rsync 는 원격에서 미러링 서버를 구축할때 사용되는 유틸이다.
옵션에 따라 파일의 수정 날짜를 비교해서 수정된 파일만 업데이트 할 수있기 때문에 처음 한 번만 풀 백업 해두면 그 다음 부턴 아주 빠른 속도로 업데이트 할 수있다.

서버에는 REDHAT 8.0 또는 REDHAT 7.x, REDHAT 9 가 설치되어있고,
백업 서버 역시 REDHAT8.0 이 설치되어있다.

우선 백업 계획은 서버들로부터 새벽 4시경에 1차 백업서버로 매일 백업을 받고,
1주 단위로 1차 백업 서버의 데이터를 일요일 새벽 5시에 2차 백업 서버로 전송받는다.

일단 백업 대상이 되는 서버들에 rsync 가 설치되어 있는지 확인해보고 없으면 rpm 바이너리를 받아서 설치한다.

]#rpm -qa rsync
rsync-2.5.7-0.8

참고로 rsync 에 최근 보안 결함이 발견 되었으니 반드시 최근 버전을 받아서 설치하도록...

http://updates.redhat.com/8.0/en/os/i386/rsync-2.5.7-0.8.i386.rpm

]#rpm -Uvh rsync-2.5.7-0.8.i386.rpm

rsync 는 ssh 를 이용한 방법과 873포트를 이용한 접속 방법이 있다.
나는 873 포트를 이용해서 xinetd 데몬으로 동작하도록 설정한다.
초기에는 default 로 xinetd 에서 rsync 가 disable 로 설정되어있으므로
아래와 같이 열어준다.
]#vi /etc/xinetd.d/

# default: off
# description: The rsync server is a good addition to am ftp server, as it \
# allows crc checksumming etc.
service rsync
{
disable = no => (요부분을 yes 로...)
socket_type = stream
wait = no
user = root
server = /usr/bin/rsync
server_args = --daemon
log_on_failure += USERID
}


rsync 의 설정파일은 /etc/rsyncd.conf 인데 rsync 설치후에도 존재하지 않는다. 긴장하지 말고 생성해주면 된다.
백업할 대상은 /home 파티션과 /usr/local/mysql/data 디렉토리, 그리고 메일,proftp 등의 설정이 들어있는 /etc 전체로 했다.

]#vi /etc/rsyncd.conf
[www] =>rsync 에서 사용할 alias name
path = /home =>실제 디렉토리 절대 경로
comment = webservice-dir
uid = root
gid = root
use chroot = yes
read only = yes
hosts allow = ***.***.***.*** =>접근을 허용할 백업 서버 ip
max connections = 1
timeout = 300

[mysql]
path = /usr/local/mysql/data
comment = mysqldata-dir
uid = root
gid = root
use chroot = yes
read only = yes
hosts allow = ***.***.***.***
max connections = 1
timeout = 300

[etc]
path = /etc
comment = config-dir
uid = root
gid = root
use chroot = yes
read only = yes
hosts allow = ***.***.***.***
max connections = 1
timeout = 300

이렇게 해서 저장하면 설정은 끝났다.

슈퍼 데몬을 재시작하고
]#/etc/rc.d/init.d/xinetd restart

포트가 열려있는지 netstat 이나 telnet 명령으로 873포트를 확인해본다.
]#telnet localhost 873
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
@RSYNCD: 26


]#netstat -na | grep LISTEN
tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:110 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN
unix 2 [ ACC ] STREAM LISTENING 1285 /tmp/mysql.sock

873 포트가 보인다면 설정은 OK

이제 백업 당할 서버들의 설정은 끝났고, 1차 백업 서버를 세팅할 차례다.

백업할 서버 역시 rsync 가 설치 되어있는지 확인해보고 없으면 설치한다.

1차 백업 서버에 접속한 상태로 아까 세팅해 놓은 백업 당할 서버에 rsync

포트로 접속이 가능한지 테스트 해본다.
]#telnet ***.***.***.*** 873
Trying 127.0.0.1...
Connected to ***.***.***.***.
Escape character is '^]'.
@RSYNCD: 26

이렇게 대기 상태면 OK

만약 connect refuse 가 나오면 백업당할 서버의 세팅을 처음부터 다시 살펴본다.


이제 백업 과정을 기록할 로그 파일을 수동으로 만들것이다.

적당한 디렉토리( 예를 들면 /home/rsync-log)를 생성하고 파일을 기록할 수 있도록 권한을 조정한다.(좀 나은 방법이 있을텐데....허접한 관계로...)

cron 에 등록해서 하루에 1번 새벽 네시에 백업하기로 했으므로 우선
/etc/crontab 을 수정한다.

]#vi /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

# run-parts
01 * * * * root run-parts /etc/cron.hourly
01 4 * * * root run-parts /etc/cron.daily
00 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly

/etc/cron.daily 디렉토리에 있는 놈들을 매일 새벽 4시1분에 실행 하도록 되었다.

이제 /etc/cron.daily 에 백업 스크립트만 생성하면 된다.

]#vi /etc/cron.daily/backup.sh
#!/bin/bash
startbackup=`date +%Y%m%d%H%M%S`
touch /home/rsync-log/$startbackup.start

rsync -avz ***.***.***.***::www /home/svr_92/www/
rsync -avz ***.***.***.***::mysql /home/svr_92/mysql/
rsync -avz ***.***.***.***::etc /home/svr_92/etc/

endbackup=`date +%Y%m%d%H%M%S`
touch /home/rsync-log/$endbackup.end

위의 설정은 백업을 시작할때 날짜를 이름으로 가지는 빈파일을 /home/rsync-log/ 에 생성하고 백업이 끝난후에 다시 같은 위치에 시간이 기록된 파일을 생성시켜서 나중에 백업에 걸린 시간을 비교할 수 있게 되어 있다.

-a는 아카이브 모드. 심볼릭 링크, 속성, 퍼미션, 소유권 등 보존
-v 전송 상태를 보여줌
-z 전송시 압축을 함.

rsync 에는 이 외에도 옵션이 많으므로 자세히 살펴볼 필요가 있다..!!


여기까지 해서 1차 백업 서버의 세팅이 끝났고, 이제 2차 백업 서버를 세팅할텐데........ 똑같으니까 생략한다.

참고로 내가 관리하는 20대의 서버에 40 GByte 정도의 데이터를 전송받는데

초기에 8시간 정도가 걸렸고, 그 이후 매일 실시되는 백업은 업데이트 과정이라서 매 5분 정도에 백업이 끝나는 것을 아까 백업하면서 기록한 rsync-log 로 확인 했다. 아마도 rsync 가 압축전송을 해서 이런 속도가 나오는것 같음..

5분만에 20대의 백업이 완료되다니....!!

/***********************************************************************/


* http://manblog.intizen.com/kjh0523/913370



 

'OS > LINUX' 카테고리의 다른 글

[펌] 프로세스죽이기  (0) 2004.07.07
간단하게 ftp 에 접속하는법  (0) 2004.07.06
[펌] 웹서버 동기화를 위한 rsync의 사용  (0) 2004.07.05
리눅스 서비스에 있던것들 종류..  (0) 2004.07.05
proftpd 로그 파일 지정  (0) 2004.07.05
Posted by tornado
|