Rsync與Inotify-Tools實時文件同步解決方案

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架構實施:

一、拓撲圖:

clip_p_w_picpath001

二、服務配置詳解:

   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遠程同步備份工具,來實現了多臺服務器間數據實時同步的功能!

相關文章
相關標籤/搜索