目录
一、rsync概述
1.什么是rsync
● sync同步:刷新文件系统缓存,强制将修改过的数据块写入磁盘,并且更新超级块。
保存目标文件 => 强制把缓存中的数据写入磁盘(立即保存)
适应于实时性比较高的场景
● async异步:将数据先放到缓存区,再周期性(一般是30s)的去同步到磁盘。
保存目标文件 => 将数据放到缓冲区,再周期性同步到磁盘
适用于大批量数据同步场景
● rsync远程同步:(路由)==remote synchronous==
2.rsync的特点
● 可以镜像保存整个目录树和文件系统
● 可以保留原有的权限(permission,mode),owner,group,时间(修改时间,modify time),软硬
链接,文件acl,文件属性(attributes)信息等
● 传输效率高
● 支持匿名传输,方便网站镜像;也可以做验证,加强安全
3.rsync与scp的区别
两者都可以实现远程同步,但是相比而言,rsync能⼒更强
① 支持增量备份
② 数据同步时保持文件的原有属性
二、rsync的使用
基本语法:rsync -[选项] 文件原位置 文件要同步的位置
1.安装rsync
yum -y install rsync
2.本地文件同步
案例1:在家目录中创建一些文件,将文件同步到opt下
第一步:在家目录创建文件
mkdir folder/f{1..3} #创建三个目录 tree folder/ #可提前安装好tree,命令:yum -y install tree
touch folder/f1/file{0..4} #在f1目录下创建5个文件
第二步:将folder目录下的文件传到opt
rsync -av folder/ /opt/
使用tree查看/opt/目录,可以看到文件是传过去了的
第三步:将folder整个目录传过去
rsync -av folder /opt/
案例2:rsync -R选项的应⽤(保留相对路径)
#为了方便,可将/opt/目录下的文件删除(有重要文件谨慎删除) rm -rf /opt/* ls -l /opt/ #使用-R选项 rsync -avR folder/ /opt/
案例3:rsync --delete(删除目标录⾥多余的文件)
rm -rf folder/f1/file0 tree folder/
rsync -av --delete folder/f1/ folder/f2/ #将f1下删除的文件同步到f2
案例4:实现向文件中增加内容、修改文件属性的同步
在f1下的file1文件中增加内容“哈喽哈喽~大家好!”,查看file1文件内容,同时查看f2下的file1文件里面并没有任何内容
vim folder/f1/file1 cat folder/f1/file1 cat folder/f2/file1
同步两个文件,并查看发现f2的file1文件也出现内容“哈喽哈喽~大家好!”
rsync -av --delete folder/f1/ folder/f2/
touch folder/f1/fil0 -m -d "2024-7-14 00:00" #创建一个文件 rsync -av --delete folder/f1/ folder/f2/ touch folder/f1/fil0 -m -d "2024-7-13 00:00" #修改时间 rsync -av --delete folder/f1/ folder/f2/
chmod g+w folder/f1/fil0 #增加值为2的w写权限 rsync -av --delete folder/f1/ folder/f2/ ls -l folder/f2/fil0
3.远程文件同步
需要两台主机,都必须安装rsync(yum -y install rsync)
主机1向主机2的/tmp/同步
rsync -av folder/ root@192.168.1.20:/tmp/
主机2查看:
免密传输:主机1创建一个300M的文件
dd if=/dev/zero of=/tmp/lajiwenjian bs=300M count=1
生成密钥
ssh-copy-id root@192.168.1.20
主机2:
rsync -av root@192.168.1.21:/tmp/lajiwenjian /tmp/
4.同步服务器设置
1.查看rsync服务状态,发现是关闭的
systemctl status rsyncd
2.开启rsync服务
systemctl start rsyncd
3.查看服务是否开启,发现使用了873端口
netstat -lntup | grep rsync
4.找到服务的配置文件
find / -name "rsync*conf"
配置文件说明:
5.创建多级目录文件,修改/etc/rsyncd.conf文件
mkdir -p /app/studentweb/src/main/java/co/goho/qingtang.studentweb/ tree /app/ cd /app/studentweb vim /etc/rsyncd.conf
6.重启rsyncd服务
systemctl restart rsyncd
在另一个主机测试:
rsync -a root@192.168.1.21::
rsync -ac root@192.168.1.21::app /tmp/
使用tree查看
5.自动化推送拉取文件
使用计划任务,每一分钟推送一次
crontab -e
三、rsync扩展
1.为rsync服务添加密码
编辑vim /etc/rsyncd.conf,添加账号和密码文件的路径
vim /etc/rsyncd.conf
创建编辑密码,账号:密码
vim /etc/rsync.secrets
给/etc/secrets文件添加权限,600权限
重启rsyncd服务
systemctl restart rsyncd
另一台主机:
rsync -av jerry@192.168.1.21::app /tmp/
2.rsync结合inotify工具实现代码实时同步
1.直接安装inotify-tools
监听指定目录,一旦目录发生修改,就执行指定的指令
yum -y install inotify-tools
inotify作用就是监听,安装完之后会有以下两个命令
inotifywait 等待
inotifywatch 看守
选项含义:
监控/app/目录
inotifywait -mr /app/
一旦inotify监听到目录中的改变,就直接推送
2.编写脚本
vim inotifytest.sh
3.修改权限
chmod 700 inotifytest.sh
4.执行inotifytest.sh文件
[root@localhost ~]# ./inotifytest.sh sh
5.再开一个终端,在/app/studentweb/目录下创建文件
vim /app/studentweb/hh.txt #里面随便写点东西,保存退出
返回监控端查看,是会有目录改变的推送