rsync同步与inotify监控

 [root@1 ~]# firewalld-cmd --zone=public --add-port=9999/tcp
 [root@1 ~]# chmod -R g+w /code    //-R递归赋予权限
 [root@1 ~]# ssh-copy-id -p9999 用户@IP地址
 [root@1 ~]# scp -P9999  文件  用户@IP地址:详细地址
firewall-cmd --zone=public --add-port=9999/tcp 这条命令的作用是在防火墙的 public 区域中添加一个允许 TCP 协议、端口号为 9999 的访问规则。

这意味着网络流量可以通过端口 9999 并使用 TCP 协议与您的系统进行通信。

比如说,如果您在系统上运行了一个特定的服务,该服务使用 TCP 协议并监听在端口 9999 上,那么执行此命令后,外部网络可以访问到这个服务。

再比如,您搭建了一个基于 TCP 协议、端口 9999 的 Web 应用,在执行此命令之前,外部请求可能会被防火墙阻挡,执行之后,外部用户就能够正常访问该应用。但需要注意的是,添加此规则后,也会增加一定的安全风险,因为它打开了一个新的网络访问通道。所以在添加端口开放规则时,应确保您确切知道自己的需求和潜在的安全影响。

chmod -R g+w /code 这条命令的作用是递归地为 /code 目录及其内部的所有文件和子目录赋予所属组的写权限。

这意味着该目录所属组的用户可以对其中的内容进行修改和写入操作。

例如,如果您有一个开发团队,团队成员都属于同一个组,通过执行此命令,组内的成员就能够对 /code 目录下的文件和子目录进行修改和保存新的内容。

再比如,如果 /code 目录下包含了多个项目文件夹,执行该命令后,组内成员可以在这些项目中添加、修改或删除文件,方便团队成员之间的协作和数据共享。

但需要注意的是,过度赋予权限可能会导致安全风险,如果不小心,可能会造成重要文件被误修改或删除。

1、RSYNC介绍
rsync 是一个强大的文件同步工具,常用于在不同的系统之间高效地复制和同步文件及目录。

它具有以下一些显著的特点和优势:

1、增量备份:rsync 只会传输源目录和目标目录之间有差异的部分,这大大减少了数据传输量,提高了同步效率。

例如,如果您有一个大型的文件库,并且只对其中的几个文件进行了修改,rsync 只会传输这些修改过的文件,而不是整个文件库。

2、数据完整性:它能够确保数据在传输过程中的完整性,通过校验和来验证文件是否正确传输。

3、多种传输方式:支持通过本地连接(如本地磁盘)、SSH 等方式进行文件同步。

4、保留权限和属性:可以保留文件和目录的权限、所有者、组、时间戳等属性。

5、排除特定文件或目录:通过配置,可以指定排除某些不需要同步的文件或目录。

在实际应用中,rsync 常用于服务器之间的数据备份、文件同步、版本控制等场景。以下是一个基本的 rsync 命令示例:

 rsync -avz source_directory destination_directory
其中:

-a 表示归档模式,保留权限、属性等。

-v 表示详细模式,显示更多信息。

-z 表示在传输过程中进行压缩,以减少网络带宽使用。

(1)rsync的好姐妹
sync 同步:刷新⽂件系统缓存,强制将修改过的数据块写⼊磁盘,并且更新超级块。

async 异步:将数据先放到缓冲区,再周期性(⼀般是30s)的去同步到磁盘。

rsync 远程同步:== remote synchronous ==

数据同步过程

sync数据同步 => 保存⽂件(⽬标)=> 强制把缓存中的数据写⼊磁盘(⽴即保存),实时性 要求⽐较⾼的场景

asyn数据异步 => 保存⽂件(⽬标)=> 将数据先放到缓冲区,再周期性(⼀般是30s)的去同 步到磁盘,适合⼤批量数据同步的场景

(2)rsync特点
可以镜像保存整个⽬录树和⽂件系统

可以保留原有的权限(permission,mode),owner,group,时间(修改时间,modify time),软硬 链接,⽂件acl,⽂件属性(attributes)信息等

传输== 效率⾼ ==,使⽤同步算法,只⽐较变化的(增量备份)

file1.txt file2.txt file3.txt(A服务器)

rsync实现数据同步 => 只同步file3.txt => 增量备份 file1.txt file2.txt(B服务器)

⽀持匿名传输,⽅便⽹站镜像;也可以做验证,加强安全

