inotify-tools+rsync實(shí)時(shí)同步文件的配置方法
服務(wù)器A:
論壇的主服務(wù)器,運(yùn)行DZ X2論壇程序;服務(wù)器B:論壇從服務(wù)器,需要把X2的圖片附件和MySQL數(shù)據(jù)實(shí)時(shí)從A主服務(wù)器實(shí)時(shí)同步到B服務(wù)器.MySQL同步設(shè)置會(huì)在下一編中說(shuō)到.以下是用于實(shí)時(shí)同步兩臺(tái)服務(wù)器的圖片。
因?yàn)橐话愕腞SYNC需要CRON來(lái)定期運(yùn)行SH腳本來(lái)實(shí)現(xiàn)同步,這樣會(huì)帶來(lái)一些問(wèn)題.比如用戶(hù)從主服務(wù)器上傳上一個(gè)圖片,需要最少一分鐘才能從從服務(wù)器顯示出來(lái).自從Linux 2.6內(nèi)核后,支持了inotify機(jī)制,當(dāng)某些文件或文件夾有改變時(shí),發(fā)出相應(yīng)的事件,這樣,第三方程序只要訂閱這些事件,就可以處理相應(yīng)的操作了.這時(shí),只要有文件被修改,就執(zhí)行一次RSNYN,把修改的文件主動(dòng)地上傳到另一臺(tái)服務(wù)器上就可以了。
我使用的是google的inotify-tools,比較簡(jiǎn)單.國(guó)內(nèi)有功能很強(qiáng)大的類(lèi)似的程序,但是好復(fù)雜.另外需要注意的是:如果使用inotify-tools來(lái)實(shí)現(xiàn)實(shí)時(shí)同步,我們的主服務(wù)器--源文件服務(wù)器(也就是服務(wù)器A)實(shí)現(xiàn)是RSYNC的從服務(wù)器,我們的從服務(wù)器--目標(biāo)同步的服務(wù)器(服務(wù)器B)才是RSYNC的主服務(wù)器.不要搞混了哦.
首先從主服務(wù)器A開(kāi)始,需要確定你的系統(tǒng)是否支持inotify:
ll /proc/sys/fs/inotify
total 0
-rw-r--r-- 1 root root 0 Jan 4 17:56 max_queued_events
-rw-r--r-- 1 root root 0 Jan 4 17:56 max_user_instances
-rw-r--r-- 1 root root 0 Jan 4 17:56 max_user_watches
能輸出這樣的結(jié)果表示支持。
下載并安裝inotify-tools:
wget --no-check-certificate http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz
tar xzvf inotify-tools-3.14.tar.gz
cd inotify-tools-3.14
./configure --prefix=/usr
make
make install
完成inotify-tools的安裝。
接下來(lái)需要寫(xiě)兩個(gè)SH腳本,inotify_init.sh和inotify_monitor.sh:
inotify_init.sh 用于第一次初始化,也就是運(yùn)行一次完整的RSYNC同步.
vi /root/inotify_init.sh
#!/bin/sh
SRC=/主服務(wù)器A需要同步的目錄/ #記得在最后面加/不然RYNC會(huì)自動(dòng)增加一層目錄
DES=bbsatt
IP=從服務(wù)器B的IP
USER=rsync
#DST=/etc/rsyncd 遠(yuǎn)程rsync模塊下的目錄
INWT=/usr/bin/inotifywait
RSYNC=/usr/bin/rsync
$RSYNC -zahqt --password-file=/root/rsync.pwd $SRC $USER@$IP::$DES
保存退出.
設(shè)置可執(zhí)行權(quán)限:
chmod +x /root/inotify_init.sh
接下是inotify_monitor.sh,用于訂閱文件修改事件.注意,因?yàn)樘貏e原因,我在這里做的是增量備份+實(shí)時(shí)同步,也就是說(shuō),當(dāng)主服務(wù)器A上的圖片被刪除是,從服務(wù)器B是不會(huì)刪除圖片的.
vi /root/inotify_monitor.sh
#!/bin/bash
##---------------------
sync[0]='/主服務(wù)器需要同步的目錄/,從服務(wù)器B的IP,bbsatt,rsync' # localdir,host,rsync_module,auth_user
INWT=/usr/bin/inotifywait
RSYNC=/usr/bin/rsync
PASS=/root/rsync.pwd
##---------------------
for item in ${sync[@]}; do
dir=`echo $item | awk -F"," '{print $1}'`
host=`echo $item | awk -F"," '{print $2}'`
module=`echo $item | awk -F"," '{print $3}'`
user=`echo $item | awk -F"," '{print $4}'`
$INWT -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f %e' \
--event CLOSE_WRITE,create,move $dir | while read date time file event
do
#echo $event'-'$file
case $event in
MODIFY|CREATE|MOVE|MODIFY,ISDIR|CREATE,ISDIR|MODIFY,ISDIR)
if [ "${file: -4}" != '4913' ] && [ "${file: -1}" != '~' ]; then
cmd="$RSYNC -zahqzt --exclude='*' --password-file=$PASS \
--include=$file $dir $user@$host::$module > /dev/null 2>1&"
echo $cmd
$cmd
fi
MOVED_FROM|MOVED_FROM,ISDIR|DELETE,ISDIR)
if [ "${file: -4}" != '4913' ] && [ "${file: -1}" != '~' ]; then
cmd="$RSYNC -zahqzt --password-file=$PASS --exclude=$file \
$dir $user@$host::$module > /dev/null 2>1&"
echo $cmd
$cmd
fi
esac
done &
done
chmod +x /root/inotify_monitor.sh
設(shè)置RSYNC自動(dòng)登錄驗(yàn)證密碼
vi /root/rsync.pwd
xxxxxx
保存,退出
設(shè)置只有ROOT才可以查看的權(quán)限.
chmod 0600 /root/rsync.pwd
以下是備從務(wù)器B的配置:
安裝RSYNC
yum rsync -y
#----配置RSNYD服務(wù)
vi /etc/rsyncd.conf
內(nèi)容如下,需要把Apache修改成你運(yùn)行網(wǎng)站的用戶(hù)名,我的是因?yàn)樵瓉?lái)使用apache,雖然現(xiàn)在用Nginx,也一直沒(méi)改用戶(hù)名:
uid = apache
gid = apache
use chroot = no
max connections = 4
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
[bbsatt]
path = /從服務(wù)器B本地用于存放備份的目錄
ignore errors
read only = no
list = false
hosts allow = 主服務(wù)器A的IP
auth users = rsync
secrets file = /etc/rsync.pas
vi /etc/rsync.pas
rsync:xxxxxx
chmod 0600 /etc/rsync.pas
啟動(dòng)RSYNCD
rsync --daemon
添加開(kāi)機(jī)自動(dòng)啟動(dòng)服務(wù):
vi /etc/rc.local
rsync --daemon
回到主服務(wù)器A,
vi /etc/rc.local
添加以下內(nèi)容,實(shí)時(shí)開(kāi)機(jī)自動(dòng)同步:
/root/inotify_init.sh
/root/inotify_monitor.sh
保存退出
運(yùn)行:
/root/inotify_init.sh
/root/inotify_monitor.sh
這樣就能實(shí)現(xiàn)實(shí)時(shí)同步圖片文件了,在主服務(wù)器A的同步目錄下新建一個(gè)文件測(cè)試下吧。
- 使用cwRsync實(shí)現(xiàn)windows下服務(wù)器文件定時(shí)同步備份(附錯(cuò)誤處理方法)
- Linux 用cp和rsync同步文件時(shí)跳過(guò)指定目錄的方法
- rsync 同步錯(cuò)誤 cwrsync rsync error rsync error: some files/attrs were not transferred 解決方法
- RSync實(shí)現(xiàn)文件同步備份配置詳解
- rsync相對(duì)于其他同步工具的優(yōu)缺點(diǎn)介紹
- 在Windows中配置Rsync同步文件的方法
- windows下文件同步工具 CwRsync 4.0.2 安裝配置方法(圖文)
- rsync 只同步目錄結(jié)構(gòu)不同步文件的方法
- 無(wú)需密碼通過(guò)ssh執(zhí)行rsync來(lái)同步文件的方法
- Rsync實(shí)現(xiàn)文件定時(shí)同步技巧
相關(guān)文章
Linux執(zhí)行可執(zhí)行文件提示No such file or directory的解決方法
這篇文章主要介紹了Linux執(zhí)行可執(zhí)行文件提示No such file or directory的解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-05-05xmapp環(huán)境搭建注意事項(xiàng)說(shuō)明
如果要用其他IP訪(fǎng)問(wèn),需要到apache/conf/ext/httpd-xmapp.cf配置文檔下修改最后的一段信息,注釋掉一行拒絕IP的。還有修改一個(gè)允許訪(fǎng)問(wèn)IP的為(*)2013-11-11在 Linux 命令行發(fā)送郵件的 5 種方法(推薦)
這篇文章主要介紹了在 Linux 命令行發(fā)送郵件的 5 種方法,本教程中包含了最流行的 5 個(gè)命令行郵件客戶(hù)端,你可以選擇其中一個(gè),需要的朋友可以參考下2019-12-12Ubuntu20的tzselect設(shè)置時(shí)間失效的問(wèn)題,樹(shù)莓派服務(wù)器(推薦)
這篇文章主要介紹了Ubuntu20的tzselect設(shè)置時(shí)間失效的問(wèn)題,樹(shù)莓派服務(wù)器,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-05-05