rsync+inotify同期バックアップファイル
6313 ワード
前言
rsync作用:manrsyncはa fast,versatile,remote(and local)file-copying toolと解釈され、主にファイルの同期を行う.
inotifyの役割:man inotifyはmonitoring file system eventsと解釈され、主にファイルの状態を監視する.
環境の設定
バックアップホストipは192.168.1.1159、hostnameはinotify-slave
ホストipは192.168.1.1.1185、hostnameはinotify-master
バックアップホストでrsyncプログラムを実行し、ホストでinotifyを使用してfilesの状態を監視し、rsyncコマンドを使用してファイルを同期します.
rsyncの構成
1.slaveエンドrsyncのインストール
centos 6は一般的にrsyncがデフォルトで、なければいいです
yum -y install rsync
2.slaveエンドrsyncインフラストラクチャの構成
[root@inotify-slave ~]# useradd rsync -s /sbin/nologin ## rsync ,
[root@inotify-slave ~]# grep rsync /etc/passwd
rsync:x:500:500::/home/rsync:/sbin/nologin
[root@inotify-slave ~]# mkdir /rsyncbackup # rsync daemon
[root@inotify-slave ~]# chown -R rsync.rsync /rsyncbackup
# , rsync ,
3.slaveエンドrsyncのプロファイル
[root@inotify-slave ~]# cat /etc/rsync.conf ##
uid = rsync
gid = rsync
use chroot = no
max connections = 200
timeout = 300
pid file = /var/run/rsync.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsync.log
[backup] ## ,
path = /data/rsyncbackup ##
ignore errors
read only = no ##
list = no ## ip
hosts allow = 192.168.1.0/24 ## ip
auth users = rsync_backup ##rsync ,
secrets file = /etc/rsync.passwd ##rsync
4.slaveエンドrsync仮想ユーザー構成
[root@inotify-slave ~]# echo "rsync_backup:chunlanyy" > /etc/rsync.passwd ## :
[root@inotify-slave ~]# chmod 600 /etc/rsync.passwd
## , , auth fail
5.slaveエンドrsyncサービスの起動
[root@inotify-slave ~]# rsync --daemon --config=/etc/rsync.config ## daemon ,
[root@inotify-slave ~]# ps aux | grep rsync
root 5642 0.0 0.0 103308 860 pts/3 S+ 18:17 0:00 grep rsync
root 26647 0.0 0.0 107628 552 ? Ss 00:25 0:05 rsync --daemon --config=/etc/rsync.conf
root 29663 0.0 0.0 182668 1196 ? Ss 02:30 0:00 svnserve -d -r /data/rsyncbackup/
[root@inotify-slave ~]# ss -tnlp | grep rsync
LISTEN 0 5 :::873 :::* users:(("rsync",26647,5))
LISTEN 0 5 *:873 *:* users:(("rsync",26647,4))
rsync 873
rsync
echo "/usr/bin/rsync --daemon --config=/etc/rsync.config" >>/etc/rc.local
6.masterエンドrsync構成
[root@inotify-master ~]# cat /etc/rsync.passwd
chunlanyy ## slave rsync , slave , 。
7.slave-master同期テスト
[root@inotify-master ~]# echo "marility to chunlanyy" > test.txt
[root@inotify-master ~]# rsync -avz test.txt [email protected]::backup --password-file=/etc/rsync.passwd
sending incremental file list
test.txt
sent 91 bytes received 33 bytes 82.67 bytes/sec
total size is 22 speedup is 0.18
rsync_backup slave rsync
192.168.1.159 slave ip
::backup, , backup slave rsync , , scp ,
slave rsync ,
[root@inotify-slave rsyncbackup]# pwd
/data/rsyncbackup
[root@inotify-slave rsyncbackup]# ll
total 4
-rw-r--r--. 1 rsync rsync 22 Feb 15 2017 test.txt
[root@inotify-slave rsyncbackup]# cat test.txt
marility to chunlanyy
inotify構成
1.inotifyのインストール構成
[root@inotify-master ~]# yum install -y inotify-tools
2.inotify自動検出スクリプト
[root@inotify-master ~]# cat inotify.sh
#!/bin/bash
## moniter the file
host01=192.168.1.159 ##slave ip
src=/data/svn/repos ##master
dst=backup ##slave rsync
user=rsync_backup ##slave rsync
rsync_passfile=/etc/rsync.passwd
/usr/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' -e close_write,delete,create,attrib $src | while read file
do
cd $src && rsync -aruz -R --delete ./ --timeout=100 $user@$host01::$dst --password-file=${rsync_passfile} >/dev/null 2>&1
done
スクリプトの起動をバックグラウンドに配置
[root@inotify-master ~]# nohup /bin/bash inotify.sh 2>1&
[1] 11315
[root@inotify-master ~]# ps aux | grep inotify
root 11315 0.0 0.0 106096 1168 pts/1 S 19:02 0:00 /bin/bash inotify.sh
root 11316 0.0 0.0 6320 752 pts/1 S 19:02 0:00 /usr/bin/inotifywait -mrq --timefmt %d/%m/%y %H:%M
--format %T %w%f -e close_write,delete,create,attrib /data/svn/repos
root 11317 0.0 0.0 106096 668 pts/1 S 19:02 0:01 /bin/bash inotify.sh
root 14666 0.0 0.0 103308 864 pts/1 S+ 19:37 0:00 grep inotify
3.自動検出テスト
[root@inotify-master repos]# mkdir -pv /data/svn/repos/test
mkdir: created directory `/data/svn/repos/test'
[root@inotify-master repos]# cd /data/svn/repos/test
[root@inotify-master test]# ls
[root@inotify-master test]# for a in `seq 200`;do touch $a.txt;done ## 200
[root@inotify-master test]# ll
total 0
-rw-r--r--. 1 root root 0 Feb 15 19:12 100.txt
-rw-r--r--. 1 root root 0 Feb 15 19:12 101.txt
.
.
.
-rw-r--r--. 1 root root 0 Feb 15 19:12 9.txt
slave
[root@inotify-slave test]# pwd
/data/rsyncbackup/test
[root@inotify-slave test]# ll
total 0
-rw-r--r--. 1 rsync rsync 0 Feb 15 2017 100.txt
-rw-r--r--. 1 rsync rsync 0 Feb 15 2017 101.txt
.
.
.
-rw-r--r--. 1 rsync rsync 0 Feb 15 2017 9.txt
slave
[root@inotify-master repos]# ls
conf db format hooks locks README.txt test
[root@inotify-master repos]# du -sh
125M .
[root@inotify-slave rsyncbackup]# ls
conf db format hooks locks README.txt test
[root@inotify-slave rsyncbackup]# du -sh
125M .
master ,
[root@inotify-master repos]# rm test/ -rf
[root@inotify-master repos]# ls
conf db format hooks locks README.txt
[root@inotify-slave rsyncbackup]# ls
conf db format hooks locks README.txt
master ,slave
4.このスクリプトを起動中にする
echo "/usr/bin/nohup /root/inotify.sh 2>&1" >>/etc/rc.local
chmod +x /etc/rc.local
同期後のバックアップ
inotify+rsyncはファイルをバックアップすることができるが、マスター側に設定してファイル削除を行う場合も、削除に追随する(主にslave側とマスター側のファイルの整合性を保証するため)ため、ディレクトリファイルの誤削除による悲劇を避けるため、毎週または毎日、ファイルの全量バックアップ、すなわち
tar
+scp
コマンドの使用が必要となる