rsync+inotify自动进行同步

rsync+inotify自动进行同步

数据同步 rsync+inotify

Sync:同步
async:异步
Rsync:远程同步,可以将数据同步到多个和它能够通信的主机上。

Rsync特点:

1 增量复制:
第一次去同步全部的内容,第二次同步只同步修改过的内容。
2 支持匿名复制,也支持身份验证。
3 可以镜像目录树,文件系统。

Rsync

Rsync 选项 src root@ip:/dest push
Rsync 选项 root@ip:/src /dest pull

选项:

-a 代表以下所有选项(不包含v)
-r 递归同步
-l 同步链接文件
-o 同步时,不修改文件的属主
-g 同步时,不修改文件的属组
-p 同步时,不修改文件的权限
-z 同步时,对文件进行压缩
-v 同步时,显示同步信息
–delete 同步时,如果目标目录和源目录中有不一致的文件,自动删除
-L 同步时,如果有链接文件,则同步链接文件的源文件。

基础环境:

IP 备注 别名
192.168.1.10 服务端 master
192.168.1.20 客户端 slave

服务端

做免密登录

[root@master ~]# echo '192.168.1.10 master
> 192.168.1.20 slave' >> /etc/hosts [root@master ~]# ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): Created directory '/root/.ssh'. 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: SHA256:tWGSuqFJ1PeUXtWTvI/ItEIcDkOLmGNqItF07CxgplE root@master The key's randomart image is:
+---[RSA 2048]----+
| .E..  ..     o..|
|o= ..+ .oo.. . +.|
|=o.o* o ==*..   o|
|...+o. o B++.  . |
|o o.. o S.+o o ..|
|.o . o o  . + . .|
|    o .    .     |
|                 |
|                 |
+----[SHA256]-----+
[root@master ~]# ssh-copy-id -i slave
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
The authenticity of host 'slave (192.168.1.20)' can't be established. ECDSA key fingerprint is SHA256:dnnDcAA2qVnA31i7mtr9LYJmH2veu2+r4t+19qUSqqw. ECDSA key fingerprint is MD5:0e:f3:c1:3c:dc:5f:12:66:ae:c9:01:51:66:db:bb:02. Are you sure you want to continue connecting (yes/no)? yes /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys root@slave's password: 

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'slave'"
and check to make sure that only the key(s) you wanted were added.
[root@master ~]# scp /etc/hosts slave:/etc/
hosts                                                   100%  197    87.6KB/s   00:00    

验证

[root@master ~]# ssh slave
Last login: Tue Dec 22 09:14:29 2020 from 192.168.1.250
[root@slave ~]# exit
登出
Connection to slave closed.

创建同步目录

[root@master ~]# mkdir /test1
[root@master ~]# cd /test1
[root@master test1]# 

客户端

创建同步目录

[root@slave ~]# mkdir /test2
[root@slave ~]# cd /test2
[root@slave test2]# 

查看是否安装

 [root@master test1]# rpm -qa | grep rsync
 [root@master test1]# yum -y install rsync
 [root@master test1]# rpm -qa | grep rsync
rsync-3.1.2-10.el7.x86_64


实验一:同步目录

服务端

创建目录

[root@master test1]# mkdir -p a/b/c
[root@master test1]# ls
a

同步

[root@master test1]# rsync -rv /test1/* root@slave:/test2
sending incremental file list
a/
a/b/
a/b/c/

sent 95 bytes  received 28 bytes  82.00 bytes/sec
total size is 0  speedup is 0.00

客户端

查看

[root@slave test2]# ls -R a
a:
b

a/b:
c

a/b/c:

实验二:同步文件

服务端

[root@master test1]# touch 1
[root@master test1]# chmod 777 1
[root@master test1]# ls
1  a
[root@master test1]# ls -l 1
-rwxrwxrwx. 1 root root 0 12月 22 09:25 1
[root@master test1]# rsync -pv /test1/* root@slave:/test2
skipping directory a
1

sent 75 bytes  received 35 bytes  73.33 bytes/sec
total size is 0  speedup is 0.00

客户端

[root@slave test2]# ls
1  a

实验三:同步软连接

服务端

[root@master test1]# ln -s 1 2
[root@master test1]# ls
1  2  a
[root@master test1]# rsync -lv /test1/* root@slave:/test2
skipping directory a
1
2 -> 1

sent 100 bytes  received 38 bytes  92.00 bytes/sec
total size is 1  speedup is 0.01

客户端

[root@slave test2]# ls
1  2  a

实验四:删除客户端创建的文件

客户端

[root@slave test2]# touch 3
[root@slave test2]# ls
1  2  3  a

服务端

[root@master test1]# rsync -av --delete /test1/ root@slave:/test2
sending incremental file list
deleting 3
./
1
a/
a/b/
a/b/c/

sent 216 bytes  received 58 bytes  548.00 bytes/sec
total size is 1  speedup is 0.00

客户端

[root@slave test2]# ls
1  2  a

Inotify可以监控目录,文件系统,删除、创建、修改(内容属性)等操作事件

服务端

[root@master ~]# ls
anaconda-ks.cfg  inotify-tools-3.14.tar.gz
[root@master ~]# tar -zxf inotify-tools-3.14.tar.gz -C /usr/src
[root@master ~]# cd /usr/src/inotify-tools-3.14/
[root@master inotify-tools-3.14]# ./configure --prefix=/usr/local/inotify && make && make install
[root@master inotify-tools-3.14]# ln -s /usr/local/inotify/bin/* /usr/local/bin/

