rsync同步+inotify监控+实现自动同步(2024.7.18)

回顾:

对称加密和非对称加密

使用ssh远程管理

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

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

     Id_rsa           私钥

     Id_rsa.pub        公钥

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

  

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

Linux系统下数据同步服务RSYNC

一、RSYNC概述

1.什么是rsync

2.rsync特点

3.rsync与scp的区别

yum -y install rsync

二、RSYNC的使用

1.基本语法

PUSH:推,相当于上传;PULL:拉,相当于下载
2.本地文件同步
本地⽂件同步简单理解就是把⽂件从⼀个位置(同步=>拷⻉)到另外⼀个位置(类似cp)
案例:/dir1、/dir2与/dir3,/dir1中创建三个⽂件file1、file2、file3,使⽤rsync本地同步
案例:rsync -R选项的应⽤(保留相对路径)
案例:rsync --delete(删除⽬标⽬录⾥多余的⽂件)
/dir1 ===  /dir2
file1、file2          file1、file2、file3
rsync --delete同步后,会⾃动删除file3⽂件。(让dir1与dir2⽬录中的⽂件⾼度⼀致)
3、远程⽂件同步
要实现时远程同步,要求两台主机都应该安装rsync
Push:上传⽂件到远程服务器端
案例:把linux.txt⽂档传输到远程服务器端(10.1.1.100)
案例:把shop⽂件夹传输到远程服务器端(10.1.1.100)
Pull:下载⽂件到本地服务器端
案例:把远程服务器(10.1.1.100)的/etc/hosts⽂件下载到本地
案例:把远程服务器(10.1.1.100)的/shop⽂件夹下载到本地
思考:
问题1:rsync远程同步数据时,默认情况下为什么需要密码?如果不想要密码同步怎么实现?
rsync在远程同步时,之所以要输⼊密码的主要原因在于其底层还是基于SSH服务的。SSH有
两种认证⽅式,如果没有配置免密则默认使⽤⽤户名+密码的认证⽅式。
不想要密码同步,可以考虑使⽤SSH免密操作。
Code => Backup
Code:
1.本地同步
1.安装rsync
2.Rsync -av 源 ⽬标地址
3.如果源⽬录不以/结尾,整个⽬录同步包含⽬录⽂件,带斜杠,只同步⽬录下的⽂件
4.-R保留⽬录的相对路径,也会携带⽬录
5.同步的内容 ⽂件的新增 修改,删除(--delete) 属性(时间,权限)
2.远程同步
1.2台主机都⽀持rsync的服务
4、rsync作为系统服务
默认情况下,rsync只是作为⼀个命令来进⾏使⽤的(ps在查询进程时,找不到对应的服
务),但是rsync提供了⼀种作为系统服务的实现⽅式。
Linux系统服务的思路:
对外提供服务——>端⼝监听——>==启动服务==——>启动脚本——>配置⽂件
第⼀步:启动rsyncd服务(CentOS6中没有,CentOS7中有这个服务)
如果企业中使⽤到操作系统为CentOS6版本,则没有启动脚本。必须求帮助:
注:如果rsync作为系统服务单独运⾏,则其底层就不需要SSH服务了!
第⼆步:rsyncd服务的配置⽂件/etc/rsyncd.conf
监控:
第⼀步:关闭防⽕墙与SELinux
==Code:10.1.1.10服务器==
第二步:准备代码⽂件
第三步:把rsync作为系统服务运⾏
==Backup:10.1.1.100==
第四步:创建备份⽬录
第五步:测试rsync是否可以连接到rsync服务
下载⽂件到本地
第六步:编写计划任务 + Shell的脚本⽂件,⾃动实现代码备份
① 编写计划任务
② 编写rsync_java.sh脚本程序
3、任务总结
Code代码服务器 => 10.1.1.10
/app/java_project
Backup备份服务器 => 10.1.1.100
Code:
① 准备代码
② 编写/etc/rsyncd.conf⽂件,定义同步代码⽬录
③ 启动rsyncd服务
Backup:
① 测试rsync是否可以连接到Code服务器上的rsyncd服务
② 创建备份⽬录
③ 编写计划任务,凌晨1点03去Code服务器同步代码
④ 编写rsync_java.sh⽂件,实现同步操作
rsycn
安装
Yum -y install rsync
Rsync 【选项】源⽂件 ⽬标⽬录
1.本地同步
rsync -av ~/abc/ /opt/
同步⽂件的内容,⽂件的属性 ⽂件的新增 修改 删除(--delete)
rsync -av /⽬录 /tmp。# 同步⽬录下的⽂件
rsync -av /⽬录/ /tmp/ #同步⽬录
rsyn c -avR 保存相对路径,其实也就是同步了⽬录
2.远程同步
要求两台主机要应该安装rsync服务
⽤法和本地同步相同
rsync -av root@192.168.71.135:/opt/ /tmp/ 拉取 pull
rsync -av /tmp/ root@192.168.71.135:/tmp. push 推送
需要输⼊密码,需要免密,这个需要的密码也是使⽤sssh服务验证,所以,直接ssh免密
设置好之后就直接⽀持rsync
3.同步服务器的设置
启动服务
systemctl start rsyncd
修改配置⽂件
vim /etc/rsyncd.conf
[abc]
path=/app/javaproject/
Log file=/var/log/rsync.log
重启rsync服务
systemctl restart rsyncd
在另⼀台主机上拉取rsync服务中的项⽬
测试是否能够检测到项⽬ 检测到配置的abc
rsync -a root@192.168.71.135::
abc
Rsync -av 源  ⽬标⽬录

