Rsync與Inotify-Tools 架構能夠解決企業多臺服務器間文件的同步問題,下面咱們瞭解一下Rsync和Inotify-Tools 。linux
1、簡單介紹Rsync和Inotify-Tools 工具web
一、 Rsync簡介:算法
Rsync (remote sync)是一款開源、快速,多功能、可實現增量的本地或遠程數據鏡像同步備份優秀工具。它可經過 LAN/WAN 快速同步多臺主機間的文件。Rsync 使用「Rsync演算法」使本地和遠程主機之間的文件達到同步,該算法只傳送兩個文件中的不一樣部分,而不是每次都整份傳送,所以速度至關快。支持平臺:類 Unix 系統shell
RSYNC的特性:vim
一、能夠鏡像保存整個目錄樹或文件系統;安全
二、較高的數據傳輸效率,基於rsync算法,差別傳送;bash
三、能夠藉助於ssh實現安全socket鏈接,數據傳輸;服務器
四、支持匿名傳輸;架構
RSYNC工做模式:ssh
第一種模式:shell模式,也稱做本地模式,和cp類似;
第二種模式:遠程shell模式,能夠利用ssh協議承載其遠程傳輸過程,和rcp類似;
第三種模式:列表模式,僅列出源中的內容,參數-nv,和ls -l類似
第四種模式:服務模式,此時rsync工做爲守護進程,能接收客戶端的數據同步請求,適合建立中心備份服務器或項目存儲庫;
二、Inotify-Tools簡介
inotify監控文件系統機制,經過inotify-tools來實現實時同步了
inotify-tools 是linux下inotify文件監控工具,微系統提供一套c開發接口庫函數,同時還提供了一系列的命令行工具。這些工具能夠用來監控文件系統的事件。
兩種工具:一、inotifywait,用來監控文件或目錄的變化,二、inotifywatch,用來統計文件系統訪問的次數。
下面咱們一塊兒來部署一下 rsync+inotify-tools 架構
二: rsync+inotify-tools架構實施:
一、拓撲圖:
二、服務配置詳解:
rsync服務器配置
主配置文件:
[root@rsync-server-1 ~]# vim /etc/rsyncd.conf
## Global Settings##uid = root # rsync對後面模塊中的path路徑擁有什麼權限
gid = root # rsync對後面模塊中的path路徑擁有什麼權限
use chroot = no # 安全操做
max connections = 2000 # 定義鏈接數2000
timeout = 600 # 600秒超時
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
ignore errors # 忽略錯誤
read only = false # false才能上傳文件,true不能上傳文件
list = false # 文件列表
hosts allow = 172.16.0.0/16
hosts deny = *
auth users = anna # 虛擬用戶,同步時須要用這個用戶
secrets file = /etc/rsync.password # 密碼文件
#####################################
[test] # 模塊名稱
comment = redhat.sx site files by sunsky 00:17 2013-06-28 # 註釋
path = /data/web/redhat.sx # 模塊的路徑
####################################
注:若是須要能夠多建立幾個模塊
生成密碼文件:
[root@rsync-server1 /]# echo 'anna:123456' > /etc/rsync.passwd
[root@rsync-server1 /]# chmod 600 /etc/rsync.passwd
[root@rsync-server-1 /]# cat /etc/rsync.passwd
anna:123456
[root@rsync-server-1 /]# ll /etc/rsync.passwd-rw-------. 1 root root 20 Jun 4 04:27 /etc/rsync.passwd
查看rsync服務狀態
[root@rsync-server-1 /]# lsof -i tcp:873
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
rsync 10309 root 4u IPv4 94045 0t0 TCP *:rsync (LISTEN)
rsync 10309 root 5u IPv6 94046 0t0 TCP *:rsync (LISTEN)
爲rsync添加開機自啓動
#cat /etc/xinetd.d/rsync
disable = no (只須要改這一項就能夠了)
#chkconfig rsync on
rsync客戶端與inotify-tool配置:
一、安裝rsync和客戶端密碼文件配置
#yum -y install xinetd
#vim /etc/rsync.passwd
123456
二、下載inotify-tools-3.14.tar.gz包,解壓安裝
#tar xf inotify-tools-3.14.tar.gz
#cd inotify-tools-3.14
# ./configure --help
# ./configure --prefix=/usr/local/inotify
# make && make install
三、動態監控文件腳本:
vim autorsync.sh
#!/bin/bash
#
src1='/data/'
des1=test
host1=172.16.22.6
user=anna
allrsync='/usr/bin/rsync -rpgovz --delete --progress'
/usr/local/inotify/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w %w%f %e' -e modify,delete,create,attrib $src1 | while read DATE TIME DIR FILE EVENT;
do
case $DIR in
${src1}*)
#rsync -a /etc/passwd anna@172.16.22.6::test --password-file=/etc/rsync.passwd
$allrsync -a $src1 $user@$host1::$des1 --password-file=/etc/rsync.passwd && echo "$DATE $TIME $FILE was rsynced" &>> /var/log/rsync-$des1-$host1.log
#$allrsync -a $src1 $user@$host2::$des1 --password-file=/etc/rsync.passwd && echo "$DATE $TIME $FILE was rsynced" &>> /var/log/rsync-$des1-$host2.log
;;
esac
done
三、測試:
# bash /usr/sbin/auto_rsync.sh &>> /var/log/auto_rsync.log &
# for i in {1..10};do dd if=/dev/zero of=/data/$i.txt bs=10M count=1 ;dd if=/dev/zero of=/data/$i.txt bs=10M count=1;done
# ll --full-time /data/
rsync服務器端查看:
# ll --full-time /data/
3、總結
咱們用linux文件系統事件監控機制(即inotify),經過Inotify-tools工具,結合 rsync遠程同步備份工具,來實現了多臺服務器間數據實時同步的功能!