一.項目需求:
服務(wù)器A的數(shù)據(jù)目錄內(nèi)容變化后,改變要實時更新到多臺服務(wù)器B C 的相關(guān)目錄。
二.解決方法:
1、多臺服務(wù)器做為rsync服務(wù)器端,服務(wù)器A做為rsync客戶端,使用rsync命令同步數(shù)據(jù)內(nèi)容。
2、inotify做為觸發(fā)器,當(dāng)服務(wù)器A數(shù)據(jù)目錄內(nèi)容變化時,執(zhí)行rsync命令同步數(shù)據(jù)。
A 192.168.13.151
B 192.168.13.252
C 192.168.13.253
三.安裝配置
服務(wù)器端BC (192.168.13.252 192.168.13.253)
# wget http://www.samba.org/ftp/rsync/src/rsync-3.0.7.tar.gz
# tar zxvf rsync-3.0.7.tar.gz
# cd rsync-3.0.7
# ./configure –prefix=/usr/local/rsync
# make
# maek install
# vi /etc/rsyncd.conf
uid = rootgid = rootuse chroot = nomax connections = 10pid file = /var/run/rsyncd.pidlock file = /var/run/rsync.locklog file = /var/log/rsync.log[images]path = /opt/imagesread only = noauth users = valeRsyncsecrets file = /etc/rsyncd.secrets
建立用戶認(rèn)證文件
# echo -ne “valeRsync:Vale.com-init” > /etc/rsyncd.secrets
# chmod 600 /etc/rsyncd.secrets
開機自動執(zhí)行
# echo -ne “rsync –daemon –config=/etc/rsyncd.conf” >> /etc/rc.local
啟動服務(wù)
# /usr/local/rsync/bin/rsync –daemon –config=/etc/rsyncd.conf
客戶端A (192.168.13.251)
# wget http://www.samba.org/ftp/rsync/src/rsync-3.0.7.tar.gz
# tar zxvf rsync-3.0.7.tar.gz
# cd rsync-3.0.7
# ./configure –prefix=/usr/local/rsync
# make
# maek install
# wget http://ncu.dl.sourceforge.net/project/inotify-tools/inotify-tools/3.13/inotify-tools-3.13.tar.gz
# tar zxvf inotify-tools-3.13.tar.gz
# cd inotify-tools-3.13
# ./configure –prefix=/usr/local/inotify
# make
# make install
建立用戶密碼文件
# echo -ne “Vale.com-init” > /etc/rsyncd.secrets
# chmod 600 /etc/rsyncd.secrets
開機自動執(zhí)行
# echo -ne ‘/root/InotifyRsync.sh &’ >> /etc/rc.local
我的腳本
# vi /root/InotifyRsync.sh
#!/bin/bashhost_1=192.168.13.252host_2=192.168.13.253 src=/opt/image/dst=imagesuser=valeRsync /usr/local/inotify/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' -e modify,delete,create,attrib $src | while read file do rsync -avzP --delete --password-file=/etc/rsyncd.secrets $src $user@$host_1::$dst > /dev/null rsync -avzP --delete --password-file=/etc/rsyncd.secrets $src $user@$host_2::$dst > /dev/null #echo "${file} was rsynced" doneexit 0
四.inotify支持的觸發(fā)事件
IN_ACCESS,即文件被訪問
IN_MODIFY,文件被 write
IN_ATTRIB,文件屬性被修改,如 chmod、chown、touch 等
IN_CLOSE_WRITE,可寫文件被 close
IN_CLOSE_NOWRITE,不可寫文件被 close
IN_OPEN,文件被 open
IN_MOVED_FROM,文件被移走,如 mv
IN_MOVED_TO,文件被移來,如 mv、cp
IN_CREATE,創(chuàng)建新文件
IN_DELETE,文件被刪除,如 rm
IN_DELETE_SELF,自刪除,即一個可執(zhí)行文件在執(zhí)行時刪除自己
IN_MOVE_SELF,自移動,即一個可執(zhí)行文件在執(zhí)行時移動自己
IN_UNMOUNT,宿主文件系統(tǒng)被 umount
IN_CLOSE,文件被關(guān)閉,等同于(IN_CLOSE_WRITE | IN_CLOSE_NOWRITE)
IN_MOVE,文件被移動,等同于(IN_MOVED_FROM | IN_MOVED_TO)
備注:
#!/bin/sh#set -x#var src="/usr/local/nginx/html/lib /usr/local/nginx/html/www /usr/local/nginx/html/var/www.work.com.conf.php"des_ip="172.18.1.35 172.18.1.36 172.18.1.37 172.18.1.38"#functioninotify_fun (){/usr/local/bin/inotifywait -mrq --timefmt '%d/%m/%y-%H:%M' --format '%T %w%f' -e modify,delete,create,move $1| while read time filedofor ip in $des_ipdoecho "`date +%Y%m%d-%T`: rsync -avzq --delete --progress $1 $ip:`dirname $1`"rsync -avzq --delete --progress $1 $ip:`dirname $1`echodonedone} #mainfor a in $srcdoinotify_fun $a &done