rsync簡介:
rsync是一個開源的快速備份工具,能夠在不一樣主機之間鏡像同步整個目錄樹,支持增量備份,保持鏈接和權限,且採用優化的同步算法,在傳輸前執行壓縮,所以很是適用於異地備份,鏡像服務器等。rsync的官方站點是http://rsync.samba.org/. 做爲一種最經常使用的文件備份工具,rsync是Linux和Unix系統默認安裝的基本組件之一。html
[root@promote ~]# rpm -q rsync rsync-3.0.9-18.el7.x86_64
inotify簡介:
Inotify 是一個 Linux 內核特性,它監控文件系統,而且及時向專門的應用程序發出相關的事件警告,好比刪除、讀、寫和卸載操做等。c++rsync工具與inotify機制相結合,能夠實現觸發式備份(實時同步)。只要原始位置的文檔發生變化,,就當即啓動增量備份操做。web
主機 | IP | 軟件 |
---|---|---|
rsync服務器 | 192.168.100.135 | rsync |
rsync客戶機 | 192.168.100.140 | rsync、inotify |
關閉全部主機的防火牆和安全性策略,僅實驗參考。算法
systemctl stop firewallde.service setenforce 0
以網站站點做爲源目錄/var/www/html和備份帳號backuper爲例進行配置。vim
vim /etc/rsyncd.conf uid = nobody gid = nobody use chroot = yes #禁錮在源目錄 address = 192.168.100.135 #監聽地址 port 873 #監聽端口 log file = /var/log/rsyncd.log #日誌文件位置 pid file = /var/run/rsyncd.pid #存放進程ID的文件位置 hosts allow = 192.168.100.0/24 #容許訪問的客戶機地址 [wwwroot] #共享模塊名稱 path = /var/www/html #源目錄的實際路徑 comment = www.kgc.cn read only = yes #是否爲只讀 dont compress = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2 #同步時再也不壓縮的文件類型 auth users = backuper #受權帳戶 secrets file = /etc/rsyncd_users.db #存放帳戶信息的數據文件
添加一行用戶記錄,以冒號分割。還需調整帳戶權限,避免帳戶泄露。安全
vim /etc/rsyncd_users.db backuper:abc123 chmod 600 /etc/rsyncd_users.db
mkdir -p /var/www/html touch /var/www/html/index.html
執行rsync --daemon命令就能夠啓動rsync服務。若要關閉rsync服務,能夠採起kill進程的方式,如kill $(cat /var/run/rsyncd.pid),再刪掉pid文件便可。bash
rsync --daemon
rsync --daemon
mkdir /myweb 格式一: rsync -avz backuper@192.168.100.135::wwwroot /myweb //密碼abc123 格式二: rsync -avz rsync://backuper@192.168.100.135/wwwroot /myweb
rsync命令的基本用法服務器
-a 歸檔模式,表示以遞歸方式傳輸文件,並保持全部文件屬性,等於-rlptgoD。
-z 對備份的文件在傳輸時進行壓縮處理。
-H 保留硬鏈結。
-D 保持設備文件信息。
-A 保留ACL屬性信息
--delete 刪除那些目標位置有而原始位置沒有的文件。
--checksum 打開校驗開關,強制對文件傳輸進行校驗。ide
[root@promote ~]# ls /myweb index.html
爲了在同步過程當中不用輸入密碼,須要建立一個密碼文件如/etc/server.pass,在執行同步時使用選項--password-file=/etc/server.pass指定便可。工具
vim /etc/server.pass abc123
[root@promote ~]# cat /etc/server.pass abc123 [root@promote ~]# chmod 600 /etc/server.pass //設置權限 [root@promote ~]# crontab -e 30 22 * * * rsync -az --delete --password-file=/etc/server.pass backuper@192.168.100.135::wwwroot /myweb //天天22點30分執行同步 [root@promote ~]# service crond start //啓動計劃任務 Redirecting to /bin/systemctl start crond.service [root@promote ~]# chkconfig crond on 注意:正在將請求轉發到「systemctl enable crond.service」。
vim /etc/sysctl.conf fs.inotify.max_queued_events = 16384 //監控事件隊列(16384) fs.inotify.max_user_instances = 1024 //最多監控實例數(1024 fs.inotify.max_user_watches = 1048576 //每一個實例最多監控文件數(1048576 sysctl -p
inotify-tools提供inotifywait和inotifywatch輔助工具程序,用來監控和彙總改動狀況。
yum install gcc gcc-c++ -y //安裝gcc編譯環境
tar zxvf inotify-tools-3.14.tar.gz -C /opt/ cd /opt/inotify-tools-3.14 ./configure make && make install
yum install httpd -y
inotifywait -mrq -e modify,create,move,delete /var/www/html/
inotifywait命令選項:
- -e用來指定要監控那些事件
- -m表示持續監控
- -r表示遞歸整個目錄
- -q簡化輸出信息
另外一個終端在目錄路徑下對文件進行建立和刪除操做。
返回到原來的終端查看屏幕輸出結果。
vim /opt/inotify.sh #!/bin/bash INOTIFY_CMD="inotifywait -mrq -e modify,create,attrib,move,delete /var/www/html/" RSYNC_CMD="rsync -azH --delete --password-file=/etc/server.pass /var/www/html/ backuper@192.168.100.135::wwwroot/" $INOTIFY_CMD | while read DIRECTORY EVENT FILE do if [ $(pgrep rsync | wc -l) -ge 0 ] ; then $RSYNC_CMD fi done chmod +x /opt/inotify.sh
vim /etc/rsyncd.conf [wwwroot] .... read only=No ....
chmod 777 /var/www/html chown -R nobody:nobody /var/www/html
[root@promote ~]# cd /opt/ [root@promote opt]# ./inotify.sh