Linux系统下配置rsync

Linux系统下数据同步服务RSYNC

1.RSYNC概述
  什么是rsync?
    rsync 是一个广泛使用的、功能强大的文件传输工具,它可以在本地或通过网络在不同的系统之间同步文件和目录。rsync 的主要特点是它的增量传输能力,即它只传输自上次传输以来已更改的部分,而不是每次都传输整个文件或目录。这使得 rsync 成为备份和镜像以及远程文件同步的理想选择,尤其是在处理大量数据或带宽受限的环境中。

sync同步:刷新文件系统缓存,强制将修改的数据写入磁盘,并且更新超级快。
async异步:将数据先放到缓存区,再周期性(一般是30s)的去同步到磁盘。
rsync远程同步: ==remote synchronous==

数据同步过程
sync数据同步 => 保存文件(目标)=> 强制把缓存中的数据写入磁盘(立即保存),实时性要求比较高的场景

asyn数据异步 => 保存文件(目标) => 将数据先放到缓冲区,在周期性(一般是30s)的去同步到磁盘,保存大批量数据同步的场景

2.rsync特点
(1)可以镜像保存整个目录树和文件系统
(2)可以保留原有的权限(permission,mode),owner,group,时间(修改时间,modify,time),软硬链接,文件acl,文件属性(attributes)信息等
(3)传输==效率高==,使用同步算法,只比较变化的(增量备份)
        file1.txt file2.txt file3.txt(A服务器)
        rsync实现数据同步          =>           只同步file3.txt  =>   增量备份
        file1.txt  file2.txt (B服务器)
(4)支持匿名传输,方便网站镜像;也可以做验证,加强安全。

3.rsync与scp的区别

两周都可以实现远程同步,但是相对比而言,rsync能力更强。
(1)支持增量备份

查看rsync是否存在
[root@gym ~]# rpm -aq|grep rsync
[root@gym ~]# yum list installed |grep rsync
下载rsync
[root@gym ~]# yum -y install rsync
寻找启动项
[root@gym ~]# which rsync
/usr/bin/rsync
[root@gym ~]# find / -name "*rsync*"
选项说明
-v 详细模式输出
-a 古荡模式,地柜的方式传输文件,并保持文件的属性
-r 递归拷贝目录
-l  保留软连接
-p  保留原有权限
-t  保留原有时间(修改)
-g  保留属组权限
-o  保留属主权限
-D  等于--devices  --specild

– rsync [选项...] 本地目录1   本地目录2    //同步整个文件夹    
– rsync [选项...] 本地目录1/  本地目录2    //只同步目录下的数据


2.本地文件同步
在家目录中创建文件,将文件同步到opt下
[root@gym ~]# mkdir folder
[root@gym ~]# mkdir folder/f{1..3}
[root@gym ~]# tree folder/
folder/
├── f1
├── f2
└── f3

3 directories, 0 files
[root@gym ~]# touch folder/f1/file{0..4}
[root@gym ~]# tree folder/f1/
folder/f1/
├── file0
├── file1
├── file2
├── file3
└── file4

0 directories, 5 files

将folder目录下的文件传递到opt目录下
[root@gym ~]# rsync -av folder/ /opt/
[root@gym ~]# ls /opt/
f1  f2  f3  test  test0
[root@gym ~]# tree /opt/
/opt/
├── f1
│   ├── file0
│   ├── file1
│   ├── file2
│   ├── file3
│   └── file4
├── f2
├── f3
[root@gym ~]# rsync -avR folder/ /opt/        +R要保留相对路径,会全部传输过去
现在不传递到opt目录,就在本地几个目录当中传递
[root@gym ~]# rsync -av folder/f1/ folder/f2/    将f1文件传输到f2中
再次创建文件夹
[root@gym ~]# touch folder/f1/file5
[root@gym ~]# rsync -av folder/f1/ folder/f2/
sending incremental file list
./
file5
只传输file5,自己回递归
[root@gym ~]# rm -rf folder/f1/file0
[root@gym ~]# rsync -av --delete folder/f1/ folder/f2/      保持文件高度一致
修改文件  (文件的修改也会被raync同步)
[root@gym ~]# vim folder/f1/file1      修改f1的内容
[root@gym ~]# cat folder/f1/file1
今晚八点,我在黄金城下等你
[root@gym ~]# cat folder/f2/file1        但是f2没有改变
[root@gym ~]# rsync -av --delete folder/f1/ folder/f2/
[root@gym ~]# cat folder/f2/file1
今晚八点,我在黄金城下等你
修改权限
[root@gym ~]# touch folder/f1/file0 -m -d "2024-7-14"
[root@gym ~]# rsync -av --delete folder/f1/ folder/f2/
sending incremental file list

