实训第九天(rsync同步与inotify监控)

Morning

[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地址:详细地址

一、ssh回顾
1.安装
openssh 开源

openssh-server 、openssh-client

启动 systemctl start ssh

设置开机自启 systemctl enable ssh

由于需要修改sshd端口,停用seline服务

setenforce 0

关闭防火墙 firewall-cmd --zone=public --add-port=9999/tcp

systemctl stop firewalld

systemctl disable fireallds 设置开机不自启

对称和非对称加密

des 信息传输的双方是用一个密钥

rsa 公钥和私钥两套加密算法

使用ssh远程管理
​ 1.账号密码方式

​ ssh -l用户名 -p端口号 域名/ip

​ ssh -p端口 用户@ip

​ 如果端口默认22,不需要添加p选项

​ ssh 用户@ip

​ 修改ssh服务端口,不允许root远程登录

​ vim /etc/ssh/sshd_conf

​ //38 root

​ // 17 端口

​ root无法远程登录,需要其他的用户和权限

​ useradd zhansan

​ passwd zhansan

​ useradd lisi

​ passwd lisi

​ zhansan、lisi都可以w 目录code

​ mkdir /code

​ groupadd code

​ chgrp -R code /code. //修改目录code的所属的组为code组

​ 为用户添加w权限

​ chmod -R g+w /code

​ 2.密钥对
​ 1.选择一个账户 zhansan、 su zhansan
​ 2.生成公钥和私钥 ssh-keygen
​ 3.~/.ssh/
​ id_rsa 私钥

​ id_rsa.pub 公钥

​ 将公钥中字符串追加到对应主机的对应用户的家目录的~/.ssh/authorized_key

​ 公钥可以复制字符串,私钥绑定

3.ssh-copy-id -p9999 用户@ip

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    //查看是否同步成功

 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     //查看同步效果

 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/

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/

Afternoon

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     //配置文件添加两行内容(账号和密码文件的路径)

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

(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
————————————————

                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
                        
原文链接:https://blog.csdn.net/weixin_70693880/article/details/140528698

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值