rsync数据同步服务,rsync+SSH同步,及inotify实时同步与rsync结合

avatar
作者
筋斗云
阅读量:0

Linux系统下数据同步服务rsync


一、rsync概述


1.rsync的伙伴


sync同步:刷新文件系统缓存,强制将修改过的数据写入磁盘,并且更新超级块
async异步:将数据先放到缓冲区,在周期性(一般是30s)的去同步到磁盘
rsync远程同步:==remode synchronous==
数据同步过程:
sync数据同步 => 保存⽂件(⽬标)=> 强制把缓存中的数据写⼊磁盘(⽴即保存),实时性
要求⽐较⾼的场景
asyn数据异步 => 保存⽂件(⽬标)=> 将数据先放到缓冲区,再周期性(⼀般是30s)的去同
步到磁盘,适合⼤批量数据同步的场景


2.rsync特点


1)可以镜像保存整个⽬录树和⽂件系统
2)可以保留原有的权限(permission,mode),owner,group,时间(修改时间,modify time),软硬链接,⽂件acl,⽂件属性(attributes)信息等
3)传输==效率⾼==,使⽤同步算法,只⽐较变化的(增量备份)
4)⽀持匿名传输,⽅便⽹站镜像;也可以做验证,加强安全


3.rsync与scp的区别


两者都可以实现远程同步,但是相对比而言,rsync能⼒更强
① ⽀持增量备份
② 数据同步时保持⽂件的原有属性


二、rsync的使用


1.基本用法


rsync [选项] 原数据位置 目标目录位置
-v     详细模式输出
-a     归档模式,递归的方式传输文件,并保持文件的属性
-r      递归拷贝目录
-l      保留软链接
-p     保留原有权限
-t      保留原有时间(修改)
-g     保留属组权限
-o     保留属主权限
-D     -devices  --specials    表示⽀持b,c,s,p类型的⽂件
-R     保留相对路径
-H     保留硬链接
-A      保留ACL策略
-e      指定要执⾏的远程shell命令,ssh更改端⼝常⽤选项     
-E      保留可执行的权限
-X      保留扩展属性信息 


2.本地同步


rsync [选项] 原数据位置 目标目录位置
[root@tdr ~]# rsync -av folder/ /opt/                     //把folder目录下的内容传到/opt/下
[root@tdr ~]# rsync -av folder /opt/                      //把folder目录整个传到/opt/下
[root@tdr ~]# rsync -avR folder /opt/                   //保留相对路径,folder后加不加/都一样,都是把folder目录整个传到/opt/下
[root@tdr ~]# rsync -av folder/f1/ folder/f2/
[root@tdr ~]# touch folder/f1/file5
[root@tdr ~]# tree folder/
folder/
├── f1
│   ├── file0
│   ├── file1
│   ├── file2
│   ├── file3
│   ├── file4
│   └── file5
├── f2
│   ├── file0
│   ├── file1
│   ├── file2
│   ├── file3
│   └── file4
└── f3
[root@tdr ~]# rsync -av folder/f1/ folder/f2/
[root@tdr ~]# tree folder/
folder/
├── f1
│   ├── file0
│   ├── file1
│   ├── file2
│   ├── file3
│   ├── file4
│   └── file5
├── f2
│   ├── file0
│   ├── file1
│   ├── file2
│   ├── file3
│   ├── file4
│   └── file5
└── f3
//这里看到file5已经被同步过去了
[root@tdr ~]# rm -rf folder/f1/file0
[root@tdr ~]# tree folder/
folder/
├── f1
│   ├── file1
│   ├── file2
│   ├── file3
│   ├── file4
│   └── file5
├── f2
│   ├── file0
│   ├── file1
│   ├── file2
│   ├── file3
│   ├── file4
│   └── file5
└── f3
[root@tdr ~]# rsync -av --delete folder/f1/ folder/f2/             //删除⽬标⽬录⾥多余的⽂件
[root@tdr ~]# tree folder/
folder/
├── f1
│   ├── file1
│   ├── file2
│   ├── file3
│   ├── file4
│   └── file5
├── f2
│   ├── file1
│   ├── file2
│   ├── file3
│   ├── file4
│   └── file5
└── f3
//这里看到file0已经被同步删除了

rsync可以同步文件内容的修改,文件的删除,以及文件的属性的修改


3.远程同步


rsync [选项] 原数据位置 用户@主机地址:目标目录位置
[root@tdr ~]# rsync -av  folder/ root@192.168.1.125:/tmp/        //向另一台主机的/tmp/目录传,另一台也要安装rsync
[root@tds ~]# ls /tmp/
f1
f2
f3


4.rsync作为系统服务


