1. 程式人生 > >rsync+inotify實現觸發式備份

rsync+inotify實現觸發式備份

rsync inotify

知識部分
rsync簡介:是一個開源的快速備份工具,可以在不同主機之間間相同步整個目錄樹,支持增量備份,保持鏈接及權限,且采用優化的同步算法,傳輸前執行壓縮,因此非常適用於異地備份、鏡像服務器等應用。
在遠程同步任務中,負責發起rsync同步的客戶機成為發起端,而負責響應同步任務的服務器成為同步源。發起端在發起同步任務的時候對同步源中的同步目錄需具有讀取權限,這樣才能實現同步。而這種同步被稱為下行同步,即以rsync為源,客戶機為發起端。
inotify簡介:inotify是linux內核從2.6.13版本開始提供的通知機制,用來監控文件系統的各種變化情況,如文件的存取、刪除、修改等。(在inotify中,create表示創建、delete表示刪除、modify修改、move移動、attrib屬性更改)利用inofity非常方便的實現文件異動的警報、增量備份以及針對文件變動及時的做出響應。因為inofity通知由linux內核提供,因此主要做本機監控,在觸發式備份中長應用於上行同步。
技術分享圖片
操作部分:
1、首先在同步源端。建立rsync配置文件(vim /etc/rsyncd.conf)。由於rsync由linux提供,我們直接建立配置即可。
技術分享圖片
各選項含義:
use chroot:禁錮在源目錄、address=192.168.1.1監聽改地址、prot 873監聽默認端口873、
log file:日誌文件位置、pid file:存放進程ID文件的位置、hosts allow:允許的客戶機地址、
[wwwroot]:共享模塊名稱、path:源目錄、comment:註釋、read only:只讀(建議yes)、
dont compress:不進行壓縮的文件類型、auth users:授權用戶、secrets file:賬戶數據文件。
2、建立備份賬戶的數據文件。vim /etc/rsyncd_users.db,格式為“賬戶名:密碼”。
技術分享圖片
3、該賬戶數據文件需要給與權限,為避免泄露只給與600權限即可。
技術分享圖片
4、而ruser用戶也應當對/usr/local/httpd/htdocs擁有讀取的權限,默認情況下已經有該權限。通過ls -lh可以查看權限。
技術分享圖片
5、啟動rsync服務。
技術分享圖片
6、本次同步我們使用密鑰對方式,實現方便便捷的同步。所以我在該同步源端建立了一個用戶ruser,密碼‘123456’。
技術分享圖片
7、開啟sshd服務,方便一會兒傳送公鑰
技術分享圖片
8、進入發起端。用root用戶創建rsa密鑰認證,建立過程我直接回車,沒有對私鑰設置密碼。
技術分享圖片
9、找到為root生成的密鑰對,將公鑰上傳到同步源的/tmp下。
技術分享圖片
10、回到同步源。在ruser用戶的宿主目錄下,創建.ssh目錄,用於存放公鑰;將/tmp下的公鑰文件導入到/home/ruser/.ssh/authorized_keys文件中。
技術分享圖片
11、回到發起端。測試是否可以ssh遠程同步源。可以看到進入到同步源中了。
技術分享圖片
12、退出ssh遠程。開始inotify部分。首先調整inotify內核參數,vim /etc/sysctl.conf。並輸入命令sysctl -p使其生效
技術分享圖片
技術分享圖片
技術分享圖片
13、掛載光盤,安裝inotify。
技術分享圖片
14、編寫觸發式同步腳本,vim /opt/inotify_rsync.sh
技術分享圖片
15、給予該腳本可執行權限,創建用於同步的文件夾,並授權。執行腳本
技術分享圖片
註意:由於是上行同步,使用的是ruser用戶,所以ruser需要對同步源中的/usr/local/httpd/htdocs擁有寫入權限。(直接在同步源中chmod -R 777即可)
16、再打開一個偽終端,找到/usr/local/httpd/htdocs下,touch一個web.html。
技術分享圖片
可以發現touch命令執行後,執行inotify-rsync.sh腳本的偽終端彈出提示消息。
17、進入同步源的同步目錄下。可以看到
技術分享圖片

rsync+inotify實現觸發式備份