2024年7月18日(数据同步rsync)

一、linux系统下数据同步服务RSYNC
1、什么是rsync

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能力更强

1支持增量备份
2数据同步时保持文件的原有属性

二、RSYNC的使用
1、安装rsync

[root@b ~]# rpm -aq | grep rsync
[root@b ~]# yum list | grep rsync 
[root@b ~]# ls /etc/yum.repos.d/
[root@b ~]# yum -y install rsync   安装rsync

2、基本语法

语法:rsync  [选项]  原数据位置   想同步的目录位置

选项说明
-v详细模式输出
-a归档模式,递归的方式传输,并保持文件的属性
-r递归拷贝文件
-l保留软链接
-p

保留原有权限

-t保留原有时间(修改)
-g保留属组权限
-o保留属主权限
-D等于--decives --specials 表示支持b,c,s,p类型的文件
-R保留相对路径
-H保留硬链接
-A保留ACL策略
-e指定要执行的远程shell命令,ssh更改端口常用选项
-E保留可执行权限
-X保留扩展属性信息   a属性

PUSH:推,相当于上传, PULL:拉相当于下载

3、本地文件同步
(1)在家目录中创建文件,将这些文件同步到opt下

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

(2)folder目录下的文件传到opt下

[root@b ~]# rsync -av folder/ /opt/  #加/ 只同步目录下的文件

[root@b ~]# tree /opt/
├── f1
│   ├── file0
│   ├── file1
│   ├── file2
│   ├── file3
│   └── file4
├── f2
├── f3

[root@b ~]# rsync -av folder /opt/   #不加/将目录整体同步

[root@b ~]# tree /opt/

├── folder
│   ├── f1
│   │   ├── file0
│   │   ├── file1
│   │   ├── file2
│   │   ├── file3
│   │   └── file4
│   ├── f2
│   └── f3

[root@b ~]# rsync -avR folder/ /opt/   #-R保留相对路径
[root@b ~]# tree /opt/
|── folder
    ├── f1
    │   ├── file0
    │   ├── file1
    │   ├── file2
    │   ├── file3
    │   └── file4
    ├── f2
    └── f3

(3)现在不同步到opt,就在本地几个目录传

[root@b ~]# rsync -av folder/f1/ folder/f2/    #将f1目录下文件同步到f2目录下

[root@b ~]# touch folder/f1/file5     #新建file5文件  文件的增加会同步

[root@b ~]# rsync -av folder/f1/ folder/f2/   #再次同步

[root@b ~]# rm -rf folder/f1/file0    #删除folder/f1/file0   
[root@b ~]# rsync -av folder/f1/ folder/f2/     #删除之后没有同步

[root@b ~]# rsync -av --delete folder/f1/ folder/f2/   #加--delete之后同步

(4)同步文件内容的修改,文件删除,以及文件得到属性的修改

[root@b ~]# touch folder/f1/file0 -m -d "2024-7-14 00:00"   //修改时间
[root@b ~]# rsync -av --delete folder/f1/ folder/f2/

-rw-r--r-- 1 root root 0 7月  14 00:00 folder/f1/file0
[root@b ~]# chmod g+w folder/f1/file0   //修改权限
-rw-rw-r-- 1 root root 0 7月  14 00:00 folder/f1/file0
[root@b ~]# rsync -av --delete folder/f1/ folder/f2/

4、远程同步

两台主机都支持rsync的服务

 rsync-ac 源用户@主机地址

获取数据pull拉取,发送数据push推送数据

(1)向qqq主机 /tmp目录下同步数据

要求对面主机也要安装rsync

[root@qqq ~]# yum -y install rsync
[root@b ~]# rsync -av folder/ root@192.168.8.142:/tmp/

(2)在qqq主机新建文件,将这个文件同步到b主机的/tmp目录下

[root@ qqq~]# dd if=/dev/zero of=/tmp/lajiwenjain bs=300M count=1

[root@ qqq ~]# ls /tmp/ -lh

[root@qqq ~]# dd if=/dev/zero of=/tmp/lajiwenjain bs=300M count=1

将qqq主机中的内容同步到b主机

[root@b ~]# rsync -av root@192.168.8.142:/tmp/lajiwenjain /tmp/ 
[root@qqq ~]# ls /tmp/
lajiwenjain

