rsync做用:man rsync能夠看到解釋爲a fast, versatile, remote (and local) file-copying tool,主要進行文件的同步。centos
inotify做用:man inotify能夠看到解釋爲 monitoring file system events,主要是監控文件狀態。bash
本文中備份主機ip爲192.168.1.159,hostname爲inotify-slave網絡
宿主機ip爲192.168.1.185,hostname爲inotify-mastersvn
在備份主機中運行rsync程序,而後在宿主機中使用inotify對files的狀態進行監控,從而再使用rsync命令對文件進行同步測試
centos6通常默認有rsync,沒有的話能夠ui
yum -y install rsync
code
[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用戶沒有權限對模塊目錄進行寫的話,後續會影響同步
[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虛擬用戶的密碼
[root@inotify-slave ~]# echo "rsync_backup:chunlanyy" > /etc/rsync.passwd ##格式爲虛擬用戶:虛擬用戶密碼 [root@inotify-slave ~]# chmod 600 /etc/rsync.passwd ##更改密碼文件的權限,必須更改,不然在同步的時候會出現auth fail的錯誤
[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
[root@inotify-master ~]# cat /etc/rsync.passwd chunlanyy ##此處密碼爲slave端rsync虛擬用戶的密碼,與slave端不是,這裏只有密碼。
[root@inotify-master ~]# echo "marility to chunlanyy" > test.txt [root@inotify-master ~]# rsync -avz test.txt rsync_backup@192.168.1.159::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
[root@inotify-master ~]# yum install -y inotify-tools
orm
[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
將該腳本啓動放置於後臺ip
[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
[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端也同步刪除
echo "/usr/bin/nohup /root/inotify.sh 2>&1" >>/etc/rc.local
chmod +x /etc/rc.local
rem
雖然inotify+rsync能夠將文件進行備份,可是因爲設定在master端進行文件刪除時,也會跟着刪除(主要是爲了保證slave端與master端文件的一致性),故爲避免目錄文件被誤刪引發的悲劇,故每週或者每日,還須要對文件進行全量備份,即tar
+scp
命令的使用