Inotifywait
-m 一直处于监控
-r 递归监控
-q 将监控的目录的监控信息显示在终端上
-e 指定监控的事件
–format 指定事件输出的格式

监控的事件
Move 移动
Create 创建
Delete 删除
Modify 修改内容
Close_write 修改文件内容
Close——nowrite 查看只读文件内容

输出事件的格式
%w 产生监控的路径
%f 监控的目录,输出文件名
%e 事件名称
%T 输出当前事件

监控事件(会阻塞终端)

[root@master ~]# inotifywait -mrq --format %w%f -e create,delete,move,close_write /test1

在开启一个服务端进行测试

[root@master ~]# touch /test1/www
[root@master ~]#

查看
在这里插入图片描述

Sync+inotify 自动进行同步

编写脚本

[root@master ~]# vim rsyncd.sh
#!/bin/bash
rs_script="inotifywait -mrq --format %w%f -e create,delete,move,close_write /test1"
ny_script="rsync -avz --delete /test1/* root@slave:/test2/"
$rs_script|while read file
do
         if [ -f $file ];then
             echo "备份开始..."
             $ny_script
             echo "备份结束..."
         else
            cd /test1 && rsync -az --delete ./ root@slave:/test2
         fi
done

[root@master ~]# chmod +x rsyncd.sh #添加权限
[root@master ~]# ./rsyncd.sh & #后台运行
 > 也可以使用nohup进行后台运行
    nohup  ./rsyncd.sh & 

验证

服务端

[root@master test1]# mkdir -p a/b/c
[root@master test1]# touch test.txt
[root@master test1]# ln -s test.txt new.txt

客户端

[root@slave test2]# ls
a  new.txt  test.txt
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/101906.html原文链接:https://javaforall.net

(0)
上一篇 2021年5月31日 上午8:00
下一篇 2021年5月31日 上午9:00


相关推荐

  • 数据库隔离级别有哪些,各自的含义是什么,MYSQL默认的隔离级别是是什么。

    数据库隔离级别有哪些,各自的含义是什么,MYSQL默认的隔离级别是是什么。一、什么是事务事务是应用程序中一系列严密的操作,所有操作必须成功完成,否则在每个操作中所作的所有更改都会被撤消。也就是事务具有原子性,一个事务中的一系列的操作要么全部成功,要么一个都不做。事务的结束有两种,当事务中的所以步骤全部成功执行时,事务提交。如果其中一个步骤失败,将发生回滚操作,撤消撤消之前到事务开始时的所以操作。二、事务的四个特性事务具有四个特征:原子性(Atomicity)…

    2022年5月25日
    34
  • matlab中@的用法[通俗易懂]

    matlab中@的用法[通俗易懂]@是用于定义函数句柄的操作符。函数句柄既是一种变量,可以用于传参和赋值;也是可以当做函数名一样使用。举例:sin是matlab中的一个函数,但sin只是函数名,还不是函数句柄,不可以用于传参。f=@sin;这行代码定义了一个函数句柄,变量名是f。这样就可以当做参数传递了(这就是上面代码中的意义所在),而且还可以跟sin函数按相同的语法规则使用:g=f;%g也是函数句柄,其“值”和f一样…

    2022年7月17日
    17
  • CentOS6.5使用yum快速搭建LAMP(Linux+Apache+MySQL+PHP)环境「建议收藏」

    CentOS6.5使用yum快速搭建LAMP(Linux+Apache+MySQL+PHP)环境

    2022年3月12日
    39
  • 51单片机设计8位抢答器_51单片机八路抢答器原理图

    51单片机设计8位抢答器_51单片机八路抢答器原理图基于51单片机八路抢答器的设计毕业设计(论文)题目:基于51单片机八路抢答器的设计系部:专业:学号:学生姓名:指导教师姓名:指导教师职称:2013年xx月xx日XXXXXXXX学院(论文)I摘要随着科学技术的发展和普及,各种各样的竞赛越来越多,其中抢答器的作用也就显而易见。目前很多抢答器基本上采用小规模数字集成电路设计,使用起来不够理想。因此设计一更易于使…

    2022年10月20日
    5
  • LRC格式转换

    LRC格式转换[code="java"]importjava.io.BufferedReader;importjava.io.FileInputStream;importjava.io.FileNotFoundException;importjava.io.IOException;importjava.io.InputStreamReader;importjava.util.Co…

    2025年8月20日
    4
  • 完美解决:不能为虚拟电脑打开一个新任务的问题

    完美解决:不能为虚拟电脑打开一个新任务的问题安装最新版 VirtualBox 后出现的问题在百度上百度了一下 试了好几种方法都解决不了 然后照着百度经验上讲解的方法试了一次 结果成功咯 后面又将软件卸载重新安装 可是都失败了 最后问了一位老师 她讲解的方法就是将 virtualbox 软件以管理员的方式运行 结果就是可以成功启动虚拟机解决方法 将虚拟机设置为以管理员方式运行 1 鼠标右键打开 virtualbox 软件的属性 2 先选择兼容性 然后在选择更改所有用户的设置 3 勾选以管理员身份运行此程序 4 最后点击确定即可 然后在重新运行 virtualbo

    2026年3月19日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号