• Rsync + inotify 实现文件实时同步


    Rsync 用来实现触发式的文件同步。
      Inotify-tools是一套组件,Linux内核从2.6.13版本开始提供了inotify通知接口,用来监控文件系统的各种变化情况,如文件存取、删除、移动等。利用这一机制,可以非常方便地实现文件异动告警、增量备份,并针对目录或文件的变化及时作出响应;
    所以使用inotify监控文件系统有任何变动时,然后就触发rsync同步,达到了单向实时同步数据的功能。

    Rsync

    默认安装 或者 源码下载 安装;
     yum install rsync -y  
    同步的备机需要启动服务 开启 873 端口;
    示例启动
    /usr/bin/rsync --daemon 可以添加到 /etc/rc.load 启动项中;

    示例:

    A: web-server    192.168.2.5
    B: web-bak       192.168.2.6

    一、web-bak 配置:

    在 bak 服务上 安装 Rsync 

    默认端口是873,默认安装时候没有这个文件 需要手动创建配置文件 rsyncd.conf

    对于非匿名访问的 rsync 服务器还要创建认证口令文;

    1、创建配置文件:

    # vi /etc/rsyncd.conf

    [root@web-bak ]# cat /etc/rsyncd.conf 
    uid = root gid = root use chroot = no max connections = 100 timeout = 30 strict modes = yes pid file = /var/run/rsyncd.pid lock file = /var/run/rsync.lock log file = /var/log/rsyncd.log [server1] path = /backup/ comment = backup file ignore errors read only = no write only = no hosts allow = 192.16.2.5
    # 指定能进行同步的机器。 多个 IP 或者网段 用空格隔开; # hosts deny = * list = false uid = root gid = root auth users = bakup
    # 验证用户 secrets file = /etc/rsync.pass
    # 添加验证密码文件

    2、创建 rsync.pass 文件 (需要设置为当前用户下的只读权限)

    chmod 600 /etc/rsync.pass

    [root@web-bak ]# cat /etc/rsync.pass 
    bakup:server1

    3、默认启动

    默认启动 
    /usr/bin/rsync --daemon

    同步 :

    /usr/bin/rsync -vzrtopg --delete --progress --password-file=/etc/user.passwd user@172.16.3.18::server /opt/bak/
    #
    # user.passwd 密码路径
    # rsync dome 服务所在的服务器
    # user@172.16.3.18::server 需要同步备份的服务目录,指定 user 账户
    # /opt/bak 本地机器路径
    # 如果 /opt/bak 在 user@172.16.3.18::server 前,就是本地同步到server服务器上
    # 如果 /ope/bak 在后 就是,server 同步备份到本地。

    二、web-server 配置:

    1、创建  rsync.pass 文件

    [root@web-server1 ]# cat /etc/rsync.pass 
    server1

    2、安装 inotify-tools 

    默认yum install 也可以源码进行。

    3、创建 检测同步脚本

      ( inotifywait 循环检测文件  Rsync 从而达到实时同步 )

    [root@web-server1 ]# cat rsync-inotify.sh 
    #!/bin/bash bak=192.168.2.6 # 备份服务器
    src=/bakup/
    # 备份目录 dst=server1 # 备份模块
    user=bakup 启动账户 /usr/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f%e' -e close_write,modify,delete,create,attrib $src | while read files do /usr/bin/rsync -vzrtopg --delete --progress --password-file=/etc/rsync.pass $src $user@$bak::$dst echo "${files} was rsynced ok ! " >>/tmp/rsync.log 2>&1
         done

    4、Rsync 同步参数参考:

    -v, --verbose    详细模式输出,详细显示数据传输备份情况
    -z, --compress    传输时进行压缩以提高传输效率,--compress-level=NUM可按级别压缩。局域网可以不用压缩
    -a, --archive    归档模式,表示以递归方式传输文件,并保持所有文件属性,等价于-rtopgDl
    -r, --recursive(属于-a参数)    对子目录以递归模式,即目录下的所有目录都同样传输
    -t, --times(属于-a参数)    保持文件时间属性信息
    -o, --owner(属于-a参数)    保持文件属主信息
    -p, --perms(属于-a参数)    保持文件权限
    -g, --group(属于-a参数)    保持文件属组信息
    -D, --devices (属于-a参数)    保持设备文件信息
    -l, --links(属于-a参数)    保留软链接(小写字母l)
    -P, --progress    显示同步的过程及传输时的进度等信息
    -e, --rsh=COMMAND    使用的信道协议(remote shell),指定替代rsh的shell程序。例如:ssh
    --exclude=PATTERN    指定排除不需要传输的文件信息
    --exclude-from=file    文件名所在的目录文件,即可以实现排除多个文件
    --bwlimit=RATE    实现数据传输过程限速传输,限制速率单位为kbytes

    三、后台启动运行同步脚本

    nohup & 启动后台运行

    # nohup sh rsync-inotify.sh &

    四、 Rsync 是单向同步的;客户端只保持与服务器端的镜像同步;客户端删除并不会影响服务端数据。 

    unison 可以达到双向镜像同步。

  • 相关阅读:
    Dapper缓冲的真正含义
    css字体变瘦,窄
    打印request的信息
    部分浏览器cookie无法传输cookie,谷歌51-66版本
    Vue点击div以外的地方使div消失
    MybatisPlus模糊查询(like),查询不到中文,却可以查询到英文和数字的一种解决办法
    看起来很唬人,然而却简单实用的CAP理论
    做业务系统研发如何做到认真负责?
    聊聊关于创业公司招聘技术负责人
    [系列] Go
  • 原文地址:https://www.cnblogs.com/sharesdk/p/9774760.html
Copyright © 2020-2023  润新知