代碼監聽以及更新服務inotify-tools、rsync

dns
負載均衡  nginx lvs f5
網絡




yum install inotify-tools
yum install rsync
service sshd restart

使用rsync+inotify-tools+ssh實現文件實時同步
    在某些服務器架構中,會遇到文件同步問題,例如須要作站點鏡像備份,同步文件到多個CDN節點等。須要解決的主要有兩個問題
1.如何實現文件同步問題? 2.什麼時候執行同步操做?
    文件同步可使用rsync+ssh,何時自行同步操做呢?可能部分人會想到cron,這個沒錯,能夠實現的,可是確實有點浪費資源,由於cron並不知道文件是否被修改過,只是不停的週期性的執行,若是文件修改後再執行同步操做,不修改就不執行那應該比較好,其實inotify就能夠作到,只要你的服務器不是古董級別的,就支持inotify,來幾句沒用的話:
    Inotify 是一個 Linux特性,它監控文件系統,而且及時向專門的應用程序發出相關的事件警告,好比刪除、讀、寫和卸載操做等。Inotify 反應靈敏,用法很是簡單,而且比 cron 任務的繁忙輪詢高效得多。

    假設某服務器架構中有兩臺web服務器(IP爲192.168.1.252和192.168.1.254),一臺代碼更新發布服務器(IP爲192.168.1.251),須要同步的目錄是/data/www/,結構圖以下:下面介紹一下安裝步驟
在代碼發佈服務器(192.168.1.251)上安裝inotify,執行以下命令
tar xzvf inotify-tools-3.14.tar.gz
cd inotify-tools-3.14
./configure
make
make install
cd ..
在全部服務器上(代碼發佈服務器和須要同步的服務器)上安裝rsync,命令以下:
tar zxvf rsync-3.0.9.tar.gz
cd rsync-3.0.9
./configure
make
make install
#------以上命令在每臺服務器上都須要執行---------

在代碼發佈服務器與須要同步的服務器之間配置ssh key信任,在代碼發佈服務器上生成公鑰和私鑰
ssh-keygen -t rsa
直接三次回車
將公鑰添加到各個須要更新的主機authorized_keys 文件中,在代碼更新服務器上再執行
ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.1.252
ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.1.254
若是有提示 輸入yes
按提示輸入密碼回車
而後兩臺須要web服務器(192.168.1.252和192.168.1.254 )重啓ssh
service sshd restart
在代碼發佈服務器上以root身份建立inotify_rsync.sh腳本vi /root/inotify_rsync.sh 輸入

#!/bin
SRC=/data/www/    #代碼發佈服務器目錄
DST=/data/www/    #目標服務器目錄
IP="192.168.1.252 192.168.1.254"    #目標服務器IP,多個以空格隔開
USER=root
/usr/local/bin/inotifywait -mrq --timefmt '%Y-%m-%d %H:%M' --format '%T %w%f %e' --exclude "(.swp|.swx|.svn)" \
-e create,move,delete,close_write,attrib $SRC | while read files
do
for i in $IP
do
    /usr/local/bin/rsync -ahqzt --exclude Runtime --delete $SRC $USER@$i:$DST
    echo $files >>/tmp/rsync.log 2>&1
done
done

相關解釋:
/usr/local/bin/inotifywait -mrq --timefmt '%Y-%m-%d %H:%M' --format '%T %w%f %e' --exclude "(.swp|.swx|.svn)" \
-e create,move,delete,close_write,attrib $SRC | while read files

 -m 是保持一直監聽
 -r 是遞歸查看目錄
 -q 是打印出事件
 -e create,move,delete,close_write,attrib 是指 「監聽 建立 移動 刪除 寫入 權限」 事件
 
/usr/local/bin/rsync -ahqzt --exclude Runtime --delete $SRC $USER@$i:$DST
 -a 存檔模式
 -h 保存硬鏈接
 -q 制止非錯誤信息
 -z 壓縮文件數據後傳輸
 -t 維護修改時間
 -delete 刪除於多餘文件
--exclude 排除同步的文件 而後賦予腳本可執行權限
chmod +x /root/inotify_rsync.sh
設置開機自啓動echo "/root/inotify_rsync.sh &" >> /etc/rc.local
執行腳本/root/inotify_rsync.sh &
在代碼更新服務器的/data/www/目錄中建立文件,測試效果。


101.201.236.126
hulu-9302273312.nginx

相關文章
相關標籤/搜索