// Rsync + inotiry 實現即時同步數據 20140913 [環境需求] 1.linux 內核版本 > 2.6.13 2.預先安裝rsync , inotify是在rsync基礎上運行 3.能夠查看 ls /proc/sys/fs/inotify/ -rw-r--r-- 1 root root 0 Sep 14 00:00 max_queued_events // 時間隊列 後期生產環境須要改大點 -rw-r--r-- 1 root root 0 Sep 14 00:00 max_user_instances // 用戶實例數 後期生產環境須要改大點 -rw-r--r-- 1 root root 0 Sep 14 00:00 max_user_watches // 用戶監聽數 後期生產環境須要改大點 [安裝inotify] 1.下載inotify.tgz軟件包,解壓 、編譯、安裝 // 軟件包自行baidu . goole.com 搜索inotify-tools down 2. 安裝後在/usr/local/inotify-3.14/bin/[inotifywait/inotifywatch] inotifywait [-hcmrq] [-e <event> ] [-t <seconds> ] [--format <fmt> ] [--timefmt <fmt> ] <file> [ ... ] -h // help -c // csv -r // recursion 遞歸監聽 -q // quit 安靜模式 -e // 監聽時間 -t // 超時時間 -format // terminal display format 終端顯示樣式 3. 腳本實例(啓動腳本,先肯定rsync配置及啓動[ps:]詳解) [shell version 2] #!/bin/bash USER=luowen HOST=192.168.213.133 PASSWD_FILE=/etc/rsyncd.secrets SRC_DIR=/www BACK_DIR=backup # inotify soft INOTIFY_BIN='/usr/local/inotify/bin' if [ ! -e "$PASSWD_FILE" ] && [ ! -e "$SRC_DIR" ] && [ ! -e "$INOTIFY_BIN" ]; then echo 'CHECK CONFIGURE' exit 9; fi "$INOTIFY_BIN"/inotifywait -mrq --format='%f%w' --timefmt='%F %T' -e close_write,delete,attrib,create "$SRC_DIR" | while read file do # rsync #echo $file #`$RSYNC -avzP --delete --timeout=100 $USER@$HOST::$BACK_DIR --password-file=${PASSWD_FILE}` > /dev/null 2>&1 cd $SRC_DIR && rsync -avrzP --delete --timeout=100 $SRC_DIR $USER@$HOST::$BACK_DIR --password-file=${PASSWD_FILE} > /dev/null 2>&1 done exit 0; #============================version 2====================== #!/bin/sh HOST=192.168.1.100 # 備份及的ip地址 SRC=/backup # 備份機的備份目錄 DST=www # 模塊 與/etc/rsync.conf 的模塊相對應 USER=rsync-backup RSYNC_PASSFILE=/etc/rsync.password INOTIFY_HOME=/usr/local/initify/ #judge if [ ! -e "$SRC" ] \ [ ! -e "${RSYNC_PASSFILE}" ] \ [ ! -e "${INOTIFY_HOME}/bin/inotifywait" ] \ [ ! -e "/usr/bin/rsync" ]; then echo "Check File And Folder" exit 9 fi ${INOTIFY_HOME}/bin/inotifywait -mrq --timefmt '%F %T' --format '%T%w%f' -e close_write,delete,create,attrib $SRC | while read file \ do rsync -avzP --delete --timeout=100 --password-file=${RSYNC_PASSFILE} $SRC $USER@$HOST::$DST > /dev/null 2>&1 cd $SRC && rsync -aruz -R --delete ./ --timeout=100 --password-file=/etc/rsync $USER@$HOST::$DST > /dev/null 2>&1 done exit 0 [ps:] rsync 命令模式: 1. rsync -avz -P --delete rsync://user@ip:/backup-directory/ /tmp --password-file=/etc/rsync/password 2. rsync -avz -P --delete user@ip:/directory /tmp --password-file=/etc/rsync/passwd [rsync 服務器配置] 1. A服務器(B服務器上/www目錄下的文件,備份到A服務器) ip : 192.168.213.133 安裝rsync 1. [backup] comment = public archive path = /backup use chroot = no max connections=10 lock file = /var/lock/rsyncd read only = false list = yes uid = rsync # 對應的/backup目錄rsync用戶具備讀寫權限 gid = rsync # 對應的/backup目錄rsync用戶具備讀寫權限 auth users = luowen # 備份用戶名,能夠隨便填寫不須要是系統上的用戶 用戶 sync命令中的 luowen@xx.x.xx.xx 用戶名 secrets file = /etc/rsyncd.secrets # 存放用戶認證用戶名 格式爲 上行的 luowen:password // password 在B服務器上認證用 hosts allow = 192.168.213.132 # 容許的機器ip地址 用於安全 2. 建立 /etc/rsyncd.secrets 文件 (umask 177; echo 'luowen:password' > /etc/rsyncd.secrets) 文件權限必須是600,否則A服務器驗證不經過 3. 啓動rsync服務,以daemon運行 (A服務端必須啓動rsync服務B服務端不須要啓動rsync服務) 4. chown -R rysnc:rsync /backup 2. B服務器 (將/www的數據備份到A服務器/backup目錄下) 1. ip 192.168.213.132 安裝rsync 2. 建立密碼文件 (umask 177; echo 'password' > /etc/rsyncd.secrets) # 一樣此文件必須是600 不然驗證不經過 password爲A服務端設置的密碼 3. 測試下 rsync -avzP --delete /www luowen@192.168.213.133::backup