[root@qqq ~]# systemctl status rsyncd   #查看rsync服务状态
[root@qqq ~]# systemctl start rsyncd    #启动rsync服务
[root@qqq ~]# netstat -lntup | grep rsync   #查看使用的端口

5、rsync作为系统服务
(1)找到服务的配置文件

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

# uid = nobody    用户编号

# gid = nobody    所属组编号

# use chroot = yes    是否禁锢目录

# max connections = 4    最大连接数

# pid file = /var/run/rsyncd.pid    进程文件,每个服务都有一个PID编号,其来源就是PID文件

# exclude = lost+found/   传输文件时,忽略lost+fiund/目录

# transfer logging = yes    传输日志是否需要写入日志文件,yes表示写入

# timeout = 900     传输超时时间,默认15分钟

# ignore nonreadable = yes    是否忽略不可读文件

# dont compress   = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2   以下格式文件不压缩

(2)新建目录

[root@b ~]# mkdir -p /app/studentweb/src/main/java/co/goho/yuanyu.studentweb/
[root@b ~]# touch /app/studentweb/src/main/java/co/goho/yuanyu.studentweb/File{0..9}.java

(3)把rsync作为系统服务运行

在b主机提供了一个针对app/下的项目的rsync服务,下次访问直接找服务

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

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

[app]
path=/app/studentweb/
log file=/var/log/rsync.log
[root@b studentweb]# systemctl restart rsyncd

[root@qqq ~]# rsync -a root@192.168.8.141::   
app 

[root@qqq ~]# rsync -ac root@192.168.8.141::app /tmp/    #下载文件到本地

(4)自动化推送拉取文件

设置每30秒推送一次代码,编写计划任务,找到rsync的which地址

[root@b ~]# crontab -e

[root@b ~]# which rsync
/usr/bin/rsync


*/1 * * * * /usr/bin/rsync -av /app/studentweb/ root@192.168.8.142:/tmp/

三、课程扩展
1、给rsyncd服务添加密码
(1)在/etc/rsyncd.conf文件添加账户和密码文件的路径

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

(2)创建编辑免密 账户:密码

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

(3)给/etc/rsync.secrets添加权限

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

(4)重启rsyncd服务

[root@b ~]# systemctl restart rsyncd

(5)拉取数据

[root@b ~]#rsync -av zhangsan@192.168.8.142::app /tmp/

2、rsync集合inotify工具实现代码实时同步(重点)
(1)安装inotify-tools

监听指定目录,一旦目录发生修改,就执行指令命令

[root@b ~]# yum -y install inotify-tools

(2)inotify  监听

安装完后,就会产生下面两个命令
/usr/bin/inotifywait     等待
/usr/bin/inotifywatch    看守

[root@b ~]# touch /app/studentweb/nihaowoshiqinshihua.txt   #重新开终端创建文件

[root@b ~]# inotifywait -mr /app/       # 会检测到改变
Setting up watches.  Beware: since -r was given, this may take a while!
Watches established.
/app/studentweb/ CREATE nihaowoshiqinshihua.txt
/app/studentweb/ OPEN nihaowoshiqinshihua.txt
/app/studentweb/ ATTRIB nihaowoshiqinshihua.txt
/app/studentweb/ CLOSE_WRITE,CLOSE nihaowoshiqinshihua.txt
一旦inotifywait监听到目录中的改变就直接推送

(3)编写脚本

[root@b ~]# vim initifytest.sh

选项说明
-m一直监听某个目录,create,delete,modify等行为
-r递归,不仅仅监控目录还要监控目录下的文件
-q获取操作信息,但是不输出
-e哪些行为需要被监控,modify,delete,create,attrib,move
modify文件被修改
delete文件被删除
create文件被创建
attrib文件属性被修改
move文件被移动
(4)添加可执行权限 

[root@b ~]# chmod 700 initifytest.sh    #添加可执行权限

[root@b ~]# touch /app/studentweb/今天星期四     #另一个终端创建文件
[root@b ~]# ./initifytest.sh  #执行脚本,会监听到

(4)让 intifytest.sh文件一直执行下去

[root@b ~]# nohup ./initifytest.sh &


&:让inotify.sh在计算机后台运行,可以使用jobs命令查看,kill %编号结束,当我们退出终端时,这个执行会自动结束
nohup:让程序一直在后台运行,即使我们关闭了终端

(5) 查看rsync.log日志文件

[root@b ~]# cat /var/log/rsync.log 

  • 27
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值