본문 바로가기

리눅스

[리눅스] 리눅스 환경에서 rsync 명령어로 데이터 동기화하는 방법

728x90

리눅스 환경에서 rsync 명령어로 데이터 동기화하는 방법

테스트 환경

구분 서버 이름 서버 아이피 디렉터리(데이터) 비고
source serv-A 1.1.1.1 /app/file  
target serv-B 2.2.2.2 /app/file  

 

sync script

SSH Key 교환

  • RSA 암호화 방식으로 SSH 공개키와 비공개키를 생성
root@serv-B:file$ ssh-keygen -t rsa
  • SSH 공개키 복사(serv-B -> serv-A 복사)
  • 공개기 복사할 때 패스워드 필요.
root@serv-B:file$ ssh-copy-id -i ~/.ssh/id_rsa.pub root@1.1.1.1
  • SSH 접속 테스트
root@serv-B:file$ ssh 'root@1.1.1.1'

데이터 동기화 스크립트 작성

  • rsync 명령어를 사용하며 동기화할 수 있는 스크립트 작성
vim sync_script.sh
#!/bin/bash

log_dir="/var/log/rsync"
log_file="${log_dir}/rsync.log"

if [ ! -d "${log_dir}" ]; then
	mkdir -p "${log_dir}"
fi

while true
do
	echo "$(date "+%Y%m%d-%H%M%S") : Starting rsync" >> "${log_file}"
	rsync -avz --delete root@1.1.1.1:/app/file/ /app/file/ >> "${log_file}" 2>&1
	echo "$(date "+%Y%m%d-%H%M%S") : Rsync completed" >> "${log_file}"
	echo "" >> "${log_file}"
	sleep 300
done

해당 명령어는 원격 서버의 /app/file/ 디렉토리와 로컬 서버의 /app/file/ 디렉토리를 동기화하는 rsync 명령어입니다.

 

  • -a: 아카이브 모드. 소유자 정보, 권한 정보 등을 보존하면서 동기화합니다.
  • -v: 자세한 출력 모드. 동기화 과정에서 발생하는 작업을 상세히 출력합니다.
  • -z: 압축 전송 모드. 데이터를 전송할 때 압축하여 전송합니다. 대용량 파일 전송 시 속도 향상 효과를 가져옵니다.
  • --delete: 동기화 시 원격 서버에만 존재하는 파일이나 디렉토리를 삭제합니다. 주의해서 사용해야 합니다.
  • root@1.1.1.1:/app/file/: 동기화할 원격 서버와 디렉토리 경로입니다.
  • /app/file/: 동기화할 로컬 서버의 디렉토리 경로입니다.

 

  • 스크립트 권한 설정
chmod +x sync_script.sh
  • 스크립트 실행
bash sync_script.sh &
  • rsync 로그 확인
tail -f /var/log/rsync/rsync.log
20230413-134757 Starting rsync
receiving incremental file list

sent 1,002 bytes  received 270,299 bytes  180,867.33 bytes/sec
total size is 7,790,657,309  speedup is 28,715.92
20230413-134758 : Rsync completed

 

728x90