1. 什麼是Sersync
Sersync是基於inotify實現實時文件備份。與inotify相比,sersync可以比較方便地精確到具體哪個文件或文件夾。
2. 安裝sersync的前提
sersync是使用基於inotify的,儘管可以不安裝inotify-tools,但還是需要linux內核支持,需要至少2.6.13或以上。
確定內核版本是否符合需求
[root@Lab1 ~]# uname -r
2.6.32-431.el6.x86_64
[root@sv01 ~]# uname -r
2.6.32-279.el6.i686
可以看出,兩臺機器的均是2.6.32版本內核,滿足了前提條件,而最後面接的是架構,前者x86_64代表64位系統,後者i686代表32位系統
3. 安裝sersync
sersync並不能yum安裝,只能透過網上下載,可以到它官方網站下載32位和64位的程序
https://code.google.com/archive/p/sersync/downloads
https://github.com/wsgzao/sersync/blob/master/sersync2.5.4_64bit_binary_stable_final.tar.gz
32位版本只有2.5版,應該是作者停止開發了,而64位版也很久沒更新了,停留在2.5.4有一年時間了。
這裏以64位爲例,建議用瀏覽器下載後上傳到服務器上
[root@Lab1 src]# cd /usr/local/src
[root@Lab1 src]# rz -be
rz waiting to receive.
zmodem trl+C
100% 710 KB 710 KB/s 00:00:01 0 Errors ary_stable_final.tar.gz...
[root@Lab1 src]# tar zxf sersync2.5.4_64bit_binary_stable_final.tar.gz #解壓得到GNU-Linux-x86文件夾
[root@Lab1 src]# mv GNU-Linux-x86 /usr/local/sersync #把該文件夾挪到/usr/local下並改名爲sersync
[root@Lab1 src]# cd /usr/local/sersync/
[root@Lab1 sersync]# ls #可以看到sersync的結構非常簡單,只有一個配置文件confxml.xml和執行文件sersync2
confxml.xml sersync2
4. 配置sersync
配置文件就是confxml.xml,裏面已經有一些演示的內容供參考,這需要修改一下即可
<host hostip="localhost" port="8008"></host>
#可以把hostip改成本地ip地址,port是源端口,這兩個參數一定要有,否則會啓動失敗。
<debug start="false"/>
#是否開啓排錯模式,如果開啓,則會輸出很多有用的信息以便排錯
<fileSystem xfs="false"/>
#文件系統是否xfs格式
<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>
#定義inotify的觸發事件。
<sersync>
<localpath watch="/opt/tongbu">
<remote ip="127.0.0.1" name="tongbu1"/>
</localpath>
#要監視的本地文件夾,並設定遠端備份服務器的ip地址和rsync daemon的模塊名稱
<rsync>
<commonParams params="-artuz"/>
#執行rsync時的參數,默認是artuz,a相當於 -rlptgoD (no -H,-A,-X),r是遞歸,t保留修改時間,u是目標文件更新則略過,z是壓縮。我會再加上b,用於備份一份舊文件,會以~結尾。
<auth start="false" users="root" passwordfile="/etc/rsync.pas"/>
#是否開啓認證,並指定用戶名和密碼文件。
<userDefinedPort start="false" port="874"/><!-- port=874 -->
<timeout start="false" time="100"/><!-- timeout=100 -->
#是否開啓超時,如是,超時時間爲100秒
<ssh start="false"/>
#是否開啓ssh
</rsync>
<failLog path="/tmp/rsync_fail_log.sh" timeToExecute="60"/><!--default every 60mins execute once-->
失敗日誌文件,每60分鐘重新執行一次。
<crontab start="false" schedule="600"><!--600mins-->
是否開啓計劃任務,每60分鐘一次
<crontabfilter start="false">
是否開啓計劃任務的過濾
<exclude expression="*.php"></exclude>
<exclude expression="info/*"></exclude>
</crontabfilter>
</crontab>
<plugin start="false" name="command"/>
</sersync>
#
5. 運行
/usr/local/sersync/sersync2 -o /usr/local/sersync/confxml.xml
就是這麼簡單,如果開啓了debug模式,則會輸出很多信息。
6. 一些過濾規則
<exclude expression="(.*)/~\$.*"></exclude> #排除以~$開頭的文件,常見於office文件
<exclude expression="(.*)~"></exclude> #排除以~結尾的文件,一般rsync的舊文件備份
<exclude expression="(.*)\.tmp"></exclude> #排除.tmp文件
<exclude expression="(.*)\.TMP"></exclude> #大小寫
<exclude expression="(.*)\.mp4"></exclude> #排除mp4文件
<exclude expression="(.*)\.MP4"></exclude> #大小寫
<exclude expression=".*Thumbs\.db"></exclude> #排除Thumbs.db文件