三、RSYNC课程扩展

1、给RSYNC服务添加密码
Code服务器:
① 打开/etc/rsyncd.conf配置⽂件
② 在/etc⽬录下创建rsyncd.secrets⽂件
③ 更改密码⽂件权限为600
④ 重启rsyncd服务
Backup备份服务器:
2、RSYNC集合INOTIFY⼯具实现代码实时同步(重点)
第⼀步:直接安装inotify-tools
yum -y install inotify-tools
监听指定⽬录,⼀旦⽬录发上修改,就执⾏指定的指令
第⼆步:编写inotify.sh
/usr/local/bin/inotifywait -mrq -e modify,delete,create,attrib,move
第三步:添加可执⾏权限
第四步:让inotify.sh⽂件⼀直执⾏下去
扩展:如何查看rsync.log⽇志⽂件

四、练习

监听+同步

[root@y ~]#mkdir -p /app/studentweb/src/main/java/co/goho/yuanyu.studentweb/

监听+同步(自动化的同步)

将y上监听到的内容同步到x服务器上

在y虚拟机上写监听脚本,

[root@y ~]# vim inotifytest.sh

修改权限:

[root@y ~]# chmod +x inotifytest.sh

执行脚本:

[root@y ~]# ./inotifytest.sh

在另一个y终端创建目录

[root@y ~]# touch /app/studentweb/lalalala.txt

[root@y ~]# touch /app/studentweb/xxx.txt

您在 /var/spool/mail/root 中有新邮件

原来执行脚本的终端就会监听到:

[root@y ~]# ./inotifytest.sh

sending incremental file list

./

lalalala.txt

sent 626 bytes  received 44 bytes  1,340.00 bytes/sec

total size is 0  speedup is 0.00

sending incremental file list

sent 580 bytes  received 18 bytes  398.67 bytes/sec

total size is 0  speedup is 0.00

sending incremental file list

./

xxx.txt

sent 647 bytes  received 44 bytes  1,382.00 bytes/sec

total size is 0  speedup is 0.00

sending incremental file list

sent 601 bytes  received 18 bytes  412.67 bytes/sec

total size is 0  speedup is 0.00

而且会把在y上监听到的内容同步到x服务器上

[root@x ~]# ls /tmp/

1.txt  hahaha        src                   xxx.txt  俯卧撑1

2.txt  lalalala.txt  woshiqinshihuang.txt  俯卧撑   做俯卧撑

y服务器:

[root@y ~]# vim /etc/rsyncd.conf

[root@y ~]# systemctl restart rsyncd

在另一台上就找不到了

[root@x ~]# rsync -av root@192.168.2.8::app /tmp/

