inotify + rsync 실시간 백업
환경 준비
centos7 두 개, 방화벽 및 selinux
A 백업 종료 ——192.168.112.153 [서버 측]
B 백업 소스 ——192.168.112.172 [클라이언트 측]
소개
- Inotify는 강력하고 세분화 된 비동기 파일 시스템 이벤트 모니터링 메커니즘입니다. Linux 커널은 2.6.13 이후 Inotify 지원을 추가했습니다. Inotify를 통해 파일 시스템의 추가, 삭제, 수정 및 이동을 모니터링 할 수 있습니다. 이벤트,이 커널 인터페이스를 사용하여 타사 소프트웨어는 파일 시스템에서 파일의 다양한 변경 사항을 모니터링 할 수 있으며 inotify-tools는 이러한 타사 소프트웨어입니다.
- Rsync는 높은 보안 성, 신속한 백업, 증분 백업 지원이라는 장점이 있습니다. rsync를 통해 실시간 성능이 필요하지 않은 데이터 백업 요구 사항을 해결할 수 있지만 rsync는 데이터를 실시간으로 모니터링하고 동기화 할 수 없습니다.
원리
- Inotify는 동기화 클라이언트에만 배포하면됩니다. 모니터링되는 파일이 변경되면 rsync 스크립트가 동기화되도록 트리거됩니다.
A에서 작업
1. EPEL 설치
yum -y install epel-release
2. inotify 및 rsync 서비스 설치
yum -y install inotify-tools rsync
3. rsync 구성 파일 수정
vim /etc/rsyncd.conf
uid=root
gid=root
use chroot = no
max connections = 10
strict modes = yes
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsyncd.lock
log file = /var/log/rsyncd.log
[mysqldata]
path = /data/mysqldata
comment = mysql data
ignore errors
read only = no
write only = no
hosts allow = 192.168.112.172
list = false
auth users = rsync_user
secrets file = /etc/rsync.password
- 참고 : ip는 B의 ip [즉, 클라이언트의 ip]를 쓰고
경로의 경로를 생성해야합니다! ! !
4. 디렉토리 생성
mkdir -p /data/mysqldata
5. rsync 사용자 이름 및 암호 파일을 만들고 권한을 추가합니다.
echo "rsync_user:rsync_user_pwd" > /etc/rsync.password
chmod -R 600 /etc/rsync.password
6. 서비스를 시작하고 포트를 확인합니다.
rsync --daemon
netstat -nlpt|grep 873
B에서 작업
7. EPEL 설치
yum -y install epel-release
8. inotify 및 rsync 서비스 설치
yum -y install inotify-tools rsync
9. 클라이언트 암호 파일 설정 및 권한 수정
echo "rsync_user_pwd" > /etc/rsync.password
chmod -R 600 /etc/rsync.password
10. 스크립팅
vim bf.sh
#!/bin/bash
ip=192.168.112.153
src=/data/mysqldata_src/
dst=mysqldata
user=rsync_user
/usr/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' -e modify,delete,create,attrib ${
src} \
| while read file
do
rsync -vzrtopg --delete --progress $src $user@$ip::$dst --password-file=/etc/rsync.password > /dev/null && echo "$src was rsyncd"
done
- 참고 : 6 행의 경로, yum이 설치되고
/usr/bin/inotifywait
소스가 설치/usr/local/bin/inotifywait
되고 src 경로를 생성해야합니다! ! ! - 경로 확인
11. 디렉토리 생성
mkdir -p /data/mysqldata_src
12. 스크립트 실행
sh bf.sh
13. 해당 디렉토리를 입력하고 파일을 만듭니다.
cd /data/mysqldata_src/
touch aa.txt
14. A로 다시 전환하고
cd /data/mysqldata/
ls