Loading

Rsync+inotify实现文件实时同步

Rsync+inotify 实现文件实时同步

背景说明:

  1、需要将交换服务器的 /opt/ftp/com 目录的内容实时同步到内网web服务器的 /opt/www 目录;

  2、需要将内网web服务器的 /opt/www 目录的内容实时同步到 /opt/ftp/out 目录。

   192.168.232.128             192.168.232.129
     交换服务器                  内网Web服务器
        |                            |
    /opt/ftp/out    <--------     /opt/www
        |                            |                    
        |                            |
    /opt/ftp/com    -------->    /opt/www

具体步骤

环境准备:

实验环境准备:(centos6平台)

两台服务器均需配置

# service iptables stop        //关闭防火墙     
# sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/sysconfig/selinux        //关闭selinux,重启生效
# setenforce 0                //关闭selinux,临时生效
# yum -y install rsync xinetd        //安装rsync xinetd 软件

1) 交换服务器准备测试文件

[root@exchange ~]# mkdir -p /opt/ftp/{com,out}
[root@exchange ~]# touch /opt/ftp/com/com_test{1..10}
[root@exchange ~]# touch /opt/ftp/out/out_test{1..10}
[root@exchange ~]# ls /opt/ftp/com/
com_test1  com_test10  com_test2  com_test3  com_test4  com_test5  com_test6  com_test7  com_test8  com_test9
[root@exchange ~]# ls /opt/ftp/out/
out_test1  out_test10  out_test2  out_test3  out_test4  out_test5  out_test6  out_test7  out_test8  out_test9

2) web服务器准备测试文件

[root@web ~]# mkdir -p /opt/www
[root@web ~]# touch /opt/www/www_test{1..10}
[root@web ~]# ls /opt/www/
www_test1  www_test10  www_test2  www_test3  www_test4  www_test5  www_test6  www_test7  www_test8  www_test9

交换服务器配置

3) 配置xinetd配置文件,将disable = yes 改成 no

[root@exchange ~]# vi /etc/xinetd.d/rsync
# default: off
# description: The rsync server is a good addition to an ftp server, as it \
#       allows crc checksumming etc.
service rsync
{
        disable = no
        flags           = IPv6
        socket_type     = stream
        wait            = no
        user            = root
        server          = /usr/bin/rsync
        server_args     = --daemon
        log_on_failure  += USERID
}

4) 编辑rsync配置文件,该文件不存在,需要手动创建

[root@exchange ~]# vi /etc/rsyncd.conf
uid = root
gid = root

[com]
    path = /opt/ftp/com
    auth users = com_user
    secrets file = /etc/rsyncd.secrets
    read only = false

[out]
    path = /opt/ftp/out
    auth users = out_user
    secrets file = /etc/rsyncd.secrets
    read only = false

5) 编辑账号认证文件,并给予600权限

[root@exchange ~]# vi /etc/rsyncd.secrets
com_user:ComFtpUser@qaz
out_user:OutFtpUser@zaq
[root@exchange ~]# chmod 600 /etc/rsyncd.secrets

6) 启动xinetd服务

[root@exchange ~]# service xinetd start

7) web服务器测试

[root@web ~]# rsync -a 192.168.232.128::            //查看共享出来的标签
com                
out

web服务器配置

8) 配置web服务器上面的rsync服务(和上面交换服务器上一样配置方法)

[root@web ~]# vim /etc/rsyncd.conf
uid = root
gid = root
[www]
    path = /opt/www
    auth users = www_user
    secrets file = /etc/rsyncd.secrets
    read only = false
    
[root@web ~]# vim /etc/xinetd.d/rsync
disable = no

[root@web ~]# vim /etc/rsyncd.secrets
www_user:WebServerUser@qaz

[root@web ~]# chmod 600 /etc/rsyncd.secrets

[root@web ~]# service xinetd start

9)在交换服务器上测试

[root@exchange ~]# rsync -a 192.168.232.129::
www 

整体测试

# 整体测试
1)在web服务器上将 /opt/www目录下的文件同步到交换服务器的 /opt/ftp/out 目录

[root@web ~]# rsync -avt  /opt/www/  out_user@192.168.232.128::out

2)在交换服务器上将 /opt/ftp/com 目录下的文件同步到web服务器的/opt/www目录

[root@exchange ~]# rsync -avt /opt/ftp/com/ www_user@192.168.232.129::www

上面测试成功后接着配置 inotify 实时同步

1)安装inotify-tools,两台都需要安装

下载地址:http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz

# tar xf inotify-tools-3.14.tar.gz
# cd inotify-tools-3.14
# ./configure
# make
# make install
# cp /usr/local/bin/inotifywa* /usr/sbin/

2) 在web服务器上面创建密码文件,用于保存交换服务器上面的密码,(此处是需要同步web服务器的文件到交换服务器的/opt/ftp/out目录,所以对应是 out_user 用户的密码)