@ERROR: Unknown module 'app'

rsync error: error starting client-server protocol (code 5) at main.c(1656) [Receiver=3.1.2]

换掉配置文件[  ]里的内容,找到时候也要改

[root@x ~]# rsync -av root@192.168.2.8::efg /tmp/

receiving incremental file list

sent 26 bytes  received 371 bytes  794.00 bytes/sec

total size is 0  speedup is 0.00

[root@y ~]# vim /etc/rsyncd.conf

[root@y ~]# vim /etc/rsync.secrets

您在 /var/spool/mail/root 中有新邮件

[root@y ~]# #以上是编辑rsync密码

[root@y ~]# cat  /etc/rsync.secrets

tom:tom

Jerry:jerry

[root@y ~]# chmod 600 /etc/rsync.secrets

您在 /var/spool/mail/root 中有新邮件

[root@y ~]# systemctl restart rsyncd

在x虚拟机上操作:

[root@x ~]# rsync -av tom@192.168.2.8::efg /tmp/

Password:

receiving incremental file list

sent 26 bytes  received 371 bytes  7.15 bytes/sec

total size is 0  speedup is 0.00

[root@x ~]#

[root@y ~]##安装监听工具
[root@y ~]# yum -y install inotify-tools

[root@y ~]# inotifywait -mr /app/

在另一个终端创建目录

[root@y studentweb]# touch /app/studentweb/woshiqinshihuang.txt

这个终端就会被监听到

[root@y ~]# cd /app/studentweb/

[root@y studentweb]# vim /etc/rsyncd.conf

[root@y studentweb]# systemctl restart rsyncd

[root@y studentweb]# #在y主机提供了一个针对app/下的项目rsync服务

[root@y studentweb]# #下次直接找服务

在另一台x上就可以找到

[root@x ~]# rsync -a root@192.168.2.8::

app            

[root@x ~]#

将y服务器上的app传到 /tmp/

[root@x ~]# rsync -av root@192.168.2.8::app /tmp/

receiving incremental file list

sent 26 bytes  received 371 bytes  37.81 bytes/sec

total size is 0  speedup is 0.00

[root@x ~]# ls -l /tmp/

总用量 307200

-rw-r--r--. 1 root root 314572800 7月  18 11:04 lajiwenjian

drwxr-xr-x. 3 root root        18 7月  18 11:28 src

drwx------. 3 root root        17 7月  11 16:47 systemd-private-7cb5d2e1e883490fbbe7a00fb8e02dcc-chronyd.service-wqYt5p

drwx------. 3 root root        17 7月  18 08:59 systemd-private-8eee7dca29cf4b1293598aa8fe8d1204-chronyd.service-d8mczV

drwx------. 3 root root        17 7月  17 21:52 systemd-private-c4f4a366efb3426cb039559604189a10-chronyd.service-i0Crts

drwx------. 3 root root        17 7月  17 17:53 systemd-private-f23ce88bb27c46af9c16c48053b6c562-chronyd.service-wZ6TpV

drwx------. 2 root root         6 7月  12 22:02 vmware-root

[root@x ~]# tree /tmp/src/

/tmp/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

5 directories, 10 files

[root@x ~]#

[root@y ~]#  mkdir folder
[root@y ~]# mkdir folder/f{1..3}
[root@y ~]# touch folder/f1/file{0..4}
[root@y ~]# tree folder/
folder/
├── f1
│   ├── file0
│   ├── file1
│   ├── file2
│   ├── file3
│   ├── file4
│   └── file5
├── f2
│   ├── file0
│   ├── file1
│   ├── file2
│   ├── file3
│   ├── file4
│   └── file5
└── f3

3 directories, 12 files
[root@y ~]# rsync  -av folder/ /opt/
sending incremental file list
./
f1/
f1/file0
f1/file1
f1/file2
f1/file3
f1/file4
f1/file5
f2/
f2/file0
f2/file1
f2/file2
f2/file3
f2/file4
f2/file5
f3/

