rsync+inotify 实现实时同步
发布日期:2021-09-16 04:38:44 浏览次数:36 分类:技术文章

本文共 2706 字,大约阅读时间需要 9 分钟。

rsync+inotify 实现实时同步
1、安装rsync
可以通过yum源安装rsync服务
[root@dg test]# yum install rsync
也可以通过安装源码包
 wget  http://rsync.samba.org/ftp/rsync/src/rsync-3.0.9.tar.gz  
[root@dg test]#tar zxvf rsync-3.0.9.tar.gz  
[root@dg test]#cd rsync-3.0.9  
[root@dg test]#./configure --prefix=/usr/local/rsync  
[root@dg test]# make  
[root@dg test]#make install  
make -j 4 # make编译,将源代码编译成二进制,可执行的文件 -j 4 使用4个进程同时编译,考虑cpu个数,不要超过cpu的个数
例如:在源端有个目录/tmp/test下有文件,都会同步目标端10.10.6.82:/data下,但是此方式只能手工同步,不能实现实时同步
[root@dg test]# rsync -azP --delete /tmp/test root@10.10.6.82:/data
注:rsync 是基于ssh 协议,需要知道对服务器端的root和密码
-a, archive(存档) 归档模式,表示以递归的方式传输文件,并且保持稳健的属性,等同于加了参数-riptgoD
-z --compress 表示压缩
-P 显示传输速度
--delete 删除那些目标端位置有而原始位置没有的文件
添加ssh密钥服务,下次可以不用输入密码
[root@dg bin]# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
1e:5f:6e:fe:15:a6:c1:12:d7:1d:4c:79:c5:9f:a3:9d root@dg
拷贝信任关系到目标端

[root@dg .ssh]# ssh-copy-id root@10.10.6.82

查看目标段密钥已经过去
[root@rac2 .ssh]# ls
authorized_keys  known_hosts
不用输入密码登录10.10.6.82,此方式同步不用输入密码
[root@dg .ssh]# ssh root@10.10.6.82
Last login: Wed Jan 20 10:42:22 2016 from 10.10.8.54
[root@rac2 ~]# 
2 安装inotify
[root@dg test]#tar zxvf inotify-tools-3.14.tar.gz  
[root@dg test]# cd inotify-tools-3.14  
[root@dg test]# ./configure --prefix=/usr/local/inotify  
[root@dg test]# make  
[root@dg test]# make install
inotifywait -mrq -e create,move,delete,modify /tmp/test
-e 用来指定要监控哪些事件 这些事件包括 create,创建,move 移动,delete 删除,modify修改内容 attrib 属性的更改
-m 表示持续监控
-r表示递归监控
-q表示简化输出信息
另外开了一个窗口:
root@dg test]# cp /etc/group  /tmp/test
[root@dg ~]# inotifywait -mrq -e create,move,delete,modify /tmp/test
/tmp/test/ CREATE group
/tmp/test/ MODIFY group
从此可以看出 inotifywait 可以捕捉到创建文件的消息
3 创建rsync复制脚本
此项功能主要是将server端的目录/tmp里的内容,如果修改了(无论是添加、修改、删除文件)能够通过inotify监控到,并通过rsync实时的同步给client的/tmp里,下面是通过shell脚本实现的。
[root@dg test]# cat rsync.sh 
#!/bin/bash  
host=10.10.6.82
src=/data   
des=/data2
user=root 
/usr/local/inotify/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f%e' -e modify,delete,create,attrib $src  |while read files  
do  
/usr/bin/rsync -vzrtopg --delete  $src $user@$host:$des  
echo "${files} was rsynced" >>/rsync.log 2>&1  
done 
其中host是client的ip,src是server端要实时监控的目录,des是认证的模块名,需要与client一致,user是建立密码文件里的认证用户。
把这个脚本命名为rsync.sh,放到监控的目录里,比如我的就放到/tmp下面,并给予764权限,建议各位吧rsync的日志放到其他的目录下(非备份目录)。
[root@dg test]# chmod 764 rsync.sh
然后运行这个脚本
[root@dg test]#  sh /tmp/rsync.sh & 
我们还可以把rsync.sh脚本加入到开机启动项里
echo "/tmp/rsync.sh" >> /etc/rc.local 
在源端目录添加或者删除文件,目标端的文件夹也会改变

转载地址:https://blog.csdn.net/wll_1017/article/details/50549341 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:PRVF-5439 : NTP daemon does not have slewing option "-x"
下一篇:extundelete

发表评论

最新留言

第一次来,支持一个
[***.219.124.196]2024年03月18日 10时40分48秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

400错误java_java代码转化成c#代码 报400错误 2019-04-21
java常见对象_Java 常见对象 02 2019-04-21
spring java配置_Spring Java配置要点 2019-04-21
共享内存 java_java - Java客户端-服务器编程:客户端之间的共享内存 - 堆栈内存溢出... 2019-04-21
java布局管理器空布局_Java图形化界面设计——布局管理器之null布局(空布局)... 2019-04-21
java gas station_LeetCode – 774. Minimize Max Distance to Gas Station 2019-04-21
java项目无法加载到tomcat_eclipse+tomcat添加项目进来无法启动tomcat 2019-04-21
后缀树建立 java_实用算法实现-第 8 篇后缀树和后缀数组 [2 最长公共子串] 2019-04-21
java网络编程期末试题_java网络编程面试题【其中一小部分】 2019-04-21
estore java_estore2 - WEB源码|JSP源码/Java|源代码 - 源码中国 2019-04-21
java如何做表单校验_微信小程序实现表单校验功能 2019-04-21
matlab dwt2(),MATLAB小波变换指令及其功能介绍(超级有用) 2019-04-21
php sequelize,egg.js整合数据库ORM框架Sequelize 2019-04-21
php同时打开2个数据库,thinkphp3.2同时连接两个数据库的简单方法 2019-04-21
centos 开发php扩展,centos 安装php扩展redis 2019-04-21
php+跑buth,php 中函数获取可变参数的方法, 这个语法有点像 golang 语言中的 2019-04-21
cms 单点登录 php,Yii2 中实现单点登录的方法 2019-04-21
oracle自己运行,创建Oracle自动执行Job 2019-04-21
oracle报错00020,oracle启动 ORA-00020: maximum number of processes (%s) exceeded错误 2019-04-21
chmod 赋权所有_chmod 权限 命令详细用法 2019-04-21