rsync增量备份
一、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 然后到服务端查看是否上传完成