(3)rsync与scp的区别
两者都可以实现远程同步,但是相对⽐⽽⾔,rsync能⼒更强

① ⽀持增量备份 ② 数据同步时保持⽂件的原有属性

2、ups中继器介绍
UPS 中继器是在不间断电源(UPS)系统中起到信号增强和扩展覆盖范围作用的设备。

它的主要作用包括:

信号增强:UPS 系统中的某些信号可能会随着传输距离的增加而减弱,中继器可以接收并重新放大这些信号,确保信号的强度和质量,以实现稳定的通信和控制。

例如,在一个大型的数据中心,UPS 与监控系统之间的距离较远,信号可能会衰减,使用中继器可以保证监控信息的准确传输。

扩展覆盖范围:使 UPS 系统能够覆盖更广的区域,超出原本的有效范围。

比如在多层建筑中,UPS 主机位于一层,而需要为高层的设备提供稳定的电源管理和监控,中继器可以帮助实现这一需求。

改善信号稳定性:减少信号干扰和失真,提高系统的可靠性。

兼容不同的拓扑结构:可以适应不同的网络拓扑结构,如星型、总线型等,以满足复杂的布线需求。

在选择 UPS 中继器时,需要考虑以下因素:

信号放大能力:确保其能够满足您系统中信号强度的要求。

兼容性:与您所使用的 UPS 系统和其他相关设备兼容。

可靠性:具备良好的稳定性和耐用性。

安装和维护的便捷性:易于安装和后续的维护操作。

总之,UPS 中继器在优化 UPS 系统的性能和覆盖范围方面发挥着重要的作用,有助于提高整个电源保障系统的可靠性和稳定性。

3、安装rsync
 [root@1 ~]# rpm -aq |grep rsync    //查看是否已经安装rsync
 [root@1 ~]# yum list installed | grep rsync   //查看是否已经安装rsync
 [root@1 ~]# yum -y install rsync    //默认没有安装,通过yum进行安装rsync软件
 [root@1 ~]# which rsync   //查看rsync的所在位置
 /usr/bin/rsync
 [root@1 ~]# find / -name "rsync*"   //查找rsync相关文件

4、rsync基本语法使用
push:推,相当于上传;pull:拉,相当于下载

rsync [选项] 原数据位置 目标位置

文件的增加、修改、删除、属性修改,会被rsync同步

 -v   详细模式输出 
 -a   归档模式,递归的⽅式传输⽂件,并保持⽂件的属性,equals -rlptgoD
 -r   递归拷⻉⽬录
 -l   保留软链接
 -p   保留原有权限
 -t   保留原有时间(修改)
 -g   保留属组权限
 -o   保留属主权限
 -D   等于--devices  --specials    表示⽀持b,c,s,p类型的⽂件
 -R   保留相对路径
 -H   保留硬链接
 -A   保留ACL策略
 -e   指定要执⾏的远程shell命令,ssh更改端⼝常⽤选项
 -E   保留可执⾏权限
 -X   保留扩展属性信息  a属性
(1)在家目录中创建一些文件
 [root@1 ~]# mkdir folder
 [root@1 ~]# mkdir folder/f{1..3}
 [root@1 ~]# ls folder/
 f1  f2  f3
 [root@1 ~]# touch folder/f1/file{0..4}
 [root@1 ~]# tree folder/
 folder/
 ├── f1
 │   ├── file0
 │   ├── file1
 │   ├── file2
 │   ├── file3
 │   └── file4
 ├── f2
 └── f3
 3 directories, 5 files
