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

发布时间:2024-03-22 点击:94
现有服务器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


阿里双11怎么买云服务器
百度云服务器自动备份
我想买一个云服务器
seo网站优化应该怎么做网站排名优化
中文域名有什么用?注册中文域名好不好
建网站要着重刻画的细节部分有哪些?
云服务器多少钱文档介绍内容
网盘和云服务器的区别