• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    Linux服务器间文件实时同步的实现

    使用场景

    现有服务器A和服务器B,如果服务器A的指定目录(例如 /home/paul/rsync/ )中的内容发生变更(增删改和属性变更),实时将这些变更同步到服务器B的目标目录中(例如 /home/paul/rsync/ )。

    数据镜像备份工具Rsync

    Rsync是一个非常快速和灵活的文件复制工具。它支持本机或者是和远程服务器间的文件复制。Rsync使用了delta-transfer算法,它只需要传送源端和目标端的文件差异部分,大大减少了网络带宽的消耗和复制耗费的时间。Rsync多用于数据备份和镜像。

    Rsync使用了快速检查算法,通过比较文件大小或最后修改时间的变化来判断文件是否需要同步。

    Rsync连接远程主机有两种方式:使用ssh或rsync daemon。这里使用Rsync方式来实现远程文件备份。

    Rsync的安装与操作

    安装Rsync

    分别在服务器A和服务器B的terminal执行:

    sudo yum install rsync

    安装完毕后,会发现rsync的配置文件位于 etc/rsyncd.conf 。该文件使用daemon方式同步时需要使用,此处暂不介绍。

    配置服务器A和B之间的免密登录

    服务器A执行:

    ssh-keygen
    ssh-copy-id 服务器B的IP地址

    创建源端目录和目标端目录

    在服务器A中:

    mkdir /home/paul/rsync

    在服务器B中:

    mkdir /home/paul/rsync

    在服务器A创建测试文件

    echo "Hello from Server A" >> /home/paul/rsync/demo.txt
    

    执行文件传送命令

    在服务器A运行:

    # (1)
    rsync -avPz --progress /home/paul/rsync 192.168.100.130:/home.paul/rsync
    # (2)
    rsync -avPz --delete --progress /home/paul/rsync 192.168.100.130:/home.paul/rsync

    会发现在demo.txt也出现在了服务器B中/home/paul/rsync目录。

    命令解析:

    (1) 将服务器A中的/home/paul/rsync目录内的文件复制到服务器B(192.168.100.130)的/home.paul/rsync中。

    (2) 比较目标端和源端的文件,如果目标端的文件在源端不存在,在目标端删除该文件。

    Rsync存在的问题

    Rsync仅是一个文件复制工具,它无法对源端文件的增删改操作进行监听。在源端做出更改后,需要执行rsync命令才能将变更同步到目标端。

    Rsync在每次同步前需要扫描整个目录。如果源目录内的文件数量比较多,扫描可能需要耗费较多的时间。
    为了满足实时监听的要求,我们需要引入另一个工具:inotify。

    文件系统事件监听工具inotify

    inotify-tools为inotify提供一个简单接口。它是一个c语言编写的库,同时也包含命令行工具。

    inotify-tools的详细介绍请点击: https://github.com/rvoicilas/inotify-tools/wiki

    inotify-tools的安装

    对于centos7系统,依次执行:

    yum install -y epel-release
    yum --enablerepo=epel install inotify-tools

    使用inotifywait命令进行事件监听

    监听脚本如下(inotifywait-rsync.sh):

    inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' -e modify,delete,create,attrib /home/paul/rsync/ | while read file
    do
    rsync -avPz --progress /home/paul/rsync/ 192.168.100.130:/home/paul/rsync/
    rsync -avPz --delete /home/paul/rsync/ 192.168.100.130:/home/paul/rsync/
    echo "${file} was synchronized"
    done

    参数解析

    对于每次触发的监听时间,inotifywait会执行do和done之间的代码。在这里,我们调用之前所说的rsync命令进行文件同步。

    监听脚本加入crontab

    crontab -e
    * * * * * sh /home/paul/inotifywait-rsync.sh

    参考资料
    https://rsync.samba.org
    https://github.com/rvoicilas/inotify-tools/wiki

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

    上一篇:linux操作系统下配置ssh/sftp和权限设置方法
    下一篇:centos7 设置grub密码及单用户登录实例代码
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    Linux服务器间文件实时同步的实现 Linux,服务器,间,文件,实时,