(2)使用rsync进行测试(文件增加)(同步文件或同步目录)
 [root@1 ~]# rsync -av folder/* /opt   //将folder目录下的文件同步到opt目录下
 sending incremental file list
 f1/
 f1/file0
 f1/file1
 f1/file2
 f1/file3
 f1/file4
 f2/
 f3/
 sent 378 bytes  received 123 bytes  1,002.00 bytes/sec
 total size is 0  speedup is 0.00
 [root@1 ~]# tree /opt    //查看是否同步成功
 /opt
 ├── f1
 │   ├── file0
 │   ├── file1
 │   ├── file2
 │   ├── file3
 │   └── file4
 ├── f2
 └── f3
 3 directories, 5 files
 [root@1 ~]# rm -rf /opt/*
 [root@1 ~]# rsync -av folder /opt    //将folder目录同步过去
 sending incremental file list
 folder/
 folder/f1/
 folder/f1/file0
 folder/f1/file1
 folder/f1/file2
 folder/f1/file3
 folder/f1/file4
 folder/f2/
 folder/f3/
 sent 412 bytes  received 131 bytes  1,086.00 bytes/sec
 total size is 0  speedup is 0.00
 [root@1 ~]# tree /opt     //查看同步效果
 /opt
 └── folder
     ├── f1
     │   ├── file0
     │   ├── file1
     │   ├── file2
     │   ├── file3
     │   └── file4
     ├── f2
     └── f3
 4 directories, 5 files
 [root@1 ~]# rm -rf /opt/*
 [root@1 ~]# rsync -avR folder/ /opt    //将folder目录同步过去   -R表示保留相对路径
 [root@1 ~]# tree /opt     //查看同步效果
 /opt
 └── folder
     ├── f1
     │   ├── file0
     │   ├── file1
     │   ├── file2
     │   ├── file3
     │   └── file4
     ├── f2
     └── f3
 4 directories, 5 files
 [root@1 ~]# touch folder/f1/file5
 [root@1 ~]# rsync -av folder/f1/ folder/f2/
 [root@1 ~]# tree folder/
(3)使用rsync进行测试(文件删除)
 [root@1 ~]# rm -rf folder/f1/file0
 [root@1 ~]# rsync -av --delete folder/f1/ folder/f2/
 [root@1 ~]# tree folder/
(4)使用rsync进行测试(文件修改)
 [root@1 ~]# vim folder/f1/file1
 哈哈
 [root@1 ~]# cat folder/f1/file1
 哈哈
 [root@1 ~]# rsync -av folder/f1/ folder/f2/
 [root@1 ~]# cat folder/f2/file1
 哈哈
(5)使用rsync进行测试(文件属性改变)
 [root@1 ~]# touch folder/f1/file1 -m -d "2024-7-14 00:00"
 [root@1 ~]# rsync -av folder/f1/ folder/f2/
 [root@1 ~]# ls -l folder/f2/file1
 [root@1 ~]# chmod g+w folder/f1/file1
 [root@1 ~]# rsync -av folder/f1/ folder/f2/
 [root@1 ~]# ls -l folder/f2/file1
(6)远程传输文件
要实现远程同步,要求两台主机都应该安装rsync

 [root@1 ~]# dd if=/dev/zero of=/tmp/lajiwenjian bs=300M count=1
 [root@2 ~]# yum -y install rsync
 [root@1 ~]# rsync -av /tmp/lajiwenjian root@10.0.0.20:/tmp/
 [root@2 ~]# ls -lh /tmp/lajiwenjian 
 -rw-r--r--. 1 root root 300M 7月  18 11:05 /tmp/lajiwenjian
5、使用rsync同步一个项目
(1)查看rsyncd服务状态并执行服务
 [root@1 ~]# systemctl status rsyncd
 ● rsyncd.service - fast remote file copy program daemon
    Loaded: loaded (/usr/lib/systemd/system/rsyncd.service; disabled; vendor preset: disabled)
    Active: inactive (dead)
 [root@1 ~]# systemctl start rsyncd
 [root@1 ~]# netstat -lntup | grep rsync
 tcp        0      0 0.0.0.0:873             0.0.0.0:*               LISTEN      10086/rsync         
 tcp6       0      0 :::873                  :::*                    LISTEN      10086/rsync    
(2)找出服务的配置文件
 [root@1 ~]# find / -name "rsync*conf"
 /etc/rsyncd.conf
(3)创建一个项目
 [root@1 ~]# mkdir -p /app/studentweb/src/main/java/co/goho/yuanyu.studentweb/    //-p创建多级目录
 [root@1 ~]# tree /app/
 /app/
 └── studentweb
     └── src
         └── main
             └── java
                 └── co
                     └── goho
                         └── yuanyu.studentweb
 ​
 7 directories, 0 files
 [root@1 ~]# touch /app/studentweb/src/main/java/co/goho/yuanyu.studentweb/File{0..9}.java
 [root@1 ~]# tree /app/
 /app/
 └── studentweb
     └── src
         └── main
             └── java
                 └── co
                     └── goho
                         └── yuanyu.studentweb
                             ├── File0.java
                             ├── File1.java
                             ├── File2.java
                             ├── File3.java
                             ├── File4.java
                             ├── File5.java
                             ├── File6.java
                             ├── File7.java
                             ├── File8.java
                             └── File9.java
 ​
 7 directories, 10 files
 [root@1 ~]# systemctl stop firewalld     //关闭防火墙
 [root@1 ~]# setenforce 0    //设置selinux模式为宽松模式
 [root@1 ~]# getenforce 
 Permissive
 [root@1 ~]# vim /etc/rsync.conf   //修改rsync配置文件
 [app]
 path=/app/studentweb/     //项目路径
 log file=/var/log/rsync.log   //项目日志文件路径
 [root@1 ~]# systemctl restart rsyncd   //重启rsyncd服务
