Inotify+Rsync實時同步文件並輪流重啓多臺Apache服務

一、實驗環境:CentOS7

       圖片.png




二、實驗目標:

          Web_001到Web_N所有的服務器/var/www/html/目錄下的數據一致,當該目錄下的數據發生變化時,依次重啓Apache服務。

                        (應用場景:用於發佈tomcat或Apache等根目錄下的項目)


三、實驗步驟:

    1.登錄到每臺服務器,修改主機名、IP地址、DNS、並關閉firewalld和selinux防火牆等(改完需要重啓電腦纔可生效),並安裝rsync、httpd、inotify-tools軟件等

        (1)主機名稱、防火牆等相關修改

        圖片.png


        (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 的默認值

            下圖爲默認的參數值:

        圖片.png

        

       以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 使其立即生效         

        圖片.png

        圖片.png


    2.登錄到Web_N服務器,創建免祕鑰登錄證書,並複製該祕鑰證書到遠程服務器Web_001~Web_N臺服務器(若服務器數量比較多,可以使用腳本操作,可參考下面重新啓動Apache服務的腳本)

                    注意:因爲腳本是使用的SSH遠程訪問後執行命令,所以就算是Web_N本地也需要執行ssh-copy-id [email protected]

            圖片.png

            圖片.png

    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.將腳本放置到開機啓動文件內,並且後臺運行。


                圖片.png



    注意事項:

                注意觀察文件傳輸時間。

        圖片.png

        圖片.png


        

        附:rsync亦可以使用匿名同步,但需要配置/etc/rsyncd.conf、/etc/rsyncd.passwd(該文件需手動在DEST中新建)、/etc/rsyncd.motd(該文件需手動在DEST中新建)等文件

                圖片.png

                圖片.png

                圖片.png

                圖片.png

                圖片.png

                圖片.png

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章