물리적으로 다른 서버에서 rsync을 통해서 데이터를 백업 하려고 합니다.
A 서버 : rsync 데몬 서버
B서버 : Log 백업 서버
로그를 백업해야될 A서버에 rsync 데몬을 설정하여 B서버에서 A서버에 rsync으로 로그 파일을
일일 백업 하려고 합니다.
물론 파일 동기화 하는 방법은 여러개 있지만, rsync을 선택한 이유는 대용량 파일 동기화 하는데 안정적이고
속도가 빠르기 때문에 rsync으로 구성 했습니다.
아래 목표 구성 참고해 보시고 차근차근 설정해 보도록 하겠습니다~
목표 구성
1) A서버 rsync 데몬 설정
1-1) rsync 데몬 실행
1-2) rsync 데몬 설정
2) rsync을 통해 B서버에 A서버 로그 파일 당겨오기 자동화(스크립트)
2-1) A서버에 로그 파일은 매일 해당 날짜로 파일이 저장 됨
파일 형식) 2025-04-09_시간.파일 확장자
자동화 예시) 다음날(2025-04-10 AM 00:10에 전날 저장된 로그 2025-04-09 파일 당겨오기
백업 서버 로그 파일 경로 /tmp/real_log
3) 로그 파일 당겨온 파일이 여러개(10개 이상) 이므로 tar.gz 으로 압축(스크립트)
3-1) 로그 파일 당겨온 백업 서버 경로 /tmp/real_log에 있는 로그 원본 파일을
/tmp/log_backup 경로에 tar.gz으로 압축하고 /tmp/real_log에 있는 로그 원본 파일은 제거
3-2) /tmp/logbackup 경로의 파일 365일 지난건 삭제
4) 작업 완료 됐을시 작업 이력 및 작업 로그 이메일 전송
rsync 자동 백업 설정
- 1-1) A서버 rsync 데몬 설정
# rsyncd 서비스 실행
systemctl start rsyncd.service
# rsyncd 서비스 enable (재부팅 이후에도 자동 실행)
systemctl enable rsyncd.service
# rsyncd 서비스 상태 확인
systemctl status rsyncd.service
● rsyncd.service - fast remote file copy program daemon
Loaded: loaded (/usr/lib/systemd/system/rsyncd.service; enabled; vendor preset: disabled)
Active: inactive (dead)
- rsync 데몬 실행 후 재부팅 이후에도 자동으로 실행 될 수있게 enable 설정
- 1-2) A서버 rsync 데몬 설정
[root@localhost]# cat /etc/rsyncd.conf
log file = /var/log/rsyncd.log
[log]
path = /rsynlog/log
comment = Logs
read only = yes
use chroot = yes
#auth users = logbackup
#secrets file = /etc/rsyncd.secrets
list = yes
rsync을 통해 B서버에 A서버 로그 파일 당겨오기 자동화(스크립트)
- 로그 파일이 YYYY-MM-DD_hhmmss.파일 확장자 형식으로 저장 됩니다.
hhmmss(시분초)는 랜덤으로 저장 되기 때문에 {TARGET_DATE}_*.log* 으로 해서
TARGET_DATE에 해당 되는건 파일을 당겨와서 모두 백업 하려고 합니다.
#!/bin/bash
# 메일 수신자
MAILTO="aaa@aaa.com"
# 로그 파일 설정
LOG_FILE="/var/log/backup.log" #스크립트 실행 결과 로그 파일
LOG_FILE2="/var/sentmail.txt" #메일 발송 텍스트 파일
# 로그 파일로 표준 출력 및 표준 에러 리디렉션
exec > >(tee -a "$LOG_FILE") 2>&1
# 설정 변수
RSYNC_HOST="192.168.56.117" #rsync A서버 IP 설정
RSYNC_MODULE="log" #rsync A서버 데몬 name 설정
DEST_REAL_LOG="/log/real_log"
DEST_BACKUP_LOG="/log/backup_log"
# 전날 날짜 계산 (형식: YYYY-MM-DD)
TARGET_DATE=$(date -d "yesterday" +%F)
# 디렉터리 생성
mkdir -p "$DEST_REAL_LOG"
mkdir -p "$DEST_BACKUP_LOG"
log_with_timestamp() {
echo "$(date '+%Y-%m-%d_%H:%M:%S') $1"
}
log_with_timestamp "==== [$TARGET_DATE] 로그 백업 시작 ===="
# rsync: 전날 날짜 패턴에 맞는 파일만 동기화
rsync -av \
"$RSYNC_HOST::$RSYNC_MODULE/" \
--include="${TARGET_DATE}_*.log*" \
--include="${TARGET_DATE}_*.adtlog*" \
--exclude="*" \
"$DEST_REAL_LOG/" | while read line; do log_with_timestamp "$line"; done
# 압축 및 정리
if [[ "$(ls -A $DEST_REAL_LOG)" ]]; then
tar -czf "$DEST_BACKUP_LOG/BACKUP_LOG_${TARGET_DATE}.tar.gz" -C "$DEST_REAL_LOG" .
rm -f "$DEST_REAL_LOG"/*
log_with_timestamp "[$TARGET_DATE] 압축 완료 및 원본 삭제"
else
log_with_timestamp "[$TARGET_DATE] 에 해당하는 파일이 없습니다."
fi
log_with_timestamp "==== [$TARGET_DATE] 로그 백업 완료 ===="
# 메일 준비
echo To: $MAILTO > $LOG_FILE2
echo FROM: BACKUP_SERVER >> $LOG_FILE2
echo Subject: BACKUP LOG $TARGET_DATE >> $LOG_FILE2
# 백업 이력 확인
echo "====================================================================" >> $LOG_FILE2
echo " log copy complete! " >> $LOG_FILE2
echo "====================================================================" >> $LOG_FILE2
ls -lh /log/backup_log >> $LOG_FILE2
echo "====================================================================" >> $LOG_FILE2
echo " 삭제 파일 " >> $LOG_FILE2
echo "====================================================================" >> $LOG_FILE2
# 365일 지난 백업 파일 자동 삭제
find "$DEST_BACKUP_LOG" -name "*.tar.gz" -type f -mtime +365 -exec rm -f {} \; >> $LOG_FILE2
- 공개키(id_rsa.pub) 복사 (실제 키는 5~6줄 넘을 정도로 깁니다. 아래 키는 예시) (백업 서버에서 명령어 수행)
[root@rsyncSvr .ssh]# cat id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQC0p4
- 위 백업 서버에서 복사한 공개키를 운영 서버에 백업 서버 authorized_keys 파일에 저장
[root@server /]# cd ~/.ssh
[root@server .ssh]# ls -al
합계 8
drwx------. 2 root root 48 4월 9 11:59 .
dr-xr-x---. 7 root root 286 4월 9 15:49 ..
-rwxr-----. 1 root root 740 4월 9 11:59 authorized_keys
-rw-r--r--. 1 root root 176 4월 7 16:44 known_hosts
[root@server .ssh]# cat authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQC0p4
- 권한 설정
# 1. /home/[USER]/.ssh/authorized_keys 파일의 권한은 740으로 변경 필요
chmod 740 /home/[USER]/.ssh/authorized_keys
# 2. /home/[USER]/.ssh 디렉토리의 권한은 700으로 변경 필요
chmod 700 /home/[USER]/.ssh
# 3. /home/[USER] 디렉토리의 권한은 700으로 변경 필요
chmod 700 /home/[USER]
- 백업서버 -> 운영서버 ssh-keygen 통해 접속
# 백업서버에서 실행
ssh 운영서버 IP
비밀번호를 묻지 않고 바로 로그인되면 설정 성공입니다!
'OS > Linux | 리눅스' 카테고리의 다른 글
| [Linux] Graylog 6.2 설치 하기 (Ubuntu 24.04) (0) | 2025.06.11 |
|---|---|
| SCP를 통한 파일 백업 (0) | 2025.06.02 |
| [Linux]리눅스 ssh-keygen 사용해서 암호 대신 ssh 접속하기 (0) | 2025.04.10 |
| [Linux]리눅스 임의 파일 대량 생성 방법(스크립트) (0) | 2025.04.09 |
| [Linux]리눅스 rsync 명령어 및 사용법 (0) | 2025.04.09 |