rsync를 이용한 서버간 백업

rsync는 서버대 서버 백업에 있어서 아주 빠르고 간편하게 원하는 디렉토리나 파일을 맞춰줍니다..
본인은 이 설명에 대한 책임을 지지 않으므로 설정이 필요한경우 충분히 읽어보고 설정하도록 하며, 글을 퍼가는것은 자유지만 출처는 꼭 명시바랍니다.(CEnA.co.kr)

늘 그렇듯 자세한 설명에서의 존칭어는 생략합니다.

rsync의 대략적인 동작이나 이용범위는 다음과 같다. 설명의 편의상 아래부터
원본이되는 Master서버는 A(192.168.10.1)
대상이되는 Slave 서버는 B(192.168.10.2) 서버로 지칭하겠다.

1. A서버와 B서버가 있는 상황에서 B서버를 미러 서버로 이용하는 경우 두 서버의 상태를 동일하게 맞추는데 요긴하게 사용된다.

2. rsync는 “파일이 변경된 사항이 있을경우” 그 변경이 있었던 파일에 대해서 새롭게 복사해오는 구조이다. 물론 A서버에는 존재하고 B서버에는 존재하지 않는 파일이라면 B서버로 새롭게 복사해오는 구조이다.

다음의 예를 보자.

ㄱ.A서버의 대상 디렉토리
/home/testuser/

ㄴ. A서버 해당 디렉토리내 파일
test1.sql
test2.php
test3.tar.gz

ㄷ. B서버의 대상 디렉토리
/home/testuser/

ㄹ. B서버 해당 디렉토리내 파일
test1.sql

ㅁ. B서버에서 rsync를 했을때의 동작
test1.sql이 A,B서버가 동일한건지 비교, 같지 않으면 B로 가져온다 -> test2.php,test3.tar.gz 는 파일 자체가 존재하지 않으므로 바로 B로 가져온다.

ㅂ. rsync가 완료되고 나서 A,B의 내용이 동일한경우 다시 rsync를 돌리게 되면?
– 변경사항이 없는한 가져오는 내용은 없다.

———–설 정 부 분 ————————————-

설정 서버는 AnnyungLinux를 기준으로 하며, 설정 방법은 다음과 같다.
(아래로 내려가는 진행상황대로 하면 된다.)

[ 공통 설정 ]
1. 패키지 설치 :
AnnyungLinux의 경우 패키지 설치 : pkgadd -u rsync
CentOS, 페도라등 Yum이 지원되는경우 : Yum install rsync
컴파일 설치의 경우는 소스를 적절히 검색해서 다운받아 설치하도록 한다.

2. rsync 설정 수정 :
설치가 되고 나서는 다음 옵션을 변경해준다.
– /etc/xinetd.d/rsync 에서 disabled를 no로 변경

3. PORT 확인 : /etc/services 에서 873번 port 주석처리 제거
rsync는 get 방식으로 “긁어오는” 구조이다. 방화벽등의 설정에서 포트가 막혀 있다거나 하는 사항들에 대해서도 확인을 반드시 하기 바란다.

3. 재시작 : /etc/rc.d/init.d/xinetd restart

4. 시작확인(port:873) : netstat -anp | grep ‘LISTEN’
또는 방화벽등의 status를 찍어봄으로 확인 가능하다.

[마스터 192.168.10.1 서버(A서버)]
1. SSH 디렉토리 생성  : mkdir /root/.ssh(숨은디렉토리)

2 sshd_config 수정 :  PermitRootLogin yes
잠시 루트로그인을 열어주도록 한다. 어짜피 설정 다 되면 다시 닫는다.

3. sshd 재시작 :
/etc/rc.d/init.d/oops-firewall restart

[슬레이브 192.168.10.2 서버(B서버)]

1. SSH 디렉토리 생성 : mkdir /root/.ssh(숨은디렉토리)

2. 개인키, 공개키 생성 : ssh-keygen -t rsa -b 2048 -f 2_dsa
: 2_dsa, 2_dsa.pub 생성 확인 후 /root/.ssh/로 이동
– 편의상 앞의 2는 아이피에서 따온것임을 유념.

3. 2_dsa.pub 는 A 서버의 /root/.ssh/authorized_keys 로 복사
: scp -p /root/.ssh/2_dsa.pub 192.168.10.1:/root/.ssh/authorized_keys

[A 서버]
1. authorized_keys 파일 생성 확인 : /root/.ssh/authorized_keys

2. sshd_config 수정 :
sshd_config : PermitRootLogin forced-commands-only
– 이렇게 설정하게 되면 root 로그인의 경우 키를 이용해서만 로그인이 가능하며
그렇지 않은경우는 no로 설정한것과 같다.

3. sshd 재시작 : /etc/rc.d/init.d/oops-firewall restart

4. authorized_keys 수정 (중요!!)

– 원본의 상태
——————————————————–
ssh-rsa AAAXXXXXx ….XXXXX== root@test.com
—————————————————
– 추가되는 부분
——————————————————–
from=”192.168.10.2″,command=”/root/validate-rsync” ssh-rsa AAAXXXXXx…XXXXXX== root@test.com
—————————————————

5. /root/validate-rsync 파일 생성 : 반드시 실행권한(chmod 755 /root/validate-rsync)이 있어야 함
아래의 스크립트는 특수문자등을 통한 보안상의 문제를 방지하는데 그 목적이 있다.

[ B 서버]

1. 접속테스트 : rsync -avz -e “ssh -i /root/.ssh/2_dsa” 192.168.10.1:/home/httpd/ /home/httpd/
(** 디렉토리가 경로의 끝일 경우 ‘/’ 를 해줘야 함)

2. cron 설정 : 00 * * * * rsync -avz –delete -e “ssh -i /root/.ssh/2_dsa” 192.168.10.1:/home/httpd/ /home/httpd/
(매시 정각마다 실행)

마치며:
미러 서버를 운용하는데 요긴하게 사용될 수 있으며, 더 많은 정보는
http://samba.anu.edu.au/rsync/ 를 참조하기 바란다.

도큐멘트 에 올린 글 태그됨: , ,

댓글 남기기