小知识: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执行:

?
1
sudo yum install rsync

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

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

服务器A执行:

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

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

在服务器A中:

?
1
mkdir /home/paul/rsync

在服务器B中:

?
1
mkdir /home/paul/rsync

在服务器A创建测试文件

?
1
echo “Hello from Server A” >> /home/paul/rsync/demo.txt

执行文件传送命令

在服务器A运行:

?
1
2
3
4
# (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系统,依次执行:

?
1
2
yum install -y epel-release
yum –enablerepo=epel install inotify-tools

使用inotifywait命令进行事件监听

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

?
1
2
3
4
5
6
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

?
1
2
crontab -e
* * * * * sh /home/paul/inotifywait-rsync.sh

参考资料

https://rsync.samba.org

https://github.com/rvoicilas/inotify-tools/wiki

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

原文链接:https://www.jianshu.com/p/76ec8ac0c8b1

声明: 猿站网有关资源均来自网络搜集与网友提供,任何涉及商业盈利目的的均不得使用,否则产生的一切后果将由您自己承担! 本平台资源仅供个人学习交流、测试使用 所有内容请在下载后24小时内删除,制止非法恶意传播,不对任何下载或转载者造成的危害负任何法律责任!也请大家支持、购置正版! 。本站一律禁止以任何方式发布或转载任何违法的相关信息访客发现请向站长举报,会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。本网站的资源部分来源于网络,如有侵权烦请发送邮件至:2697268773@qq.com进行处理。
建站知识

小知识:Linux命令行快速技巧之定位一个文件的方法

2023-3-20 7:35:36

建站知识

小知识:linux操作系统下配置ssh/sftp和权限设置方法

2023-3-20 7:51:57

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索