同步服务rsync的使用及rsync集合inotify工具实现代码实时同步

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值