<a name="vkTtS"></a>html
<a name="moE1k"></a>linux
存儲服務器數據實時同步到備份服務器 <a name="THGDm"></a>git
實時同步是一種只要當前目錄觸發事件,就立刻同步到遠程的目錄。 <a name="zi5md"></a>github
保證數據的連續性<br />減小人力成本 <a name="Cgj9v"></a>web
inotify+rsync<br />sersync+rsync<br />lsyncd<br />Inotify是一個通知接口,用來監控文件系統的各類變化,若是文件存取,刪除,移動。能夠很是方便地實現文件異動告警,增量備份,並針對目錄或文件的變化及時做出響應。rsync+inotify能夠實觸發式實時同步增量備份。<br />sersync是國人基於rsync+inotify-tools開發的工具,不只保留了優勢同時還強化了實時監控,文件過濾,簡化配置等功能,幫助用戶提升運行效率,節省時間和網絡資源。<br />sersync優勢<br />(1)支持經過配置文件管理<br />(2)真正的守護進程socket(不須要寫腳本)<br />(3)能夠對失敗文件定時重傳(定時任務功能)<br />(4)第三方的HTTP接口(例如更新cdn緩存)<br />(5)默認多線程rsync同步shell
<a name="kmz2V"></a>express
inotify:實時監控目錄數數據變化軟件,安裝在存儲服務器。 <a name="yykPa"></a>vim
yum install -y inotify-tools #安裝inotify rpm -ql inotify-tools #查看軟件包內容 內容: /usr/bin/inotifywait #監控目錄數據變化的命令 /usr/bin/inotifywatch #統計監控事件信息
<a name="prLZA"></a>windows
/usr/bin/inotifywait <br />參數:緩存
-m | 讓監控過程始終保持下去;沒有這個參數,只監控一次 | |
---|---|---|
-r | 遞歸監控目錄 | |
format | 定義輸出信息格式<br />時間信息 建立什麼文件 事件信息:建立文件 | |
timefmt | 具體定義時間的格式 | |
-q | 輸出更少的信息,只輸出事件信息 | |
-e | 只監控什麼事件 |
事件:<br />inotifywait -mrq --format "%w%f" -e "close_write,move,create,delete" /data
access | 文件或目錄內容被讀取 | |
---|---|---|
modify | 文件或目錄內容被寫入 | |
attrib | 文件或目錄屬性被改變 | |
close_write | 文件或目錄被關閉,在打開以後有寫操做而後關閉文件 | |
close_nowrite | 文件或目錄被關閉,在打開以後沒有任何操做<br />編寫文件--打開文件--編輯/沒有編輯--關閉文件 | |
close | 文件或目錄被關閉,寫或讀以後被關閉 | |
open | 文件或目錄被打開 | |
moved_to | 文件或目錄被移動到監控目錄,其它目錄數據移動到監控目錄 | |
moved_from | 文件或目錄從監控目錄移除,監控目錄數據移動到其它地方 | |
move | 文件或目錄移動到監控目錄或移除監控目錄 | |
create | 文件或目錄在監控目錄中被建立出來 | |
delete | 文件或目錄在監控目錄中被刪除 | |
delete_self | 文件或目錄被刪除 | |
unmount | 包含文件或目錄的文件系統被卸載 | |
重要事件: close_write、move、create、delete |
<a name="iuksB"></a>
語法結構:inotifywait 參數信息 監控目錄 inotifywait -mrq --timefmt "%F %T" --format "%T %w%f %e" /data #監控命令 2019-07-20 22:13:20 /data/oldboy_dir/oldboy04.txt CREATE #監控的反應信息 # timefmt裏的"%F %T"對應2019-07-20 22:13:20 #format裏的%T對應timefmt裏的"%F %T" # %w對應監控的目錄 /data/oldboy_dir # %f對應觸發事件文件數據信息 create # %e對應顯示觸發的事件信息
<a name="MRKo9"></a>
第一步:進行數據監控
[root@nfs01 ~]#inotifywait -mrq --format "%w%f" -e "close_write,move,create,delete" /data /data/test.txt /data/test.txt
第二步:部署好rsync守護進程服務<br />服務端:<br />安裝rsync軟件<br />編輯配置文件<br />建立虛擬(rsync)用戶<br />建立密碼文件並修改權限600<br />建立備份目錄,修改屬主屬組權限<br />啓動服務程序服務/重啓程序<br /> 客戶端:<br />建立密碼文件,並修改權限600,測試傳輸<br />第三步:編寫腳本
[root@nfs01 scripts]#vi inotify_watch.sh [root@nfs01 scripts]#cat inotify_watch.sh #!/bin/bash inotifywait -mrq --format "%w%f" -e "close_write,move,create,delete" /data|\ while read line do rsync -az --delete /data/ rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password done
問題一:<br />執行腳本總有輸出信息,而且腳本不能持續運行,如何實現腳本在後臺一直運行:<br />方法一: 執行腳本後面加上 &
sh /server/scripts/inotify_watch.sh # &:讓腳本在後臺運行,但鏈接斷開,腳本就不回運行 # 在編輯腳本時,將-avz中的v去掉,不會再有輸出信息
方法二: 利用專用命令 nohup
nohup sh /server/scripts/inotify_watch.sh & #腳本一直持續運行,斷開也會運行
若是想要腳本開機運行,能夠寫入/erc/rc.local<br />問題二:數據已經同步完畢,可是腳本還在一直運行 shell知識學習完,有帶解決。 <a name="TDFrl"></a>
sersync軟件實現實時同步:先安裝好inotify+rsync <a name="3K8HN"></a>
第一步:下載sersync軟件<br />http://github.com/wsgzao/sersync<br />第二步:上傳軟件到linux系統
yum install -y lrzsr # lrzsz:實現Windows,linux互傳文件 rz -y # 將Windows數據傳輸到linux sz -y # 將linux數據傳輸到windows
第三步:安裝部署sersync軟件(二進制包)
unzip sersync_installdir_64bit.zip mv /server/tools/sersync_installdir_64bit/sersync/ /usr/local/ # /usr/local/ 第三方軟件目錄
第四步:修改配置文件
[root@nfs01 ~]# vim /usr/local/sersync/conf/confxml.xml 說明:排除指定信息不要進行實時同步 <filter start="false"> <exclude expression="(.*)\.svn"></exclude> <exclude expression="(.*)\.gz"></exclude> <exclude expression="^info/*"></exclude> <exclude expression="^static/*"></exclude> </filter> 說明:指定監控的事件信息 <inotify> <delete start="true"/> <createFolder start="true"/> <createFile start="false"/> <closeWrite start="true"/> <moveFrom start="true"/> <moveTo start="true"/> <attrib start="false"/> <modify start="false"/> </inotify> 重點說明:實現實時同步關鍵配置 <sersync> <localpath watch="/data"> <remote ip="127.16.1.41" name="backup"/> <!--<remote ip="192.168.8.39" name="tongbu"/>--> <!--<remote ip="192.168.8.40" name="tongbu"/>--> </localpath> <rsync> <commonParams params="-az"/> <auth start="true" users="rsync_backup" passwordfile="/etc/rsync.password"/> <userDefinedPort start="false" port="874"/><!-- port=874 -->
<br />第五步:啓動實時同步服務,並檢查測試<br />首先讓程序文件有執行權限 x
[root@nfs01 bin]# chmod +x /usr/local/sersync/bin/sersync
讓程序啓動<br />(1)在程序的bin目錄啓動:
[root@nfs01 bin]# ./sersync -dro /usr/local/sersync/conf/confxml.xml
(2)建立軟連接啓動
[root@nfs01 bin]# ln -s /usr/local/sersync/bin/sersync /usr/local/sbin/sersync [root@nfs01 bin]# ll /usr/local/sbin/sersync [root@nfs01 bin]# lrwxrwxrwx 1 root root 30 Jul 21 00:28 /usr/local/sbin/sersync -> /usr/local/sersync/bin/sersync
(3)加入環境變量
[root@nfs01 bin]# export PATH=$PATH:/usr/local/sersync/bin/ # 臨時設置 [root@nfs01 bin]# vi /etc/profile # 永久設置 export PATH=$PATH:/usr/local/sersync/bin/ # 添加在文件中 # source /etc/profile 或者 . /etc/profile 讓修改的配置文件生效
而後sersync就可使用了 <a name="xskeA"></a>
-d | 啓用守護進程模式 | |
---|---|---|
-r | 在監控前,將監控目錄與遠程主機用rsync命令推送一遍 | |
-o | 指定配置文件,默認使用confxml.xml文件 | |
-n | 指定開啓守護線程的數量,默認爲10個 | |
-m | 使用 -m refreshCDN 開啓刷新CDN模塊<br />使用 -m socket 開啓socket模塊<br />使用 -m http 開啓http模塊 | |
不加-m參數,則默認執行同步程序 |
啓動程序:
sersync -dro /usr/local/sersync/conf/confxml.xml
<a name="sfCmU"></a>
當用戶存儲數據時,存儲到nfs服務器中,inotify監控到有新數據產生的時候,會同步給web01中的/data01,當nfs服務器壞掉的時候,web01中data掛載目錄點會被卸載,掛載上data01,這樣用戶讀取數據的時候,就會讀取到data01的數據,data01的數據同nfs服務器中的數據同樣。
原文出處:https://www.cnblogs.com/basa/p/11220209.html