rsync+inotify文件實時同步實戰

說明:本文部分內容收集於互聯網 不完全原創 但都經過本人親身試驗


方案:

1、雙向:兩臺服務器都要開rsync同步和inotify監聽 ---> 多對多

2、單向:一臺服務器開inotify 其他服務器開啓rsync  --> 一對多

3、單向2:一臺服務器開rsync 其他服務器開啓inotify  --> 多對一

 

要實現文件的實時雙向同步可以採用rsync+inotify組合,rsync可以實現文件同步,但是它沒有辦法實時觸發,

所以就需要搭配inotifiy實時觸發。

第一步:在兩臺服務器上面都安裝rsync和inotify

Fedora、Redhat 、centos等在線安裝方法;

# yum install rsync    

一部搞定rsync的安裝

開啓服務

rsync --daemon --config=/etc/rsyncd.conf

inotify的安裝方法如下:

1.下載inotify的源碼,例如下載的文件名爲inotify.tar.gz

wget http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz --no-check-certificate

2.解壓inotify

#tar -zxvf inotify.tar.gz

進入到解壓的文件夾裏面

#cd inotify

編譯並安裝

./configure --prefix=/usr/local/inotify

make && make install

inotify的安裝目錄是/usr/local/inotify

第二步配置每個服務器的rsync和inotify

在/etc目錄下面新建文件rsyncd.conf,內容如下

uid=nobody

gid=nobody

use chroot = no

read only = false

strict modes = false

hosts allow = *

log file = /var/log/rsyncd.log

pid file = /var/run/rsyncd.pid

lock file= /var/run/rsyncd.lock

max connections = 4



[www]

path = /rsync

read only = false                 

ignore errors

auth users=root

hosts allow=*

secrets file=/etc/rsync.pas

transfer logging = yes

 

配置說明:

配置文件裏面不能包含#註釋

address表示本機ip

hosts allow 表示允許訪問的ip,我這裏配置的是服務器B

rsync.pas 表示驗證文件

[www]裏面的www是模塊名稱,可以自己定義

path是要同步的路徑

創建驗證文件

在/etc下面創建 名稱爲rsyncd.secrets的驗證文件

格式爲 用戶名:密碼,例如 zm:123

此用戶名和密碼和系統沒有關係,是給rsync設置的用戶名和密碼

設置完了之後需要給rsync.pas設置權限,如下

#chmod 600 /etc/rsync.pas

接下來就是配置inotify,實時出發文件同步,在inotify的安裝目錄下面新建腳本文件zm.sh,內容如下

#!/bin/bash

cd /rsync

/usr/local/inotify/bin/inotifywait -mrq --format  '%Xe %w%f' -e modify,create,delete,attrib,close_write,move /rsync | while read file

echo "Now Inotify Startting Success!"

do

        INO_EVENT=$(echo $file | awk '{print $1}')

        echo "-------------------------------$(date)------------------------------------"

        echo $file

        if [[ $INO_EVENT =~ 'CREATE' ]] || [[ $INO_EVENT =~ 'MODIFY' ]] || [[ $INO_EVENT =~ 'CLOSE_WRITE' ]] || [[ $INO_EVENT =~ 'MOVED_TO' ]]

        then

                echo 'CREATE or MODIFY or CLOSE_WRITE or MOVED_TO'

                /usr/bin/rsync -avz --progress --password-file=/etc/rsync.pas /rsync/ [email protected]::www

        fi

        if [[ $INO_EVENT =~ 'DELETE' ]] || [[ $INO_EVENT =~ 'MOVED_FROM' ]]

        then

                echo 'DELETE or MOVED_FROM'

                /usr/bin/rsync -avz --delete --password-file=/etc/rsync.pas /rsync/ [email protected]::www

        fi

        if [[ $INO_EVENT =~ 'ATTRIB' ]]

        then

                echo 'ATTRIB'

                if [ ! -d "$INO_FILE" ]

                then

                   /usr/bin/rsync -avz --password-file=/etc/rsync.pas /rsync/ [email protected]::www

                fi

        fi

done

配置說明

/etc/rsync.pas 是B服務器裏面rsync配置的密碼

[email protected]::www 裏面的root是rsync配置的用戶名,後面的ip是B服務器的ip,www是配置要同步的模塊名稱

配置文件創建完成之後還需要授權

#chmod +x zm.sh

兩天服務器的配置方法相同,只需要修改對應的參數即可

最後啓動rsync和inotify

rsync --daemon --config=/etc/rsyncd.conf

然後進入到zm.sh所在的目錄啓動inotify

./zm.sh

這樣啓動的inotify, 無法在關閉shell命令行之後在後臺運行。如果需要在後臺運行

可以使用#nohup ./zm.sh &

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

我這裏是單向

上海五個所同步到局裏思路:

五個所開啓inotify監聽 安裝rsync客戶端用於發送請求

局機關開啓rsync服務  用於接收請求

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

 

以下內容涉及國家機關機密 已被省略...

 

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

手動同步命令

/usr/bin/rsync -avz --progress --password-file=/etc/rsync.pas 本地同步目錄/ root@目標IP::datamm

 

局開啓rsync服務

service rsyc start

所開啓inotify監聽

service rsync start

局查看rsync進程

 ps -ef|grep rsync

所查看inotify進程

ps-ef|grep zm
ps -ef|grep inotify

Zm.sh文件中定義了-e modify,create,attrib,close_write,delete,move  表示監聽文件或文件夾被進行的操作  一旦監聽到這些操作  就會與子服務器進行同步   將當前文件夾同步到目標服務器 

注意:刪除和移動文件如果目標服務器上有的文件  本地沒有  那這些文件將在目標服務器上被幹掉。所以我在zm.sh裏面已經把,delete,move幹掉了

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章