(在1主机中提供了一个针对app/下的项目rsync服务,下次访问直接找服务)

(4)测试(使用rsync服务同步项目)
 [root@2 ~]# rsync -a root@10.0.0.11::     //查找10.0.0.11主机的项目
 app   
 [root@2 ~]# rsync -av root@10.0.0.11::app /tmp/    //将app项目同步到2主机的tmp目录下
 [root@2 ~]# ls -l /tmp/
 drwxr-xr-x. 3 root root        18 7月  18 11:28 src
 [root@2 ~]# tree /tmp/src/
6、总结
(1)本地同步
1、安装rsync

2、rsync -av 源地址 目标地址

3、同步的内容:文件的新增、修改、删除(--delete)、属性(时间、权限)

4、rsync -av /目录/ /tmp 同步目录下的文件

rsync -av /目录 /tmp/ 同步目录

如果源目录不以/结尾,整个目录同步包含目录文件,带/,只同步目录下的文件

5、rsync -avR 保存相对路径 ,其实也就是同步了目录

-R保留目录的相对路径,也会携带目录

(2)远程同步
1、要求两台主机要应该安装rsync服务

2、用法和本地同步相同

rsync -av root@10.0.0.11:/opt/ /tmp 拉取 pull

rsync -av 用户@主机地址:目的地址 源地址

rsync -av /tmp/ root@10.0.0.11:/tmp 推送 push

rsync -av 源地址 用户@主机地址:目的地址

需要输入密码,需要免密,这个需要的密码也是使用ssh服务验证,所以,直接免密设置好了之后就直接支持rsync

(3)同步服务器的设置
1、修改配置文件

vim /etc/rsyncd.conf

[abc]

path=/app/javaproject/

log file=/var/log/rsyncd.log

2、重启rsync服务

systemctl restart rsyncd

3、在另一台主机上拉取rsync服务中的项目

测试是否能够检测到项目 检测到配置的abc

rsync -a root@10.0.0.11::

abc

rsync -av root@10.0.0.11:: /tmp

下午
1、修改项目名称进行拉取
 [root@1 ~]# systemctl start  rsyncd    //启动rsync服务
 [root@1 ~]# systemctl status rsyncd
 [root@1 ~]# vim /etc/rsyncd.conf       //查看项目
 [root@2 ~]# rm -rf /tmp/*              //清空tmp目录
 [root@2 ~]# ls /tmp
 [root@2 ~]# rsync -a root@10.0.0.11::     //查看服务器项目
 app   
 [root@2 ~]# rsync -av root@10.0.0.11::app /tmp/   //拉取服务器项目
 [root@1 ~]# vim /etc/rsyncd.conf     //修改配置文件
 [efg]
 path=/app/studentweb/
 log file=/var/log/rsync.log
 [root@1 ~]# systemctl restart rsyncd   //重启服务
 [root@2 ~]# rsync -av root@10.0.0.11::efg /tmp/   //需要修改名字
 [root@1 ~]# systemctl restart rsyncd //重启服务
2、自动化推送拉取文件
每2分钟自动推送一次代码(使用计划任务每2分钟推送一次任务)

 [root@1 ~]# which rsync    //找到rsync 的which地址
 /usr/bin/rsync
 [root@1 ~]# crontab -e      //编辑计划任务
 */2 * * * * /usr/bin/rsync -av /app/studentweb/ root@10.0.0.20:/tmp/
 [root@2 ~]# rm -rf /tmp/*    //删除tmp目录下的文件
 [root@2 ~]# ls /tmp/         //查看是否自动推送成功
 src
如果文件根本没有修改,就没有必要推送

自动监听文件被修改的行为,再自动推送

编辑计划任务,删除计划任务

 [root@1 ~]# crontab -e
