rsync+inotify實現遠程同步
阿新 • • 發佈:2018-07-26
root .sh 時間 遠程 文件的權限 reat hosts use systemctl
inotify介紹
rsync介紹
rsync,英文全稱是remote synchronize,是一款實現遠程同步功能的免費軟件,它在同步文件的同時,可以保持原來文件的權限、時間、軟硬鏈接等附加信息。 rsync提供了一個客戶機和遠程文件服務器的文件同步的快速方法,而且可以通過ssh方式來傳輸文件。甚至還可以實現只同步一個文件裏有變化的內容部分,所以可以實現快速的同步備份數據。同時,rsync還可以實現同步本地數據、刪除文件和目錄的功能。
Inotify 是一個 Linux 內核特性,它監控文件系統,並且及時向專門的應用程序發出相關的事件警告,比如刪除、讀、寫和卸載操作等。您還可以跟蹤活動的源頭和目標等細節。
- rsync+notify實現自動同步
如果要實現定時同步數據,可以在客戶端將rsync加入定時任務,但是定時任務的同步時間粒度並不能達到實時同步的要求。在Linux kernel 2.6.13後提供了inotify文件系統監控機制。通過rsync+inotify組合可以實現實時同步。
- 實驗要求:
源服務器:192.168.177.132(rsync,httpd)
發起端:192.168.177.132(rsync,httpd,inotify-tools)
源服務器
# rpm -q rsync //查看rsync有沒有安裝 # vim /etc/rsyncd.conf //rsync的配置文件 uid = nobody gid = nobody use chroot = yes address = 192.168.177.132 port 873 log file = /var/log/rsyncd.log pid file = /var/run/rsyncd.pid hosts allow = 192.168.177.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 # yum install httpd -y //安裝web服務 # rsync --daemon //啟動rsync服務 # systemctl stop firewalld.service //關閉防火墻 # setenforce 0 //增強性安全功能 # chmod 777 /var/www/html/ # cd /var/www/html # echo "this is test" > 123.txt
發起端
# systemctl stop firewalld.service
# setenforce 0 //必須先關閉防火墻
交互,輸入的是源服務器的地址
# rsync -avz [email protected]::wwwroot /opt/
免交互,無需輸入密碼
# vim /etc/server.pass
# chmod 600 /etc/server.pass
# rsync -az --delete --password-file=/etc/server.pass [email protected]::wwwroot /opt
rsync+inotify自動同步
inotify裝在發起端
rsync在源服務器上
源服務器:
# vim /etc/rsyncd.conf
read only = no
# pkill -9 rsync
# cd /var/run/
# rm -rf rsyncd.pid //刪除pid進程
# rsync --daemon //重啟服務
發起端:
# chmod 777 /var/www/html/
# tar zxvf inotify-tools-3.14.tar.gz -C /opt //解壓
# cd inotify-tools-3.14/
./configure
# yum install gcc gcc-c++ -y //安裝編譯環境
# make && make install
# vim /etc/sysctl.conf //進行優化
fs.inotify.max_queued_events = 16384
fs.inotify.max_user_instances = 1024
fs.inotify.max_user_watches = 1048576
# sysctl -p //立即生效
# inotifywait -mrq -e modify,create,move,delete /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
# chmod +x inotify.sh
# ./inotify.sh
rsync+inotify實現遠程同步