一、實驗環境:CentOS7
二、實驗目標:
Web_001到Web_N所有的服務器/var/www/html/目錄下的數據一致,當該目錄下的數據發生變化時,依次重啓Apache服務。
(應用場景:用於發佈tomcat或Apache等根目錄下的項目)
三、實驗步驟:
1.登錄到每臺服務器,修改主機名、IP地址、DNS、並關閉firewalld和selinux防火牆等(改完需要重啓電腦纔可生效),並安裝rsync、httpd、inotify-tools軟件等
(1)主機名稱、防火牆等相關修改
(2)安裝rsync、httpd軟件
yum install rsync httpd -y
至此,就可以使用rsync同步目錄或者是文件,使用方法和scp類似,再配合計劃任務就可以作爲日常的週期性數據備份。但需要注意的是,scp只能用於複製小的目錄,他的工作原理是需要遍歷所有文件後才執行復制數據的動作。
例如:/usr/bin/rsync -aqzP --delete /tmp/hbgslz/ [email protected]:/tmp/hbgslz/
192.168.1.45爲遠程服務器
-l --links 保留軟鏈結
-p --perms 保持文件權限
-o --owner 保持文件屬主信息
-g --group 保持文件屬組信息
-D --devices 保持設備文件信息
-P 顯示文件傳輸的進度信息。(實際上"-P"="--partial --progress",其中的"--progress"纔是顯示進度信息的)。
-q --quiet 忽略錯誤信息的輸出
-a --archive 歸檔模式,表示遞歸傳輸並保持文件屬性。等同於"-rtopgDl"。
-r --recursive 遞歸到目錄中去。
-t --times 保持mtime屬性。強烈建議任何時候都加上"-t",否則目標文件mtime會設置爲系統時間,導致下次更新檢查出mtime不同從而導致增量傳輸無效。
-z 在傳輸過程中壓縮文件數據
--delete 以SRC爲主,對DEST進行鏡像同步。多則刪之,少則補之,注意"--delete"是在接收端DEST上執行的
(3)安裝inotify-tools軟件(從kernel 2.6.13開始正式併入內核)
wget -c http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz
tar -zxf inotify-tools-3.14.tar.gz
cd inotify-tools-3.14
./configure --prefix=/usr/local/inotify/
make
make install
(4)修改/proc/sys/fs/inotify/目錄下max_queued_events、max_user_instances、max_user_watches 的默認值
下圖爲默認的參數值:
以max_user_watches爲例,修改/etc/sysctl.conf下的內核參數:
文件路徑:/proc/sys/fs/inotify/max_user_watches
/etc/sysctl.conf添加內容:fs.inotify.max_user_watches = 999999999
將文件路徑紅色區域的內容複製到/etc/sysctl.conf裏面,並將“/”改爲“.”,修改完內核參數後,必須執行sysctl -p 使其立即生效
2.登錄到Web_N服務器,創建免祕鑰登錄證書,並複製該祕鑰證書到遠程服務器Web_001~Web_N臺服務器(若服務器數量比較多,可以使用腳本操作,可參考下面重新啓動Apache服務的腳本)
注意:因爲腳本是使用的SSH遠程訪問後執行命令,所以就算是Web_N本地也需要執行ssh-copy-id [email protected]
3.數據同步和遠程重啓Apache服務腳本:
inotify_rsync_data.sh:用於數據同步
#!/bin/bash SRC=/var/www/html/ [email protected]:/var/www/html/ /usr/local/inotify/bin/inotifywait -mrq -e access,modify,attrib,close_write,close_nowrite,close,open,moved_to,moved_from,move,create,delete,delete_self,unmount ${SRC} | while read A B C do chmod 755 -R $SRC /usr/bin/rsync -aqzP --delete $SRC $DEST done
inotify_rsync_service.sh:用於數據同步完後重啓Apache服務
#!/bin/bash SRC=/var/www/html/ /usr/local/inotify/bin/inotifywait -mrq -e access,modify,attrib,close_write,close_nowrite,close,open,moved_to,moved_from,move,create,delete,delete_self,unmount ${SRC} | while read A B C do #遠程登錄指定的服務器執行重啓Apache的服務,注意配置SSH免祕鑰登錄 for n in {104,45};do ssh 192.168.1.$n "/usr/bin/systemctl restart httpd.service" done done
4.將腳本放置到開機啓動文件內,並且後臺運行。
注意事項:
注意觀察文件傳輸時間。
附:rsync亦可以使用匿名同步,但需要配置/etc/rsyncd.conf、/etc/rsyncd.passwd(該文件需手動在DEST中新建)、/etc/rsyncd.motd(該文件需手動在DEST中新建)等文件