[root@web ~]# mkdir -p /home/work/ftppass
[root@web ~]# vim /home/work/ftppass/passwd
OutFtpUser@zaq
[root@web ~]# chmod 600 /home/work/ftppass/passwd
//    测试:rsync -avt --password-file=/home/work/ftppass/passwd /opt/www/ out_user@192.168.232.128::out

3) 在交换服务器上面创建密码文件,用于保存web服务器上面的密码,(此处是需要同步交换服务器的文件到web服务器的/opt/www目录,所以对应的是 www_user 用户的密码)

[root@exchange ~]# mkdir -p /home/work/ftppass
[root@exchange ~]# vim /home/work/ftppass/passwd
WebServerUser@qaz
[root@exchange ~]# chmod 600 /home/work/ftppass/passwd
//    测试:rsync -avt --password-file=/home/work/ftppass/passwd /opt/ftp/com/ www_user@192.168.232.129::www

4) 编辑web服务器上面同步脚本,并放置后台运行

[root@web ~]# vim www_to_out.sh
#!/bin/sh
#Desc: 用于从web服务器/opt/www目录中的文件同步到交换器服务器的/opt/ftp/out目录
#Date: 2019-04-16
#By: Lee-YJ

inotifywait -mrq -e modify,create,move,delete,attrib /opt/www |while read events
    do
        rsync -avt --password-file=/home/work/ftppass/passwd /opt/www/ out_user@192.168.232.128::out
        echo "[`date "+%Y-%m-%d %H:%M:%S"`] 出现事件 $events" >> /var/log/sync.log
    done
[root@web ~]# nohup bash www_to_out.sh &

5) 编辑交换服务器上面同步脚本,并放置后台运行

[root@exchange ~]# vim com_to_www.sh 
#!/bin/sh
#Desc: 用于从交换服务器/opt/ftp/com目录中的文件同步到web服务器的/opt/www目录
#Date: 2019-04-16
#By: Lee-YJ

inotifywait -mrq -e modify,create,move,delete,attrib /opt/ftp/com |while read events
    do
        rsync -avt --password-file=/home/work/ftppass/passwd /opt/ftp/com/ www_user@192.168.232.129::www
        echo "[`date "+%Y-%m-%d %H:%M:%S"`] 出现事件 $events" >> /var/log/sync.log
    done
[root@exchange ~]# nohup bash com_to_www.sh & 

6)测试(根据上面架构图的说明,也就是说现在我们在交换服务器上面的 /opt/ftp/com 目录中创建了文件,那么会自动同步到web服务器上面的 /opt/www 目录中,并且 web服务器又会自动同步到 交换服务器的 /opt/ftp/out 目录里面即为成功)

先查看当前两个服务器的文件

// 交换服务器
[root@exchange ~]# ls /opt/ftp/com/
com_test1   com_test2  com_test4  com_test6  com_test8
com_test10  com_test3  com_test5  com_test7  com_test9
[root@exchange ~]# 
[root@exchange ~]# ls /opt/ftp/out/
out_test1   out_test2  out_test4  out_test6  out_test8
out_test10  out_test3  out_test5  out_test7  out_test9

// web服务器
[root@web ~]# ls /opt/www/
www_test1   www_test2  www_test4  www_test6  www_test8
www_test10  www_test3  www_test5  www_test7  www_test9

在交换服务的 /opt/ftp/com 目录创建文件

[root@exchange ~]# touch /opt/ftp/com/inotify{1..10}

等待几秒再次查看 web 服务器的 /opt/www 目录  和 交换服务器的 /opt/ftp/out 目录

// web服务器
[root@web ~]# ls /opt/www/
com_test1   com_test4  com_test8  inotify2  inotify6  www_test1   www_test4  www_test8
com_test10  com_test5  com_test9  inotify3  inotify7  www_test10  www_test5  www_test9
com_test2   com_test6  inotify1   inotify4  inotify8  www_test2   www_test6
com_test3   com_test7  inotify10  inotify5  inotify9  www_test3   www_test7

// 交换服务器
[root@exchange ~]# ls /opt/ftp/out/
com_test1   com_test5  inotify1   inotify5  out_test1   out_test5  www_test1   www_test5
com_test10  com_test6  inotify10  inotify6  out_test10  out_test6  www_test10  www_test6
com_test2   com_test7  inotify2   inotify7  out_test2   out_test7  www_test2   www_test7
com_test3   com_test8  inotify3   inotify8  out_test3   out_test8  www_test3   www_test8
com_test4   com_test9  inotify4   inotify9  out_test4   out_test9  www_test4   www_test9

通过上面测试结果可以看出,已经实现了自动同步。

 

posted @ 2019-04-17 10:51  别来无恙-  阅读(4299)  评论(0编辑  收藏  举报