一、準備工作
-主服務器:
Rsync,發起端
Inotify
Ssh
IP:192.168.10.128
-備份服務器
ssh,備份端
IP:192.168.10.129
二、部署過程
1、備份端建立上傳用戶,並設置權限
-創建用戶
[root@backup ~]# useradd rput [root@backup ~]# passwd rput
-爲同步目錄設置訪問權限
[root@backup ~]# chown -R rput:rput/var/www/html/ [root@backup ~]# ls -ld /var/www/html/ drwxr-xr-x. 2 rput rput 4096 8月 14 2013 /var/www/html/
2、發起端操作
-創建ssh密鑰對,實現免交互
--創建密鑰對
[root@master ~]# ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key(/root/.ssh/id_rsa): #回車 Enter passphrase (empty for no passphrase):#回車 Enter same passphrase again: #回車 Your identification has been saved in/root/.ssh/id_rsa. Your public key has been saved in/root/.ssh/id_rsa.pub. The key fingerprint is:
--將公鑰發送至對端服務器
[root@master ~]# ssh-copy-id [email protected]
-配置inotify
--調整inotify內核參數
[root@master ~]# vim /etc/sysctl.conf fs.inotify.max_queued_events = 16384 fs.inotify.max_user_instances = 1024 fs.inotify.max_user_watches = 1048576 [root@master ~]# sysctl –p
---注:
max_queue_events:監控隊列大小 max_user_instances:最多監控實例數 max_user_watches:每個實例最多監控文件數
-安裝inotify-tools輔助工具
[root@master ~]# cd /usr/src/ [root@master src]# ll 總用量 360 drwxr-xr-x. 2 root root 4096 9月 23 2011 debug -rw-r--r--. 1 root root 358772 9月 25 20:53inotify-tools-3.14.tar.gz drwxr-xr-x. 3 root root 4096 9月 25 19:35 kernels [root@master src]# tar zxfinotify-tools-3.14.tar.gz [root@master src]# cd inotify-tools-3.14 [root@master inotify-tools-3.14]#./configure && make && make install
-編寫腳本實現遠程實時增量同步
[root@master ~]# vim rsync_inotify_ssh.sh #!/bin/bash rsync_cmd="rsync -azH --delete/var/www/html/ [email protected]:/var/www/html" inotify_cmd="inotifywait -mrq -emodify,create,attrib,move,delete /var/www/html/" $inotify_cmd | while read a b c do if [ $(pgrep ^rsync$ | wc -l) -le 0 ];then $rsync_cmd fi done [root@master ~]# chmod 755rsync_inotify_ssh.sh
三、測試
-發起端
[root@master ~]# /root/rsync_inotify_ssh.sh& [1] 6788 [root@master ~]# touch /var/www/html/test1 [root@master ~]# touch /var/www/html/test2
-備份端
[root@backup ~]# ll /var/www/html/ 總用量 0 -rw-r--r--. 1 rput rput 0 9月 25 2016 test1 -rw-r--r--. 1 rput rput 0 9月 25 2016 test2
四、附錄
1、rsync命令用法
-基本格式:
rsync [選項] 原始位置 目標位置
-常用選項:
-a:歸檔模式,遞歸併保留對象屬性,等同於–rlptgoD --注: -r:遞歸模式,包含目錄及子目錄中所有文件 -l:對於符號鏈接文件仍然複製爲符號鏈接文件 -p:保留文件的權限標記 -t:保留文件的時間標記 -g:保留文件的屬組標記(僅超級用戶使用) -o:保留文件的屬主標記(僅超級用戶使用) -D:保留設備文件及其他特殊文件 -v:顯示同步過程的詳細(verbose)信息 -z:在傳輸文件時進行壓縮(compress) -H:保留硬連接文件 -A:保留ACL屬性信息 --checksum:根據對象的校驗和來決定是否跳過文件
2、關於inotify
-參考:
https://www.centos.bz/2012/06/inotify-tools-introduction/
inotifywait:用於持續監控,實時輸出結果
inotifywatch:用於短期監控,任務完成後再出結果
-語法:
inotifywait [-hcmrq] [-e ] [-t ][–format ][–timefmt ] [… ]
-常用選項:
-h,–help 輸出幫助信息 @ 排除不需要監視的文件,可以是相對路徑,也可以是絕對路徑。 –fromfile 從文件讀取需要監視的文件或排除的文件,一個文件一行,排除的文件以@開頭。 -m, –monitor 接收到一個事情而不退出,無限期地執行。默認的行爲是接收到一個事情後立即退出。 -d, –daemon 跟–monitor一樣,除了是在後臺運行,需要指定 –outfile 把事情輸出到一個文件。也意味着使用了–syslog。 -o, –outfile 輸出事情到一個文件而不是標準輸出。 -s, –syslog 輸出錯誤信息到系統日誌 -r, –recursive 監視一個目錄下的所有子目錄。 -q, –quiet 指定一次,不會輸出詳細信息,指定二次,除了致命錯誤,不會輸出任何信息。 –exclude 正則匹配需要排除的文件,大小寫敏感。 –excludei 正則匹配需要排除的文件,忽略大小寫。 -t,–timeout 設置超時時間,如果爲0,則無限期地執行下去。 -e, –event 指定監視的事件。 -c, –csv 輸出csv格式。 –timefmt 指定時間格式,用於–format選項中的%T格式。 –format 指定輸出格式。 %w 表示發生事件的目錄 %f 表示發生事件的文件 %e 表示發生的事件 %Xe 事件以“X”分隔 %T 使用由–timefmt定義的時間格式
-可監聽事件
access | 文件讀取 |
modify | 文件更改。 |
attrib | 文件屬性更改,如權限,時間戳等。 |
close_write | 以可寫模式打開的文件被關閉,不代表此文件一定已經寫入數據。 |
close_nowrite | 以只讀模式打開的文件被關閉。 |
close | 文件被關閉,不管它是如何打開的。 |
open | 文件打開。 |
moved_to | 一個文件或目錄移動到監聽的目錄,即使是在同一目錄內移動,此事件也觸發。 |
moved_from | 一個文件或目錄移出監聽的目錄,即使是在同一目錄內移動,此事件也觸發。 |
move | 包括moved_to和 moved_from |
move_self | 文件或目錄被移除,之後不再監聽此文件或目錄。 |
create | 文件或目錄創建 |
delete | 文件或目錄刪除 |
delete_self | 文件或目錄移除,之後不再監聽此文件或目錄 |
unmount | 文件系統取消掛載,之後不再監聽此文件系統。 |