默认情况下,rsync只是作为⼀个命令来进⾏使⽤的(ps在查询进程时,找不到对应的服务),但是rsync提供了⼀种作为系统服务的实现⽅式。
Linux系统服务的思路:对外提供服务——>端⼝监听——>==启动服务==——>启动脚本——>配置⽂件

任务解决方案
(1)准备代码文件
[root@tdr ~]# mkdir -p /app/studentweb/src/main/java/co/goho/tangtang.studentweb/
[root@tdr ~]# touch /app/studentweb/src/main/java/co/goho/tangtang.studentweb/file{0..9}.java
(2)把rsync作为系统服务运⾏
[root@tdr ~]# vim /etc/rsyncd.conf                         //配置rsyncd服务的配置⽂件
[app]   
path=/app/studentweb/                                          
log file=/var/log/rsync.log
[root@tdr ~]# systemctl restart rsyncd          //重启服务
在本机上提供了一个针对app/下的项目rsync服务
(3)测试rsync是否可以连接到rsync服务
[root@tds ~]# rsync -a root@192.168.1.100::                           //在另一台主机找这个服务,-a:获取rsync服务对应的同步⽬录标签
app   
[root@tds ~]# rsync -av root@192.168.1.100::app /tmp              //下载下来
[root@tds ~]# tree /tmp/src/              //树状显示目录
(4)编写计划任务 + Shell的脚本⽂件,⾃动实现代码备份
案例:自动推送拉取文件,使用计划任务每30s推送一次代码
[root@tdr ~]# which rsync                   //找到rsync,使⽤的完整路径 which命令
/usr/bin/rsync
[root@tdr ~]# crontab -e                    //编写计划任务
*/30 * * * * /usr/bin/rsync -av /app/studentweb/ root@192.168.1.125:/tmp/
[root@tds ~]# ls /tmp                      //另一台主机查找 
src  


5.为rsynsd服务添加密码


[root@tdr ~]# vim /etc/rsyncd.conf                //在/etc/rsyncd.conf 文件中添加账号和密码文件的路径
auth users=tdcs
secrets file=/etc/rsync.secrets
[root@tdr ~]# vim /etc/rsync.secrets                      //编辑rsync账户密码
tdcs:123
[root@tdr ~]# chmod 600 /etc/rsync.secrets                //为文件设置600权限
[root@tdr ~]# ls -l /etc/rsync.secrets 
-rw-------. 1 root root 9 7月  18 15:19 /etc/rsync.secrets
[root@tdr ~]# systemctl restart rsyncd
去另一台主机
[root@tds ~]# rsync -av tdr@192.168.1.100::abc /tmp
Password:123
[root@tds ~]# ls /tmp
src


三、rsync集合inotify工具实现代码同步(重点)

[root@tdr ~]#  yum -y install inotify-tools                    //下载
-m : ⼀直监控某个⽬录,create、delete、modify等⾏为
-r : 递归,不仅仅监控⽬录还要监控⽬录下的⽂件
-q : 获取操作信息,但是不输出
-e : 哪些⾏为需要被监控,modify,delete,create,attrib,move
modify: ⽂件被修改
delete: ⽂件被删除
create: ⽂件被创建
attrib: ⽂件属性被修改
move: ⽂件被移动
[root@tdr ~]# inotifywait -mr /app/                              //监听这个目录
[root@tdr ~]# vim inotify.sh                          //编写脚本,监听指定⽬录,⼀旦⽬录发上修改,就执⾏指定的指令
#!/bin/bash

/usr/bin/inotifywait -mrq -e modify,delete,create,attrib,move /app/studentweb|while read events 
do
   rsync -av /app/studentweb/ root@192.168.1.125:/tmp                        //注意:是另一台主机的IP
done

[root@tdr ~]# chmod 700 inotify.sh                       //添加可执⾏权限
[root@tdr ~]# ./inotify.sh 
另外打开一个本机的终端
[root@tdr ~]# touch /app/studentweb/tds             //随便在监听目录下创建个文件
打开另一台主机
[root@tds ~]# ls /tmp
src  tds                                  //出现这个目录了
回到本机
[root@tdr ~]# nohup ./inotify.sh &                    //放入后台运行
 & : 让inotify.sh在计算机后台运⾏,可以使⽤jobs命令查看,kill %编号:当我们退出
终端时,这个执⾏会⾃动结束
nohup : 让程序⼀直在后台运⾏,即使我们关闭了终端
[root@tdr ~]# jobs
[1]+  运行中               nohup ./inotify.sh &
[root@tdr ~]# kill %1
[root@tdr ~]# jobs
[1]+  已终止               nohup ./inotify.sh

扩展:如何查看rsync.log⽇志⽂件
[root@tdr ~]#  cat /var/log/rsync.log

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!