linux sync server+inotify 1對多同步實例

linux sync server 1對多同步實例linux


需求:
vim

    線上也業務需求,意思就是N臺機器須要維護各自機器上的一個目錄,而且他們都是相同滴。so,這兩天想了下,決定使用rsync server+inotify來解決這個問題。固然有的人會用自動化工具來推,可是我這裏這個文件可能每次只改裏面1小點內容,推個一百來兆的東西(這句話有錯也莫噴了親 = =)。。反正出於種種緣由決定要使用 rsyncbash



做業環境:服務器

CentOS 6.3 
ide

rsync  version 3.0.6 (爲系統自帶版本 = = 固然編譯的下面會說)工具

inotify-tools 3.14測試

-------------------ui

首先說明:google

    其實rsync和inotify-tools使用yum或者系統自帶的均可以的。spa

    inotify須要注意內核是否支持:(ls /proc/sys/fs/inotify 下是否有max_queued_events  max_user_instances  max_user_watches三個文件)

    rsync的編譯安裝也不過多介紹了,tar xf *** && cd *** && ./configure && make && make install

-------------------

場景說明:

    我這裏是1臺server(rsync+inotify)來主動推送文件到N臺機器(rsync守護進程),而且我N臺機器配置文件配置都同樣(喊密碼認證文件)。

-------------------

server端配置:

mkdir /data/sync-server
cd /data/sync-server
yum -y install inotify-tools rsync
#而後編寫inotify-tools腳本
vim sync.sh
#!/bin/bash
#
source /etc/profile &>/dev/null
basedir=$(cd `dirname $0`;pwd)
log="$basedir/sync.log"
synclog="$basedir/result.log"
file="$basedir/iplist"

/usr/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format  '%T %w%f'  -e modify,delete,create,attrib,move /data/karaf-sync/ccms-build/ \
|while read file 
do
while read line
do
echo "$line sync start..."
    /usr/bin/rsync -vzrtopg --delete --progress /data/karaf-sync/ccms-build/ ccms@$line::ccms --password-file=/data/karaf-sync/scripts/pwd &>> $log
    if [ $? -eq 0 ];then
        echo "`date +%F-%H:%M` $line was rsynced Success !!!" &>> $synclog
        echo "-----------------------------------------------------------" &>> $synclog
        echo "" &>> $synclog
    else
        echo "`date +%F-%H:%M` $line was rsynced Failed !!!" &>> $synclog
        echo "-----------------------------------------------------------" &>> $synclog
        echo "" &>> $synclog
    fi  
done < $basedir/iplist             #我外面有相關的定時同步iplist的操做
done
inotifywait:
-r, --recursive遞歸查詢目錄。
-q, --quiet,打印出監控事件。
-e, --event,指定要監控的事件,常見的事件有move、modify、delete、create、attrib等。全量:(access、modify、 attrib、 close_write、 close_nowrite、close、open、 moved_to、 moved_from、move、 move_self、 create、delete、delete_self、unmount)
--timefmt:時間的輸出格式
--format:指定變化文件的詳細信息
------------------------------------------------------
inotify 能夠監視的文件系統事件包括:
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,建立新文件
IN_DELETE,文件被刪除,如 rm
IN_DELETE_SELF,自刪除,即一個可執行文件在執行時刪除本身
IN_MOVE_SELF,自移動,即一個可執行文件在執行時移動本身
IN_UNMOUNT,宿主文件系統被 umount
IN_CLOSE,文件被關閉,等同於(IN_CLOSE_WRITE | IN_CLOSE_NOWRITE)
IN_MOVE,文件被移動,等同於(IN_MOVED_FROM | IN_MOVED_TO)
注:上面所說的文件也包括目錄。

rsync的命令請另外搜索。。


client端配置:

vim /etc/rsyncd.conf
uid = root        #運行RSYNC守護進程的用戶
gid = root        #運行RSYNC守護進程的組

port = 873          #監聽端口
use chroot = no     #不使用chroot
max connections = 100   #最大鏈接數,0爲不限制

timeout = 600        #經過該選項能夠覆蓋客戶指定的IP超時時間.經過該選項能夠確保rsync服務器不會永遠等待一個崩潰的客戶端.超時單位爲秒鐘,0表示沒有超時定義,這也是默認值.對於匿名rsync服務器來講,一個理想的數字是600.
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsyncd.lock
log file = /var/log/rsyncd.log
#log format --- google

[ccms]
path = /data/ccms-build/       #須要同步的路徑
comment =  ccms dir           #名稱
ignore errors                #能夠忽略一些無關的IO錯誤
read only = no              
list = no                      #不容許列文件
hosts allow = 192.168.***.***/255.255.255.0       #容許的客戶端
auth users = ccms                   #認證用戶
secrets file = /etc/rsync.pwd       #密碼文件:600

vim /etc/rsync.pwd
ccms:********    #同server端相同

chmod 600 /etc/rsync.pwd

啓動進程

/usr/bin/rsync --daemon
echo "/usr/bin/rsync --daemon" >> /etc/init.d/rc.local



到這裏就差很少了,我這裏使用的是screen 啓動以前的server的腳本,而後就能夠兩邊寫文件進行測試了。

另一些命令的具體用法 ,能夠搜一下,做爲參考,這裏就再也不詳細說明了,抱歉!

相關文章
相關標籤/搜索