3、为rsyncd服务添加密码
编辑配置文件/etc/rsyncd.conf

添加两个属性

auth users=user0,user1

secrets file=/etc/rsync.secrets

 [root@1 ~]# vim /etc/rsyncd.conf     //配置文件添加两行内容(账号和密码文件的路径)
 [efg]
 path=/app/studentweb/
 log file=/var/log/rsync.log
 auth users=tom,jarry
 secrets file=/etc/rsync.secrets
 [root@1 ~]# vim /etc/rsync.secrets    //创建密码文件编辑rsync密码
 tom:tom
 jarry:jarry
 [root@1 ~]# chmod 600 /etc/rsync.secrets  //给/etc/rsync.secrets添加权限
 [root@2 ~]# rsync -av tom@10.0.0.11::efg  /tmp/
 Password: 
 receiving incremental file list
 ./
 src/
 src/main/
 src/main/java/
 src/main/java/co/
 src/main/java/co/goho/
 src/main/java/co/goho/yuanyu.studentweb/
 src/main/java/co/goho/yuanyu.studentweb/File0.java
 src/main/java/co/goho/yuanyu.studentweb/File1.java
 src/main/java/co/goho/yuanyu.studentweb/File2.java
 src/main/java/co/goho/yuanyu.studentweb/File3.java
 src/main/java/co/goho/yuanyu.studentweb/File4.java
 src/main/java/co/goho/yuanyu.studentweb/File5.java
 src/main/java/co/goho/yuanyu.studentweb/File6.java
 src/main/java/co/goho/yuanyu.studentweb/File7.java
 src/main/java/co/goho/yuanyu.studentweb/File8.java
 src/main/java/co/goho/yuanyu.studentweb/File9.java
 sent 245 bytes  received 784 bytes  158.31 bytes/sec
 total size is 0  speedup is 0.00
4、实现代码实时同步
(1)inotify介绍
inotify 是一个 Linux 内核提供的用于监控文件系统事件的机制。

它允许应用程序监控文件或目录的各种操作,例如创建、修改、删除、移动等。

以下是 inotify 的一些关键特点和用途:

特点:

实时性:能够实时地通知应用程序文件系统的变化。

细粒度监控:可以精确到单个文件或目录的操作级别。

用途:

文件同步工具:比如在多个服务器之间保持文件同步,当源端文件发生变化时,及时同步到目标端。

日志监控:监控日志文件的更新,以便及时处理新的日志内容。

例如,在一个自动化部署系统中,使用 inotify 来监测代码目录的变化,一旦有新的代码提交,自动触发部署流程。又或者在一个文件备份系统中,通过 inotify 来察觉文件的修改,然后及时进行备份操作。

(2)直接安装inotify-tools
监听指定目录,一旦目录发上修改,就执行指定的指令

 [root@1 ~]# yum -y install inotify-tools
inotify 监听

安装后会有两条指令

inotifywait 等待 inotifywatch 一直监视(在/usr/bin下)

 [root@1 ~]# inotifywait -mr /app/
 Setting up watches.  Beware: since -r was given, this may take a while!
 Watches established.
 |
 新开一个窗口
 [root@1 ~]# touch /app/studentweb/nihao.txt
 查看原先窗口

 [root@1 ~]# vim /app/studentweb/nihao.txt 

一旦inotifywait监听到目录中的改变,就直接推送

(2)编写inotify.sh脚本

 [root@1 ~]# which inotifywait 
 /usr/bin/inotifywait
 [root@1 ~]# vim inotify.sh
 #!/bin/bash   //指定编译工具
 /usr/bin/inotifywait -mrq -e  modify,delete,create,attrib,move /app/studentweb | while read events
 do
      rsync -av --delete  /app/studentweb/ root@10.0.0.20:/tmp/
 done
 [root@1 ~]# chmod +x inotify.sh 
 [root@1 ~]# ./inotify.sh 
 |
 新开一终端执行下面命令
 [root@1 ~]# touch /app/studentweb/tiantian.txt
 [root@2 ~]# ls /tmp/
 nihao.txt  src  tiantian.txt
 [root@1 ~]# touch /app/studentweb/fuwocheng.txt
 [root@2 ~]# ls /tmp/
 fuwocheng.txt  nihao.txt  src  tiantian.txt
5、让.sh文件一直执行下去
 [root@1 ~]# nohup ./inotify.sh  &   //放入后台一直运行

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值