rsync增量备份

发布时间 2023-04-05 18:16:41作者: twistfate123

一、rsync远程同步
1、什么是rsync远程同步
rsync是C/S架构的数据镜像备份工具,可以实现全量备份和快速增量备份支持本地复制或ssh、rsync主机同步。

rsync默认端口为 873

rsync特性:可以在不通主机之间镜像同步整个目录树,支持增量备份、保持链接和权限、时间、属性且传输前自动执行压缩、rsync不需要特殊权限即可安装,centos系统默认安装,支持匿名传输,注意发起端要有对应目录位置的读权限

2、rsync备份类型
完全备份:每次备份将备份源所有文件或目录备份到目的。

差量备份:备份上次完全备份以后有变化的数据。

增量备份:备份上次完全备份以后有变化的数据。

3、rsync同步方式
①本地复制:首先是将源文件和目的位置文件对比找出差异,然后将源文件与目的位置的差异部分进行一致性同步。

②上行同步:客户端与服务端同步内容,可以理解为客户端从服务器上下载内容

③下行同步:服务端与客户端同步内容,可以理解为客户端将内容上传到服务器

4、rsync -az 原始位置  目标位置

                用户名@IP::共享模块名  rsync -avz backuper@192.168.10.10::myhtml /opt/ky26

 发起端:负责发起rsync,同步操作的客户机叫做发起端,通知服务器我要备份你的数据。

备份原:负责响应来自客户机rsync同步操作的服务器叫做备份原,需要备份的服务器

服务端:运行rsync服务,一般来说需要备份的服务器

客户端:存放备份数据

 

 

二、rsync下行同步实验部署

实验环境

客户端:192.168.10.10

服务端:192.168.10.11

 

1、服务端配置

mkdir    /var/www/html  -p
#创建要同步的文件夹
vim  /etc/rsyncd.conf     
#编辑rsync服务配置文件
文件内容:
uid = root	    #用户id,注意不用root使用rsync同步时可能会报错
gid = root	    #组id,注意不用root使用rsync同步时可能会报错
use chroot =yes	    #开启禁锢目录,只允许模块授权的源路径
address =192.168.30.11	    #监听的地址即server地址
port 873			        #监听地址的那个端口
log file =/var/log/rsyncd.log	#日志文件位置
pid file =/var/run/rsyncd.pid	#pid文件位置
hosts allow = 192.168.30.0/24	#允许谁使用
max connections = 4 			#最大连接数
[lhjhtml]                       #模块名称
path = /var/www/html		    #源文件路径
comment = Document root of www.lhj.com	#模块说明,随便写
read only =yes	                #是否只读
dont comperss = *.gz *.bz2 *.tgz *.zip *.rar *.z 	#这些类型结尾的文件不压缩
auth users = lhj cxx		                #授权可登录用户 lhj   cxx 多用户以空格隔开
secrets file = /etc/rsyncd_users.db       #rsyncd服务账户密码文件位置,保存退出
vim  /etc/rsyncd.users.db         #编辑rsyncd账户密码文件
lhj:123456          #添加账户密码,以:隔开
cxx:123456          #添加完成后保存退出
chmod 600 /etc/rsyncd_users.db          #修改rsyncd服务文件权限为只允许属主可读写
rsync  --daemon                         #启动rsyncd服务
netstat -antp  |grep  rsync             #查看是否启动成功
echo "test rsync">/var/www/html/a.txt   #同步源目录中创建文件a.txt内容为"test rsync"

  

 

 

2、客户端配置

mkdir  -p /opt/ky26      #创建client同步接收文件位置
chmod 777 /opt/ky26      #接收文件位置权限添加
vim /etc/server.pass     #创建免交互密码文件将密码输入
123456                   #lhj和cxx的密码为123456
chmod  600  /etc/server.pass     #秒交互密码文件只允许属主可读写
rsync  -avz   --password-file=/etc/server.pass  lhj@192.168.30.11::lhjhtml   /opt/ky26 同步到ky26文件夹中
注意:若同步失败需要先在client上ssh一下server登录再退出。
注意:如果报错为 error: some files/attrs were not transferred (see previous errors)
(code 23)t main ,c(1179) [sender=3.1.2]则是因为rsyncd.conf配置文件中的uid和组id不是root cat /opt/ky26/a.tx#client上验证是否有a.txt

  

 

 

三、inotify实时同步
Inotify 是一个 Linux特性,它监控文件系统操作,比如读取、写入和创建。Inotify 反应灵敏,用法非常简单,并且比 cron 任务的繁忙轮询高效得多。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Wi2vGkDb-1651391770143)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1650545689160.png)]

1.调整inotify内核参数(优化)
/etc/sysctl.conf(内核参数配置文件),需要配置
max_queue_events :监控事件队列大小
max_user_instances :最多监控实例
max_user_watches :每个实例最多监控文件数
配置的监控数量应该大于监控目标的总文件数

2.使用inotify-tools辅助工具
inotifywait:用于持续监控,实时输出结果
可监控modify(修改)、create(创建)、move(移动)、delete(删除)、attrib(属性更改)等各种事件,一有变动立即输出结果。
inotifywatch:用于短期监控,任务完成后再输出结果
可用来收集文件系统变动情况,并在运行结束后输出汇总的变化情况。

inotifywait -mrq -e modify,create,attrib,move,delete 文件或目录
-m 持续进行监控
-r 递归监控所有子对象
-q 简化输出信息
-e 指定要监控哪些事件类型
modify 修改
create 创建
attrib 属性更改
move 移动
deletc 删除

3.编写同步脚本

vim /opt/inotify_rsynx.sh
#!/bin/bash
#定义两个变量:监控文件,执行备份
INOTIFY_CMD="inotifywait -mrq -e modify,create,attrib,move,delete 需要监控的目录或文件"
RSYNC_CMD="rsync -azH --delete --password-file=/etc/密码文件 刚才监控的目录或文件 用户名@主机地址::共享模块名"

#while read获取监控结果
$INOTIFY_CMD | while read DIRECTORY EVENT FILE
#当读取目录,事件,文件
do
#如果rsync没有运行,执行rsync进行备份操作
if [ $(pgrep rsync | wc -l) -le 0 ] ; then
$RSYNC_CMD
fi
done

  

 

 

 

4、验证实时同步

cd /opt/
chmod +x inotify.sh 
./inotify.sh 
执行脚本后会在前台执行占用窗口,重新开个窗口执行以下命令验证
cd /opt/ky26
echo "12345">1.txt
然后到服务端查看是否上传完成