在CentOS7上配置rsync源服務器+inotify實時同步
rsync是一個開源的快速備份工具,可以再不同主機之間鏡像同步整個目錄樹,支持增量備份,保持鏈接和權限,且采用優化的同步算法,再傳輸前執行壓縮,因此非常適用於異地備份、鏡像服務器等應用。
原理
再遠程同步任務中,負責發起rsync同步操作的客戶機稱為發起端,而負責響應來自客戶機的rsync同步操作的服務器稱為同步源。再同步過程中,同步源負責提供文檔的原始位置,而發起端對該位置具有讀取權限,如圖所示:
配置rsync源服務器
1.檢查rsync是否安裝
[root@localhost ~]# rpm -q rsync
rsync-3.0.9-18.el7.x86_64
2.修改rsync默認配置文件,位於/etc/rsyncd.conf。
插入以下內容 uid = nobody gid = nobody use chroot = yes //禁錮在源目錄// address = 192.168.126.138 //監聽地址// port 873 //監聽端口// log file = /var/log/rsyncd.log //日誌文件位置// pid file = /var/run/rsyncd.pid //存放進程ID的文件位置// hosts allow = 192.168.126.0/24 //允許訪問的客戶機地址// # max connections = 4 # pid file = /var/run/rsyncd.pid # exclude = lost+found/ # transfer logging = yes # timeout = 900 # ignore nonreadable = yes # dont compress = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2 [wwwroot] //共享模塊名稱// path = /var/www/html //源目錄的實際路徑// read only = no //是否為只讀// dont compress = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2 //同步時不再壓縮的文件類型// auth users = backuper //授權賬戶// secrets file = /etc/rsyncd_users.db //存放賬戶信息的數據文件//
3.為備份賬戶創建數據文件
根據上一步的設置,創建賬號數據文件,添加一行用戶記錄,以冒號分隔,用戶名稱為backup,密碼為abc123。由於賬號信息采取明文存放,因此應調整文件權限,避免賬號信息泄露。
[root@localhost ~]#vim /etc/rsyncd_users.db
backuper:abc123
[root@localhost ~]#chmod 600 /etc/rsyncd_users.db
4.開啟rsync服務,運行參數為 --daemon。
[root@localhost opt]# systemctl stop firewalld.service [root@localhost opt]# setenforce 0 [root@localhost opt]# rsync --daemon [root@localhost opt]# netstat -ntap | grep rsync tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN 2934/rsync
使用rsync備份工具
配置源的方法:
在執行運程同步任務時,rsync命令需要指定同步源服務器中的資源位置。rsync同步源的資源表示方式為“用戶名@主機地址::共享模塊名”或者“rsync://用戶名@主機地址/共享模塊名”,前者為兩個冒號分隔形式,後者為URL地址形式。
rsync -avz [email protected]::wwwroot /opt/
rsync -avz rsync://[email protected]/wwwroot /opt/
1.執行以下操作將源服務器中的wwwroot共享模塊,下載到客戶機的本地/var/www/html目錄下。
源服務器:
[root@localhost ~]# cd /var/www/html/
[root@localhost html]# echo "123" > 111.txt
[root@localhost html]# echo "456" > 222.txt
[root@localhost html]# ls
111.txt 222.txt
客戶端:
[root@localhost opt]# rsync -avz [email protected]::wwwroot/ ./ //下載到當前目錄//
Password:
receiving incremental file list
./
111.txt
222.txt
sent 102 bytes received 221 bytes 23.93 bytes/sec
total size is 8 speedup is 0.02
[root@localhost html]# ls
111.txt 222.txt
2.在客戶端上傳文件到源服務器
[root@localhost opt]#mkdir b1 b2 b3 b4
[root@localhost opt]# ls
b1 b2 b3 b4 b5 rh
[root@localhost opt]# rsync -avz [email protected]::wwwroot/ ./ #上傳
Password:
receiving incremental file list
./
111.txt
222.txt
sent 102 bytes received 221 bytes 23.93 bytes/sec
total size is 8 speedup is 0.02 #上傳成功
源服務器上查看:
[root@localhost ~]# cd /var/www/html/
[root@localhost html]# ls
b1 b2 b3 b4 b5 rh
註意:
上傳前需要把源服務器rsync的配置文件rsyncd.conf中的uid、gid修改為root
配置rsync+inotify實施同步
將rsync工具與inotify機制相結合,可以實現觸發式備份(實時同步)——只要原始位置的文檔發生變化,就立即啟動增量備份操作,如圖所示,否則處於靜默等待狀態。這樣,就避免了按固定周期備份時存在的延遲性、周期過密等問題。
正因為inotify通知機制由Linux內核提供,因此要做本機監控,在觸發式備份中應用時更適合上行同步。下面一次介紹其配置過程。
1.調整inotify內核參數
當要監控的目錄、文件數量較多或者變化較頻繁時,建議加大這三個參數的值。可以直接修改/etc/sysctl.conf的配置文件,將管理隊列、實例數、監控數進行設置。
[root@localhost html]# vim /etc/sysctl.conf
# For more information, see sysctl.conf(5) and sysctl.d(5). //添加//
fs.inotify.max_queued_events = 16384
fs.inotify.max_user_instances = 1024
fs.inotify.max_user_watches = 1048576
[root@localhost html]# sysctl -p //啟動//
fs.inotify.max_queued_events = 16384
fs.inotify.max_user_instances = 1024
fs.inotify.max_user_watches = 1048576
2.安裝inotifi-tools
使用inotify機制還需要安裝inotifi-tools,以便提供inotifywait和inotifywatch輔助工具程序,用來監控和匯總改動情況。
[root@localhost rs]# tar zxvf inotify-tools-3.14.tar.gz -C /opt/ #解包
[root@localhost opt]# cd inotify-tools-3.14/
[root@localhost inotify-tools-3.14]# yum install gcc gcc-c++ make -y #安裝編譯軟件
[root@localhost inotify-tools-3.14]# ./configure
[root@localhost inotify-tools-3.14]#make && make install
3.編寫觸發式同步腳本
root@localhost opt]# vim 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/ [email protected]::wwwroot/"
$INOTIFY_CMD | while read DIRECTORY EVENT FILE
do
if [ $(pgrep rsync | wc -l) -le 0 ] ; then
$RSYNC_CMD
fi
done
上述腳本用來檢測本機/var/www/html目錄的變動情況,一旦有更新觸發rsync同步操作,上傳備份至服務器192.168.126.138的/var/www/html目錄下。
4.驗證
1).在源服務器運行inotifywait -mrq -e modify,create,move,delete /var/www/html/
[root@localhost html]# inotifywait -mrq -e modify,create,move,delete /var/www/html/ //靜默等待狀態//
2)打開源服務器的另一個窗口在/var/www/html目錄下創建新的文件
[root@localhost ~]# cd /var/www/html/
[root@localhost html]# ls
[root@localhost html]# echo "this is 111" > 111.txt //寫入文件//
[root@localhost html]# echo "this is 222" > 222.txt
[root@localhost html]# rm -rf 111.txt //刪除文件//
3)查看源服務器的更新觸發狀態
[root@localhost html]# inotifywait -mrq -e modify,create,move,delete /var/www/html/
/var/www/html/ CREATE 111.txt
/var/www/html/ MODIFY 111.txt
/var/www/html/ CREATE 222.txt
/var/www/html/ MODIFY 222.txt
/var/www/html/ DELETE 111.txt
//監控端已有反饋//
4)查看服務器中的/var/www/html目錄下的變化情況
[root@localhost html]# ls
111.txt 222.txt
[root@localhost html]# ls
222.txt
實驗成功
在CentOS7上配置rsync源服務器+inotify實時同步