sent 133 bytes  received 12 bytes  290.00 bytes/sec
total size is 40  speedup is 0.28
[root@gym ~]# ls -al folder/f1/file0
-rw-r--r--. 1 root root 0 7月  14 00:00 folder/f1/file0
[root@gym ~]# chmod g+w folder/f1/file0
[root@gym ~]# ls -al folder/f1/file0
-rw-rw-r--. 1 root root 0 7月  14 00:00 folder/f1/file0
[root@gym ~]# rsync -av --delete folder/f1/ folder/f2/
sending incremental file list

sent 140 bytes  received 19 bytes  318.00 bytes/sec
total size is 40  speedup is 0.25
[root@gym ~]# ls -al folder/f2/file0
-rw-rw-r--. 1 root root 0 7月  14 00:00 folder/f2/file0

3.远程文件同步
向x主机  /tmp目录同步数据
[root@x ~]# yum -y install rsync
[root@gym ~]# rsync -av folder/ root@192.168.3.5:/tmp/
要实现远程同步,要求两台主机都安装rsync
从远程主机拉取数据
[root@x ~]# dd if=/dev/zero of=/tmp/la.jiwenjian bs=300M count=1   远程主机创建文件
[root@gym ~]# rsync -av root@192.168.3.5:/tmp/la.jiwenjian /tmp/      拉取远程主机文件
[root@gym ~]# ls /tmp/

4.rsync作为系统服务

[root@gym ~]# systemctl status rsyncd
[root@gym ~]# systemctl start rsyncd     启动服务
[root@gym ~]# netstat -lntup|grep rsync      查看使用服务
tcp        0      0 0.0.0.0:873             0.0.0.0:*               LISTEN      12279/rsync         
tcp6       0      0 :::873                  :::*                    LISTEN      12279/rsync    
找到服务的配置文件
[root@gym ~]# find / -name "rsync*conf"
/etc/rsyncd.conf
[root@gym ~]# vim /etc/rsyncd.conf 

[root@gym ~]# mkdir -p /app/studenrweb/src/main/java/co/goho/yuanyu.studentweb/
[root@gym ~]# tree /app/
/app/
└── studenrweb
    └── src
        └── main
            └── java
                └── co
                    └── goho
                        └── yuanyu.studentweb

7 directories, 0 files
[root@gym ~]# touch /app/studenrweb/src/main/java/co/goho/yuanyu.studentweb/File{0..9}.java
[root@gym ~]# tree /app/
/app/
└── studenrweb
    └── 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

7 directories, 10 files
[root@gym ~]# cd /app/studenrweb/
[root@gym studenrweb]# vim /etc/rsyncd.conf 
在最后添加
[app]
path=/app/studenrweb/
log file=/var/log/rsync.log
"/etc/rsyncd.conf" 27L, 530C    
[root@gym studenrweb]# systemctl restart rsyncd
在主机提供了一个正对app/下项目rsync服务,下次访问直接找服务
[root@x ~]# rsync -a root@192.168.3.2::
app  
[root@x ~]# rsync -av root@192.168.1.11::app /tmp/
[root@x ~]# ls -l /tmp/
drwxr-xr-x. 3 root root        18 7月  18 11:28 src

自动化推送拉取

设置每30s自动推送拉取,编辑计划任务,找到rsync的which地址
[root@x ~]# which rsync
/usr/bin/rsync
[root@x ~]# ls /tmp/

给rsyncd服务添加密码

编辑配置文件 添加两个属性auth和users
[root@gym ~]# vim /etc/rsyncd.conf 
[efg]
path=/app/studentweb/
log file=/var/log/rsync.log
auth users=tom,jerry
secrets file=/etc/rsync.secrets
[root@gym ~]# vim /etc/rsync.secrets
tom:tom
jerry:jerry
添加权限
[root@gym ~]# chmod 600 /etc/rsyncd.conf 
重启rsyncd服务
[root@gym ~]# systemctl restart rsyncd
拉取文件
[root@x ~]# rsync -av tom@192.168.3.2::efg /tmp/


rsyncd集合inotify工具实现代码实时同步

1.安装inotify-tools
[root@gym ~]# yum -y install inotify-tools     监听指定目录,一目录修改,就执行指定的指令
[root@gym ~]# inotifywait -mr /app/         开始监听
一旦inotifywait监听到目录中的改变,就直接推送
[root@gym ~]# vim inotifytest.sh
#!/bin/base

/usr/bin/inotifywait -mrq -e modify,delete,create,attrib,move /app/studentweb|while read events
do
       rsync -av /app/studentweb/ root@192.168.3.5:/tmp/
done

[root@y ~]# mv inotifytest inotifytest.sh
[root@y ~]# chmod 700 inotifytest.sh 
[root@y ~]# touch /app/studentweb/ww.txt
另一台主机
[root@x ~]# ls /tmp/
ww.txt
[root@y ~]# nohup ./inotifytest.sh & //后台运行
[root@y ~]# jobs //查看
[1]+  运行中               nohup ./inotifytest.sh &
[root@y ~]# kill %
[root@y ~]# jobs
[1]+  已终止               nohup ./inotifytest.sh

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值