rsync+inotify實時備份
阿新 • • 發佈:2018-08-06
如何 模塊名 關閉 進程id 免密 端口 cmd 讀寫權限 免密碼 一、rsync及inotify概述
1.rsync概述
rsync是linux系統下的數據鏡像備份工具。使用快速增量備份工具Remote Sync可以遠程同步,支持本地復制,或者與其他SSH、rsync主機同步。
2.inotify概述
inotify 是一個 Linux特性,它監控文件系統操作,比如讀取、寫入和創建。Inotify 反應靈敏,用法非常簡單,並且比 cron 任務的繁忙輪詢高效得多。學習如何將 inotify 集成到您的應用程序中,並發現一組可用來進一步自動化系統治理的命令行工具。
案例環境如下:
角色 | IP地址 | 安裝軟件包 |
---|---|---|
rsync同步源 | 192.168.174.141 | rsync、 |
rsync發起端 | 192.168.174.165 | rsync、inotify-tools |
二、配置rsync源服務器
1.建立/etc/rsyncd.conf配置文件
vim /etc/rsyncd.conf uid = nobody gid = nobody use chroot = yes //是否禁錮在源目錄,yes為是 address = 192.168.174.141 //監聽地址 port 873 //監聽端口 log file = /var/log/rsyncd.log //日誌文件路徑 pid file = /var/run/rsyncd.pid //進程ID文件路徑 hosts allow = 192.168.174.0/24 //允許訪問的客戶機的地址段 [wwwroot] //共享模塊名稱 path = /var/www/html //源目錄的實際地址 comment = www.kgc.cn read only = no //是否為只讀 dont compress = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2 //同步時 不再壓縮的文件類型 auth users = backuper //授權賬戶 secrets file = /etc/rsyncd_users.db //存放賬戶信息的數據文件
2.為備份賬戶創建數據文件
vim /etc/rsyncd_users.db
backuper:abc123 //backuper為用戶名 abc123為密碼
chmod 600 /etc/rsyncd_users.db //更改備份賬戶的讀取權限,提高安全性
mkdir -p /var/www/html
chmod 777 /var/www/html //更改源目錄的讀寫權限
chown -R nobody:nobody /var/www/html //更改源目錄的所屬主及所屬組
3.開啟服務,運行參數為 --deamon ;若需關閉服務,可采取kill進程的方式,如kill $(cat /var/run/rsync.pid)
rsync --daemon
netstat -natp | grep rsync
tcp 0 0 192.168.174.141:873 0.0.0.0:* LISTEN 4875/rsync
三、配置rsync發起端
將對方源目錄的文件同步到發起端的/opt目錄下,方法有三種:
(1)rsync -avz 備份用戶名@同步源IP地址::共享模塊名 /發起端目錄 password:備份用戶密碼
rsync -avz [email protected]::wwwroot /opt/
password:abc123
(2) rsync -avz rsync://備份用戶名@共享模塊名 /發起端目錄 password:備份密碼
rsync -avz rsync://[email protected]/wwwroot /opt/
password:abc123
(3)免密碼交互
vim /etc/server.pass //創建server.pass文件備份用戶保存密碼
abc123
chmod 600 /etc/server.pass //更改密碼文件讀取權限,提高安全性
rsync -az --delete --password-file=/etc/server.pass [email protected]::wwwroot /opt
測試是否同步
在同步源服務器上的共享目錄下創建aaa.html
四、發起端配置inotify實時同步
1.調整inotify內核參數
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)
2.安裝編譯inotify-tools
yum install gcc gcc-c++ make -y
cd /opt/inofiry-tools-3.14
./configure
make && make install
3.監控事件
重新開啟一個終端
inotifywait -mrq -e modify,create,move,delete /var/www/html
在/var/www/html目錄下創建一個a.txt文件,切換終端查看命令輸出的情況
4.創建觸發式同步腳本
用來檢測本機/var/www/html目錄的變動情況,一旦有更新觸發rsync同步操作,則上傳至服務器192.168.174.141的/var/www/html
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/ [email protected]::wwwroot/"
$INOTIFY_CMD | while read DIRECTORY EVENT FILE
do
if [ $(pgrep rsync | wc -l) -le 0 ] ; then
$RSYNC_CMD
fi
done
5.測試
在發起端/var/www/html目錄下創建test.txt文件
切換到同步源服務器下/var/www/html下查看
將發起端的test.txt文件刪除
切換到同步源服務器,此時源服務器下的test.txt文件也被刪除,說明同步成功。
rsync+inotify實時備份