Rsync 기반 원격 데이터 동기화 및 백업 구성 가이드

1. Rsync 개요 및 작동 원리

Rsync(Remote Synchronization)는 로컬 파일 시스템 간 또는 네트워크를 통해 원격 호스트 간 데이터를 효율적으로 복제하고 동기화하는 오픈소스 유틸리티입니다. scpcp와 유사한 기능을 제공하지만, 델타 인코딩 알고리즘을 활용하여 변경된 데이터 블록만 전송하는 증분 복사(Incremental Copy) 방식을 채택하고 있어 대역폭 절약과 처리 속도 측면에서 우수합니다. 기본 동기화 로직은 파일 크기 및 수정 타임스탬프를 비교하며, 필요 시 권한, 소유자 또는 파일 내부의 변경 분기점만 추출하여 전송할 수 있습니다. 표준 데몬 포트는 873이며, 클라이언트/서버(C/S) 아키텍처 기반으로 동작합니다.

2. 서버 측 구성 절차

동기화 대상 서버를 데몬 모드로 실행하기 위해 보안 정책 완화 및 패키지 설치를 수행합니다. 테스트 환경에서는 방화벽과 SELinux를 비활성화합니다.

노드 IP할당 역할
192.168.50.10Rsync 데몬 서버
192.168.50.20클라이언트 작업 노드
# systemctl stop firewalld && systemctl disable firewalld
# sed -i 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
# dnf install -y rsync

데몬 설정 파일을 생성하여 동기화 모듈, 보안 옵션 및 연결 정책을 정의합니다.

[global]
uid = sync_daemon
gid = sync_daemon
port = 873
fake super = yes
use chroot = no
max connections = 250
timeout = 300
ignore errors = yes
read only = no
list = false
auth users = backup_operator
secrets file = /etc/rsyncd.credentials

[archive_store]
path = /srv/backup
comment = Centralized repository

실행 계정을 생성하고 대상 디렉터리의 소유권을 부여한 뒤, 인증 파일의 접근 권한을 제한합니다.

# useradd -r -s /usr/sbin/nologin sync_daemon
# mkdir -p /srv/backup
# chown -R sync_daemon:sync_daemon /srv/backup
# echo "backup_operator:Str0ngPass#99" > /etc/rsyncd.credentials
# chmod 600 /etc/rsyncd.credentials
# systemctl enable --now rsyncd

3. 클라이언트 인증 구성

클라이언트 측에서는 서버 접근을 위해 자격 증명 파일 또는 환경 변수를 활용할 수 있습니다. 자동화 스크립트 환경에서는 환경 변수 주입 방식을 권장합니다.

# 파일 기반 인증 (대화형 실행용)
# mkdir -p ~/.rsync && echo "Str0ngPass#99" > ~/.rsync/.passwd
# chmod 600 ~/.rsync/.passwd

# 환경 변수 기반 인증 (스크립트/CI 파이프라인용)
# export RSYNC_PASSWORD="Str0ngPass#99"

4. 주요 동기화 시나리오

4.1 데이터 푸시(Push)
로컬 경로의 내용을 원격 서버의 지정 모듈로 업로드합니다.

# rsync -avz /var/app/logs/ backup_operator@192.168.50.10::archive_store

4.2 데이터 풀(Pull)
원격 서버의 모듈 내용을 로컬 저장소로 다운로드합니다.

# rsync -avz backup_operator@192.168.50.10::archive_store /mnt/local_backup/

4.3 양방향 미러링(Mirroring)
--delete 파라미터를 적용하면 대상 디렉터리가 소스 경로와 정확히 일치하도록 유지됩니다. 원본에 존재하지 않는 파일은 대상에서 자동 제거되므로 운영 전 검증이 필수적입니다.

# 원격 → 로컬 미러링 (원격에 없는 로컬 항목 정리)
# rsync -avz --delete backup_operator@192.168.50.10::archive_store /mnt/local_backup/

# 로컬 → 원격 미러링 (로컬에 없는 원격 항목 정리)
# rsync -avz --delete /data/staging/ backup_operator@192.168.50.10::archive_store

5. 네트워크 대역폭 제어

대용량 백업 작업 시 내부 네트워크 트래픽을 제한하려면 --bwlimit 옵션을 사용합니다. 단위는 KB/s입니다.

# export RSYNC_PASSWORD="Str0ngPass#99"
# rsync -avz --bwlimit=2048 backup_operator@192.168.50.10::archive_store /data/archive/

6. 접근 권한 오류 및 해결

SELinux가 활성화된 환경에서 동기화 대상 경로에 올바른 보안 컨텍스트가 부여되지 않으면 Permission denied (13) 오류가 발생합니다. 이 경우 임시로 정책 상태를 확인하거나 restorecon 명령어로 컨텍스트를 재적용해야 합니다.

# getenforce
Enforcing
# rsync -avz /tmp/source/ backup_operator@192.168.50.10::archive_store
rsync: mkstemp ".tmp_file" (in archive_store) failed: Permission denied (13)

# 해결: SELinux 컨텍스트 복구 또는 정책 조정
# restorecon -Rv /srv/backup
# 또는 /etc/selinux/config에서 SELINUX=disabled 설정 후 시스템 재시작

태그: rsync linux-synchronization incremental-backup rsyncd selinux-policy

8월 6일 01:10에 게시됨