Day 08
同步服务rsync的使用
1、rsync和scp的区别:
两者都可以实现远程同步,但相对而言,rsync能力更强,支持增量备份,数据
同步时保持文件原有的属性,而scp同步所有数据。
2、同步过程:
sync数据同步==>保存文件==>立即保存(强制吧缓存中的数据写入磁盘),实时
性要求高。
async数据同步==>保存文件==>将数据先放到缓冲区,然后周期性(一般为30s)
的去同步到磁盘,适合大批量数据同步。
3、rsync特点:
可以镜像保存整个目录树和文件系统;传输效率高;可以保存原有的权限。
4、基本语法: # rsync [选项]
[root@lx ~]# which rsync
/usr/bin/rsync
[root@lx ~]# find /usr -name rsync
选项说明:
-v 视图展示,详细模式输出
-a 归档模式,递归方式传输文件 -R 保留相对路径
5、本地文件同步:
# 将folder目录下的文件同步到/opt
[root@lx ~]# mkdir folder
[root@lx ~]# mkdir folder/f{1..3}
[root@lx ~]# tree folder/
folder/
├── f1
├── f2
└── f3
[root@lx ~]# touch folder/f1/file{0..4}
[root@lx ~]# tree folder/
folder/
├── f1
│ ├── file0
│ ├── file1
│ ├── file2
│ ├── file3
│ └── file4
├── f2
└── f3
[root@lx ~]# rsync -av folder/ /opt/
sending incremental file list
./
f1/
f1/file0
f1/file1
f1/file2
f1/file3
f1/file4
f2/
f3
sent 397 bytes received 130 bytes 1,054.00 bytes/sec
[root@lx ~]# ls /opt/
f3 f1 f2
[root@lx ~]# rsync -avR folder/ /opt/
folder/
# 文件的新增、删除会被同步
[root@lx ~]# rsync -av folder/f1/ folder/f2/
[root@lx ~]# touch folder/f1/file5
[root@lx ~]# rsync -av folder/f1/ folder/f2/ # 只传file5
sending incremental file list
./
file5
[root@lx ~]# rm -rf folder/f1/file0
[root@lx ~]# rsync -av --delete folder/f1/ folder/f2/
# 文件的修改会被同步
[root@lx ~]# vim folder/f1/file1
[root@lx ~]# cat folder/f1/file1
Hello World!
[root@lx ~]# rsync -av folder/f1/ folder/f2/
[root@lx ~]# cat folder/f2/file1
Hello World!
# 文件属性的修改会被同步
[root@lx ~]# touch folder/f1/file0 -m -d "2024-7-13 00:00"
[root@lx ~]# rsync -av folder/f1/ folder/f2/
[root@lx ~]# ls -l folder/f1/file0
-rw-r--r--. 1 root root 0 7月 13 00:00 folder/f1/file0
[root@lx ~]# chmod g+w folder/f1/file0
[root@lx ~]# ls -l folder/f1/file0
[root@lx ~]# rsync -av folder/f1/ folder/f2/
[root@lx ~]# ls -l folder/f2/file0
-rw-rw-r--. 1 root root 0 7月 13 00:00 folder/f2/file0
[root@lx ~]#rsync -av folder/ root@192.168.2.167:/tmp/ # 本地文件的同步
[root@lx ~]#ls -l /tmp
6、远程文件同步
# 语法:rsync -av 源 目标地址
# 要求两台主机也要安装rsync,如果源目录不以/结尾,整个目录同步包含目录
文件,带/,只同步目录下的文件
# push:上传文件到远程服务器端
格式:rsync -av 本地文件或目录 远程用户名@远程服务器的IP地址:目标
路径
[root@lx ~]#rsync -av linux.txt root@192.168.2.167:/opt # 把linux.txt文档传输
到远程服务器端
# pull:下载文件到本地服务端
格式: rsync -av 远程用户名@远程服务器的IP:目标文件或目录 本地存储位置
[root@lx ~]#rsync -av root@192.168.2.166:/shop ./ # 把远程服务器的/shop⽂
件夹下载到本地
[root@lx ~]#rsync -av root@192.168.2.167:/tmp/lajiwenjain /tmp
[root@cz ~]#ssh-keygen
[root@cz ~]#ssh-copy-id root@192.168.2.166 # 实现免密登录
[root@lx ~]# systemctl status rsyncd
[root@lx ~]# systemctl restart rsyncd
[root@lx ~]# ss -lntup|grep rsync # 查看端口
tcp LISTEN 0 5 *:873 *:* users:(("rsync",pid=6611,fd=4))
同步服务器的设置
# 主机lx
1、启动服务,创建目录:
[root@lx ~]# systemctl start rsync
[root@lx ~]# mkdir -p /app/studentweb
[root@lx ~]# touch
/app/studentweb/File{0..9}.java
2、修改主配置文件,把rsync作为系统服务运行
[root@lx ~]# vim /etc/rsyncd.conf
[app]
path=/app/studentweb/
log file=/var/log/rsync.log # 日志文件
[root@lx studentweb]# systemctl restart rsyncd
3、创建备份目录
[root@cz ~]# dd of=/dev/zeor if=/tmp/src bs=300M count=1
[root@cz ~]# ls -l /tmp
[root@cz ~]# tree /tmp/src
3、重启服务:
[root@lx ~]# systemctl start rsync
# 主机cz,进行测试
[root@cz ~]#rm -rf /tmp/*
[root@cz ~]#ss -lntpu | grep 873 # 检查rsync服务是否启动,可看出备份服务器
不需要启动rsync服务
[root@cz ~]# rsync -a root@192.168.2.166::app /tmp/ # -a:获取rsync服务对应
的同步目录标签,/tmp/src为备份目录
[root@cz ~]# rsync -av root@192.168.2.166::app /tmp/ # 下载文件到本地,拉取
(pull)rsync服务中的项目,测试是否能检测到配置中的app
[root@cz ~]#ls /tmp
src
再次测试,在lx主机上将[app]修改为[efg],然后在cz主机上再次拉取, rsync -av
root@192.168.2.166::efg /tmp/
# 设置每30s推送一次(如果文件根本没有修改,没必要进行推送)
[root@lx ~]# crontab -e
*/30 * * * * /usr/bin/rsync -av /app/studentweb root@192.168.2.167:/tmp/ # 上
传到远程服务器192.168.2.167
[root@cz ~]#rm -rf /tmp/*
[root@cz ~]#ls /tmp/
src
rsyncd服务添加密码
1、修改配置文件
[root@lx ~]# vim /etc/rsyncd.conf
auth users=tom,jerry # 添加2个属性
secrets file=/etc/rsync.secrets
2、编辑rsync密码 格式为账号:密码
[root@lx ~]# vim /etc/rsync.secrets
[root@lx ~]# cat /etc/rsync.secrets
tom:tom
jerry:jerry
3、给/etc/rsync.secrets添加权限
[root@lx ~]# chmod 600 /etc/rsync.secrets
[root@lx ~]# ls -l /etc/rsync.secrets
-rw-r--r--. 1 root root 20 7月 18 15:10 /etc/rsync.secrets
[root@lx ~]# systemctl restart rsyncd
4、测试
[root@ly ~]# rsync -av tom@192.168.2.166::efg /tmp
rsync集合inotify工具实现代码实时同步(重点)
1、安装监听工具inotify-tools
# 作用:监听指定目录,一旦目录发生修改就执行指定指令
[root@lx ~]# yum -y install inotify-tools
# 安装完产生两个指令 inotifywait 等待 inotifywatch 看守
/usr/local/bin/inotifywait
-m:一直监控某个目录 -r:递归
[root@lx ~]# ls /app/
studentweb
[root@lx ~]# touch /app/studentweb/niha.txt
[root@lx ~]# vim /app/studentweb/niha.txt
2、编写脚本:
[root@lx ~]# which inotifywait
/usr/bin/inotifywait
[root@lx ~]# vim inotify.sh
#!/bin/bash
inotifywait -mrq -e modify,delete,create,attrib,move
/app/studentweb|while read events
do
rsync -av /app/studentweb/ root@192.168.2.167:/tmp
echo "'date +%F\ %T'出现事件$events" >> /var/log/rsync.log 2>&1
done
[root@lx ~]# chmod +x inotify.sh # 给脚本增加可执行权限
3、让inotify.sh文件一直执行下去
[root@lx ~]# nohup ./inotify.sh &
# nohup表示即使关掉终端也能继续监测 &表示inotify.sh在后台运行,可以使
用jobs命令查看,kill % 编号结束,当退出终端时这个执行自动结束
[1] 19350
4、测试:
[root@cz ~]#rm -rf /tmp/*
5、扩展:如何查看rsync.log日志
[root@lx ~]# cat /var/log/rsync.log