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コマンドの使用が必要となる