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
您可能感兴趣的文章:
文章同步发布: https://www.geek-share.com/detail/2755097834.html
参考文章:
rsync+inotify 实现服务器之间目录文件实时同步(转)
Linux服务器间文件实时同步的实现的更多相关文章
- linux系统中rsync+inotify实现服务器之间文件实时同步
最近需要对服务器上的文件实施动态备份,我又不想每次都手动来进行备份,在网上找了挺多资料,发现使用rsync就可以实现,如果想要实现实时同步,还可以使用rsync+inotify组合,本文就是以组合方式 ...
- rsync+inotify实现服务器之间文件实时同步--转
之前做了“ssh信任与scp自动传输脚本”的技术文档,此方案是作为公司里备份的方法,但在实际的运行中,由于主服务器在给备份服务器传输的时候,我们的主服务器需要备份的文件是实时.不停的产生的,造成不知道 ...
- Linux服务器间文件传输
利用scp传输文件 1.从服务器下载文件 scp username@servername:/path/filename /tmp/local_destination 例如scp codinglog@1 ...
- linux下rsync+inotify实现服务器之间文件实时同步
先介绍一下rsync与inotify. 1.rsync 与传统的cp.tar备份方式相比,rsync具有安全性高.备份迅速.支持增量备份等优点,通过rsync可以解决对实时性要求不高的数据备份需求,例 ...
- centos6.5 rsync+inotify实现服务器之间文件实时同步
1. rsync的优点与不足 与传统的cp.tar备份方式相比,rsync具有安全性高.备份迅速.支持增量备份等优点,通过rsync可以解决对实时性要求不高的数据备份需求,例如定期的备份文件服务器数据 ...
- rsync + inotify 打造多server间文件实时同步
在上篇文章ssh无password登陆server的基础之上.能够利用rsync + Inotify 在多server间实现文件自己主动同步. 例如以下測试机基于三台server做的.内网IP分别例如 ...
- linux服务器间文件夹拷贝
要求,在A机器执行脚本,把A机器的某个目录文件拷贝到B机器. 第一版ftp实现: 1.A 机器先安装 ftp 客户端 $ sudo yum install ftp 2.B机器安装ftp服务端 $ su ...
- linux下两台服务器文件实时同步方案设计和实现
inux下两台服务器文件实时同步方案设计和实现 假设有如下需求: 假设两个服务器: 192.168.0.1 源服务器 有目录 /opt/test/ 192.168.0.2 目标服务器 有目录 /o ...
- rsync+sersync+inotify实现服务器间文件同步之一
rsync+sersync+inotify实现服务器间文件同步之一:rsync安装配置 2013年12月14日 ⁄ Linux管理, 服务器集群技术 ⁄ 共 4925字 ⁄ rsync+sersync ...
随机推荐
- 使用@selector模仿代理功能降低代码耦合度
使用@selector模仿代理功能降低代码耦合度 说明 该模式的好处就是两个产生联系的对象间并没有具体的耦合代码,增删改查均很直观 源码 Model // // Model.h // SELMetho ...
- 乘风破浪:LeetCode真题_002_Add Two Numbers
乘风破浪:LeetCode真题_002_Add Two Numbers 一.前言 这次的题目是关于链表方面的题目,把两个链表对应节点相加,还要保证进位,每个节点都必须是十进制的0~9.因此主要 ...
- CSMA/CD 续
重要特性 以太网不能进行全双工通信而只能进行双向交替通信(半双工通信).每个站在发送数据之后的一小段时间内,存在着遭遇碰撞的可能性. 这种发送的不确定性使整个以太网的平均通信量远小于以太网的最高数据率 ...
- Hibernate 一次查询分多次返回 避免内存溢出
public void grpcGpioDevice(StreamObserver<NI_GetAllDeviceListResponse> responseObserver, Map&l ...
- TCP/IP 协议图--计算机网络体系结构分层
计算机网络体系结构分层 计算机网络体系结构分层 不难看出,TCP/IP 与 OSI 在分层模块上稍有区别.OSI 参考模型注重“通信协议必要的功能是什么”,而 TCP/IP 则更强调“在计算机上实 ...
- Python 多线程 start()和run()方法的区别(三)
上一篇文章最后只是简单介绍了start()方法和run()方法,这篇文章再详细地看下start()和run()的区别. 在实例调用的函数中加入打印当前线程的名字,分别用start()方法和run()方 ...
- 5.3.1 RPC端点RpcEndpoint
ThreadSafeRpcEndpoint对消息的处理都是串行的,即前一条消息处理完才能接着处理下一条消息.ThreadSafeRpcEndpoint的继承体系如图5-3所示. 5.3.2 RPC端点 ...
- jquery Mobile入门—多页面切换示例学习
1.在JQuery Mobile中,多个页面的切换是通过<a>元素.并将<href>属性设置为#+对应的id号的方式进行的. 2.多页面切换示例代码: 复制代码代码如下: &l ...
- PAT——1038. 统计同成绩学生
本题要求读入N名学生的成绩,将获得某一给定分数的学生人数输出. 输入格式: 输入在第1行给出不超过105的正整数N,即学生总人数.随后1行给出N名学生的百分制整数成绩,中间以空格分隔.最后1行给出要查 ...
- Shell笔记-04
如果表达式中包含特殊字符,Shell 将会进行替换.例如,在双引号中使用变量就是一种替换,转义字符也是一种替换. 举个例子: #!/bin/bash a=10 echo -e "Value ...