sent 833 bytes  received 263 bytes  2,192.00 bytes/sec
total size is 26  speedup is 0.02
[root@y ~]# ls /opt/
f1  f2  f3  folder
[root@y ~]# rm -rf folder/f1/file5
[root@y ~]# rm -rf folder/f2/file5
[root@y ~]# touch folder/f1/file5
[root@y ~]# tree folder/
folder/
├── f1
│   ├── file0
│   ├── file1
│   ├── file2
│   ├── file3
│   ├── file4
│   └── file5
├── f2
│   ├── file0
│   ├── file1
│   ├── file2
│   ├── file3
│   └── file4
└── f3

3 directories, 11 files
[root@y ~]# rsync -av folder/f1/ folder/f2/
sending incremental file list
./
file0
file1
file2
file3
file4
file5

sent 399 bytes  received 133 bytes  1,064.00 bytes/sec
total size is 13  speedup is 0.02
[root@y ~]# tree folder/
folder/
├── f1
│   ├── file0
│   ├── file1
│   ├── file2
│   ├── file3
│   ├── file4
│   └── file5
├── f2
│   ├── file0
│   ├── file1
│   ├── file2
│   ├── file3
│   ├── file4
│   └── file5
└── f3

3 directories, 12 files
您在 /var/spool/mail/root 中有新邮件
[root@y ~]# vim folder/f1/file1
[root@y ~]# vim folder/f1/file5
[root@y ~]# cat folder/f1/file5
大家好,haha!
[root@y ~]# rsync -av --delete folder/f1/ folder/f2/
sending incremental file list
./
file1
file5

sent 269 bytes  received 57 bytes  652.00 bytes/sec
total size is 33  speedup is 0.10
[root@y ~]# cat folder/f2/file5
大家好,haha!
[root@y ~]# #文件的修改也会被rsync同步
[root@y ~]# touch folder/f1/file0 -m -d "2024-7-14 00:00"
您在 /var/spool/mail/root 中有新邮件
[root@y ~]# touch folder/f1/file5 -m -d "2024-7-14 00:00"
[root@y ~]# rsync -av --delete folder/f1/ folder/f2/
sending incremental file list
file0
file5

sent 242 bytes  received 54 bytes  592.00 bytes/sec
total size is 33  speedup is 0.11
[root@y ~]# rsync -av  folder/f1/ folder/f2/
sending incremental file list

sent 136 bytes  received 12 bytes  296.00 bytes/sec
total size is 33  speedup is 0.22
[root@y ~]# ls -l folder/f1/file0
-rw-rw-r--. 1 root root 0 7月  14 00:00 folder/f1/file0
您在 /var/spool/mail/root 中有新邮件
[root@y ~]# ls -l folder/f1/file5
-rw-r--r--. 1 root root 20 7月  14 00:00 folder/f1/file5
[root@y ~]# ls -l folder/f2/file5
-rw-r--r--. 1 root root 20 7月  14 00:00 folder/f2/file5
[root@y ~]# ls -l folder/f2/file0
-rw-rw-r--. 1 root root 0 7月  14 00:00 folder/f2/file0
[root@y ~]#  #同步文件内容的修改,文件的删除,以及文件的属性的修改
[root@y ~]# #向x主机 /tmp目录同步数据
您在 /var/spool/mail/root 中有新邮件

[root@x ~]# touch /tmp/eee

设置免密:

[root@y ~]#ssh-keygen
[root@y ~]#ssh-copy-id root@192.168.2.10

[root@y ~]# rsync -av root@192.168.2.10:/tmp/eee /tmp/
receiving incremental file list
eee

sent 43 bytes  received 85 bytes  85.33 bytes/sec
total size is 0  speedup is 0.00
您在 /var/spool/mail/root 中有新邮件

[root@y ~]# ls /tmp/
eee
ks-script-8KMvxT
lajiwenjian
oooo
systemd-private-34cf21bb97ce4258b2ad6f261c29f842-chronyd.service-Jpxj7b
systemd-private-72d7a7be1f6746c08706d47c36815319-chronyd.service-MIA8k8
systemd-private-ee8aa827bec9402e9a9014258571b7a5-chronyd.service-p2nKEp
vmware-root
yum.log
yum_save_tx.2024-07-17.11-51.GxecEy.yumtx

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值