美文网首页
实时同步rsync+inotify

实时同步rsync+inotify

作者: 死海以东 | 来源:发表于2019-11-01 21:05 被阅读0次

    1、环境准备

    操作系统:CentOS 7
    源服务器地址:192.168.47.129
    目标服务器地址:192.168.47.131
    目的:将源服务器上的/test目录实时同步到目标服务器上的/test目录下
    PS:需要配置好端口和安全规则,源服务器去同步目标服务器上的内容。

    配置源服务器:192.168.47.129

    1、安装和启动rsync,创建用于测试目录/test

    [root@rsync-server ~]# yum -y install rsync
    [root@rsync-server ~]# systemctl start rsyncd
    [root@rsync-server ~]# mkdir /test
    

    2、创建rsync.conf配置文件,添加以下代码

    [root@rsync-server ~]# vim  /etc/rsyncd.conf 
    log file = /var/log/rsyncd.log            #遇到错误可以查看⽇志,很详细
    pidfile = /var/run/rsyncd.pid 
    lock file = /var/run/rsync.lock  
    secrets file = /etc/rsync.pass             #⽤户认证配置⽂件,⾥⾯保存⽤ 户名称和密码,后⾯会创建这个⽂件 
    motd file = /etc/rsyncd.Motd               #rsync启动时欢迎信息页面文件位置
    [test]                                     #同步模块名称,自定义(不要太短了)
    path = /test                               #rsync服务端数据目录路径 
    comment = test                             #模块名称,和[test]⼀样 
    uid = root                                 # 需要两服务器目录和文件的属主属组 
    gid = root                                 # 需要两服务器目录和文件的属主属组
     port=873                                  #rsync 默认端⼝ 
    use chroot = no 
    read only = no  
    list = no                                  #不显示rsync服务端资源列表 
    max connections = 200 
    timeout = 600
    auth users = user1                         #执行数据同步的⽤户名,可以设置多个,⽤英⽂状态下逗号隔开
    #hosts allow = 192.168.47.130             #允许进⾏数据同步的客户端IP地 址,可以设置多个,⽤英⽂状态下逗号隔开 
    #hosts deny = 192.168.47.132              #不允许同步的ip地址,⽤逗号隔 开
    

    3、创建用户认证文件

    [root@rsync-server ~]# vim /etc/rsync.pass
    user1:123456                             #格式,⽤户名:密码,可以设置多个,每⾏⼀个 ⽤户名:密码 
    

    4、设置⽂件权限 , 重启rsync

    [root@rsync-server ~]# chmod 600 /etc/rsyncd.conf     #设置⽂件所有者读取、写⼊权限 
    [root@rsync-server ~]# chmod 600 /etc/rsync.pass      #设置⽂件所有者读取、写⼊权限
    [root@rsync-server ~]# systemctl restart rsyncd
    
    配置目标服务器:192.168.47.131

    1、安装rsync

    [root@rsync-agent ~]# yum -y install rsync xinetd
    [root@rsync-agent ~]# systemctl start rsyncd xinetd
    

    2、配置密码文件

    [root@rsync-agent ~]# vim /etc/passwd.txt 
    123456   #密码 
    [root@rsync-agent ~]# chmod 600 /etc/passwd.txt #设置⽂件权限,只设置⽂件所有者具 有读取、写⼊权限 
    

    注意:这⾥的密码和客户端的密码是⼀样的

    配置完成,测试同步
    [root@rsync-agent ~]# rsync -avH --port=873 --progress --delete  /test user1@192.168.47.129::test --password-file=/etc/passwd.txt 
    

    安装Inotify-tools⼯具,实时触发rsync进⾏同步

    1、查看服务器内核是否⽀持inotify (下⾯输出说明⽀持)

    [root@rsync-server ~]# ll /proc/sys/fs/inotify
    total 88
    -rw-r--r-- 1 root root 0 Nov  1 20:47 max_queued_events
    -rw-r--r-- 1 root root 0 Nov  1 20:47 max_user_instances
    -rw-r--r-- 1 root root 0 Nov  1 20:47 max_user_watches
    

    2、安装inotify-tools

    [root@rsync-server ~]# wget http://github.com/downloads/rvoicilas/inotifytools/inotify-tools-3.14.tar.gz 
    [root@rsync-server ~]# tar zxvf inotify-tools-3.14.tar.gz 
    [root@rsync-server ~]# cd inotify-tools-3.14 
    [root@rsync-server inotify-tools-3.14]# ./configure --prefix=/usr/local/inotify && make && make install 
    

    3、设置系统环境变量,添加软连接

    [root@rsync-server inotify-tools-3.14]# echo "PATH=/usr/local/inotify/bin:$PATH" >>/etc/profile.d/inotify.sh 
    [root@rsync-server inotify-tools-3.14]# source /etc/profile.d/inotify.sh 
    [root@rsync-server inotify-tools-3.14]# echo "/usr/local/inotify/lib" >/etc/ld.so.conf.d/inotify.conf 
    [root@rsync-server inotify-tools-3.14]# ln -s /usr/local/inotify/include  /usr/include/inotify
    [root@rsync-server inotify-tools-3.14]# ln -s /usr/local/inotify/lib/libnotifytools.so.0 /usr/lib64 
    

    4、修改inotify默认参数(inotify默认内核参数值太⼩)

    [root@rsync-server inotify-tools-3.14]# vim /etc/sysctl.conf   #添加以下代码 
    fs.inotify.max_queued_events=99999999 
    fs.inotify.max_user_watches=99999999 
    fs.inotify.max_user_instances=65535 
    

    5、创建脚本,实时触发rsync进⾏同步

    [root@rsync-server inotify-tools-3.14]# vim /usr/local/inotify/rsync.sh 
    #!/bin/bash 
    srcdir="/test" 
    dstdir="test" 
    excludedir="/usr/local/inotify/exclude.list" 
    rsyncuser="user1" 
    rsyncpassdir="/etc/passwd.txt" 
    dstip="192.168.47.131"
     
    for ip in $dstip 
    do 
    rsync -avH --port=873 --progress --delete --exclude
    from=$excludedir $srcdir $rsyncuser@$ip::$dstdir --passwordfile=$rsyncpassdir 
    done
     
    /usr/local/inotify/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f%e' -e close_write,modify,delete,create,attrib,move $srcdir | while read file 
    do 
        for ip in $dstip 
        do 
        rsync -avH --port=873 --progress --delete --exclude
    from=$excludedir $srcdir $rsyncuser@$ip::$dstdir --passwordfile=$rsyncpassdir echo "${file} was rsynced" >> /tmp/rsync.log 2>&1 
        done 
    done 
    

    6、修改权限

    [root@rsync-server inotify-tools-3.14]# mkdir -p /usr/local/inotify/exclude.list
    [root@rsync-server inotify-tools-3.14]# chmod +x /usr/local/inotify/rsync.sh
    

    脚本参数说明:
    excludedir=/usr/local/inotify/exclude.list 不需要同步的⽬录,如果有多个,每⼀⾏写⼀个⽬录,使⽤相 对于同步模块的路径
    7、设置脚本开机自动执行

    [root@rsync-server inotify-tools-3.14]# vim /etc/rc.d/rc.local  #编辑,在最后添加⼀行
    sh /usr/local/inotify/rsync.sh & #设置开机⾃动在后台运行脚本 
    [root@rsync-server inotify-tools-3.14]# chmod +x /etc/rc.d/rc.local 
    [root@rsync-server inotify-tools-3.14]# systemctl enable rc-local 
    

    至此,所有的配置就完成了,这个项目还是很实用的。

    相关文章

      网友评论

          本文标题:实时同步rsync+inotify

          本文链接:https://www.haomeiwen.com/subject/qltsuctx.html