CentOS6.5實現rsync+inotify實時同步

參考博文:html

參考1:CentOS6.5實現rsync+inotify實時同步  linux

參考2:inotify-tools+rsync實時同步文件安裝和配置  git

CentOS 6.3下rsync服務器的安裝與配置  對 rsync命令解釋的很詳細github

rsync 常見錯誤與解決方法整理shell

參考1比較詳細,可是有點問題,參考2主服務器端比較詳細  可是有小問題  把兩者結合培正成功apache

 

注意:從主服務器拷貝到從服務器,千萬別搞混了。vim

一、首先從主服務器A開始

須要肯定你的系統是否支持inotify:centos

在安裝inotify-tools前請先確認你的linux內核是否達到了2.6.13,而且在編譯時開啓了CONFIG_INOTIFY選項,也能夠經過如下命令檢測,若是出現如下輸出,說明支持:bash

[root@localhost ~]# ls /proc/sys/fs/inotify/
max_queued_events  max_user_instances  max_user_watches

下載並安裝inotify-tools:服務器

wget http://cloud.github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz 
tar xvf inotify-tools-3.14.tar.gz  
cd inotify-tools-3.14  
./configure  
make;make install

接下來須要寫兩個SH腳本,inotify_init.sh和inotify_monitor.sh:

inotify_init.sh 用於第一次初始化,也就是運行一次完整的RSYNC同步.

vim /root/inotify_init.sh
內容以下:
#!/bin/sh
SRC=/主服務器A須要同步的目錄/ #記得在最後面加/否則RYNC會自動增長一層目錄
  
DES=backup
IP=從服務器B的IP
USER=rsync
#DST=/etc/rsyncd 遠程rsync模塊下的目錄
INWT=/usr/bin/inotifywait    #注意路徑 個人路徑爲:/usr/local/bin/inotifywait
RSYNC=/usr/bin/rsync $RSYNC -zahqt --password-file=/root/rsync.pwd $SRC $USER@$IP::$DES

保存退出.

設置可執行權限:

chmod +x /root/inotify_init.sh

接下是inotify_monitor.sh,用於訂閱文件修改事件.注意,由於特別緣由,我在這裏作的是增量備份+實時同步,也就是說,當主服務器A上的圖片被刪除是,從服務器B是不會刪除圖片的.

vi /root/inotify_monitor.sh

內容以下:

#!/bin/bash
  
###########################
sync[0]='/主服務器須要同步的目錄/,從服務器B的IP,backup,rsync' # localdir,host,rsync_module,auth_user
  
INWT=/usr/bin/inotifywait  #注意路徑 個人路徑爲:/usr/local/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 "
echo $cmd >> /var/log/rsyncd.log   #寫入日誌文件
$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 "
echo $cmd >> /var/log/rsyncd.log
$cmd
fi
;;
esac
done &
done

加 執行權限:
chmod +x /root/inotify_monitor.sh

設置RSYNC自動登陸驗證密碼,認證文件只用加入密碼便可

vi  /root/rsync . pwd
xxxxxx

保存,退出

設置只有ROOT才能夠查看的權限.

chmod  600  /root/rsync . pwd
 

二、如下是備從務器B的配置:

yum install rsync -y    #安裝rsync服務

配置RSNYD服務:

vi /etc/rsyncd.conf

內容以下,須要把 Apache修改爲你運行網站的用戶名,個人是由於原來使用apache,雖然如今用Nginx,也一直沒改用戶名:
uid = root
gid = root
use chroot = no
max connections = 0   #沒有鏈接限制
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
  
[backup]
path = /從服務器B本地用於存放備份的目錄
ignore errors
read only = no
list = false
hosts allow = 主服務器A的IP
auth users = rsync
secrets file = /etc/rsync.pwd

設置密碼文件:

vim  /etc/rsync . pwd     #添加如下內容
rsync :123456
chmod  600  /etc/rsync . pwd     #修改密碼文件權限爲600

注:當配置文件中參數strict modes爲true時,rsync認證口令文件的權限必定是600,不然客戶端將不能鏈接服務器。rsync認證口令文件中每一行指定一個 用戶名:口令 對,格式爲:username:passwd。

啓動RSYNCD

rsync --daemon

添加開機自動啓動服務:

添加開機自動啓動服務:

  vi  /etc/rc . local

添加如下內容:

rsync --daemon

三、主服務器開機啓動

vi  /etc/rc . local
添加如下內容,實時開機自動同步:
/root/inotify_init.sh
/root/inotify_monitor.sh

保存退出

運行

/root/inotify_init.sh
/root/inotify_monitor.sh
相關文章
相關標籤/搜索