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

 更新时间:2018年11月21日 09:32:47   作者:AlienPaul  
这篇文章主要介绍了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

参数解析

  • -m 保持持续监听状态,如果不写该参数,inotifywait会在监听到一次事件之后退出。
  • -r 递归方式监听目录。
  • -q 安静模式,打印输出较少的内容。
  • --timefmt 指定时间的输出格式。
  • --format 指定事件输出的格式。
  • -e 设置监听的事件类型。这里监听增删改和metadata的变更。

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

监听脚本加入crontab

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

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

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

相关文章

  • Ubuntu系统下扩展LVM根目录的方法

    Ubuntu系统下扩展LVM根目录的方法

    这篇文章主要给大家介绍了关于Ubuntu系统下扩展LVM根目录的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-05-05
  • 使用Xshell建立连接并操纵服务器的方法

    使用Xshell建立连接并操纵服务器的方法

    Xshell对于开发人员来说是一款不可或缺的工具,它可以简单快捷地访问远端不同系统的服务器,以达到远程控制终端的目的,本文小编就为大家演示如何使用Xshell建立一个连接并操纵服务器,需要的朋友可以参考下
    2022-10-10
  • linux让程序开机自动运行最简单的方法

    linux让程序开机自动运行最简单的方法

    在本篇文章里小编给大家整理的是一篇关于linux让程序开机自动运行最简单的方法以及相关代码,需要的朋友们学习下。
    2019-11-11
  • 【Linux】Linux中常用操作命令总结

    【Linux】Linux中常用操作命令总结

    这篇文章主要介绍了【Linux】Linux中常用操作命令总结,Linux,免费开源,多用户多任务系统。本文总结了一些实用常用命令,需要的朋友可以参考下。
    2016-11-11
  • Vim的分屏功能命令大全

    Vim的分屏功能命令大全

    写code的朋友可能都会有个烦恼,长长的代码,小小的屏幕,是我怎能瞻前顾后?而vim的分屏功能在一定程度上解决了这个问题。这篇文章主要给大家介绍了Vim的分屏功能实现,文中通过图文以及详细步骤给大家进行了介绍,相信会对大家的理解和学习很有帮助,
    2016-11-11
  • 详解Linux系统中如何修改时间和时区

    详解Linux系统中如何修改时间和时区

    当我们在使用Linux系统时,有时会遇到系统时间与当地时间存在差异的情况,所以这篇文章就给大家详细介绍如何解决这个问题,感兴趣的小伙伴跟着小编一起来学习吧
    2023-07-07
  • 详解linux系统目录sys,tmp,usr,var!

    详解linux系统目录sys,tmp,usr,var!

    在本篇文章里小编给大家详解了关于linux系统目录,sys,tmp,usr,var!的相关知识点内容,有兴趣的朋友们参考下。
    2019-06-06
  • centos7下rsync+crontab定期同步备份

    centos7下rsync+crontab定期同步备份

    最近需求想定期备份内部重要的服务器数据到存储里面,接下来通过本文给大家分享centos7下rsync+crontab定期同步备份,感兴趣的朋友跟随小编一起看看吧
    2018-11-11
  • Ubuntu Server下无线网卡的配置详解

    Ubuntu Server下无线网卡的配置详解

    今天小编就为大家分享一篇关于Ubuntu Server下无线网卡的配置详解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-03-03
  • Linux多线程中fork与互斥锁过程示例

    Linux多线程中fork与互斥锁过程示例

    大家好,本篇文章主要讲的是Linux多线程中fork与互斥锁过程示例,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下哦
    2021-11-11

最新评论