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干掉了

 

 

 

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