一、基本介绍

Rsync 全称为:Remote Sync(远程同步),是一款开源的快速备份工具,可以在不同主机间镜像同步整个目录树,支持增量备份,保持链接和权限,采用优化的同步算法,传输前执行压缩,适用于异地备份,镜像服务器等应用(Linux 系统默认安装)


服务器身份区分:

  • 发起端: 可以理解为客户端,向服务端发送要备份的数据(需要有同步端提供目录的读权限)
  • 同步端: 可以理解为服务端,专用于存放备份文件;类似于远程备份中心(通过提供目录,来使客户端进行同步)

在这里插入图片描述
Rsync 两种同步方式:

  • 上行同步: 将 Rsync 配置文件中的 path 目录同步到当前主机指定目录。(类似于 Pull,进行下载)
  • 下行同步: 将当前主机指定目录同步到 Rsync 配置文件中的 path 目录。(类似于 Push,进行上传)

因为这两种同步方式的 区别就在于目标不同,所以我们下面主要为大家介绍下行同步。

二、使用 Rsync 实现远程同步

准备工作:

主机名操作系统IP地址担任角色
A-ServerCentOS7.4192.168.1.1发起端
B-ServerCentOS7.4192.168.1.2同步端(备份中心)

1.配置同步端

1)修改 Rsync 主配置文件

[root@B-Server ~]# vim /etc/rsyncd.conf
use chroot = yes      													# 禁锢在源目录
address = 192.168.1.2    										 		# 监听地址
port = 873    													 		# 监听端口
log file = /var/log/rsyncd.log   								 		# 日志文件
pid file = /var/run/rsyncd.pid   								 		# 进程文件
hosts allow = 192.168.1.0/24	 								 		# 允许访问的客户端地址

[PengYuYan]      														# 共享模块名
path = /app/backup   											 		# 需要同步的实际路径
comment = This is Test	       											# 描述信息. 随便写
read only = no       			 								 		# 读写权限
dont compress = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2  	 		# 同步时不再压缩的文件类型
auth users = zhangsan      												# 授权同步的账户
secrets file = /etc/rsync_users.db   							 		# 账户所在的数据文件
  • 你们要是复制我上面的话,是没问题的,但是要把 # 去掉,这是个坑,需要注意。
[root@B-Server ~]# sed -i 's/#.*//g' /etc/rsyncd.conf

2)创建备份目录

[root@B-Server ~]# mkdir -p /app/backup && chmod 777 /app/backup

3)创建备份账户密码文件

[root@B-Server ~]# echo "zhangsan:123123" > /etc/rsync_users.db			# zhangsan 是用户名. 123123 是密码
[root@B-Server ~]# chmod 600 /etc/rsync_users.db     		 			# 对用户的数据文件进行权限保护

4)启动 Rsync 服务程序

[root@B-Server ~]# rsync --daemon      		 							# 启用 (当要关闭时使用 pkill rsync 即可)
[root@B-Server ~]# netstat -anpt | grep 873

2.进行同步备份

  • 本地备份: 类似于 cp 命令,如:rsync /etc/fstab /opt(将本地文件 /etc/fstab 同步到 /opt 目录下)
选项作用
-a归档模式,保留文件权限、属性等信息 等同于组合选项 -rlptgoD
-v显示同步的详细过程
-H保留硬链接文件
-A保留 ACL 属性信息
-z传输时进行压缩
--delete删除目标位置有而原始位置没有的文件
--checksum根据校验和来决定是否跳过文件

192.168.1.1 上验证:

[root@A-Server ~]# echo "Hello World" > Hello.txt
[root@A-Server ~]# rsync -avz Hello.txt zhangsan@192.168.1.2::PengYuYan 	    # 远程同步

在这里插入图片描述
在这里插入图片描述

  • 要是想从服务器端进行拉取数据到本地,那就只需要在服务器端的模块后指定本地目录即可。
rsync -avz zhangsan@192.168.1.2::PengYuYan /localPath

3.结合 CronJob 进行自动备份

1)准备工作:

[root@A-Server ~]# echo "123123" > /etc/server.pass								# 所写的就是 zhangsan 的密码
[root@A-Server ~]# chmod 600 /etc/server.pass
[root@A-Server ~]# mkdir -p /app/mariadb/data			 			 			# 创建要备份的目录
[root@A-Server ~]# echo "Hello World" > /app/mariadb/data/Hello.sql  

2)创建 CronJob,在每天的 22:30 进行自动备份:

[root@A-Server ~]# crontab -e						 							# 创建计划任务
30 22 * * * /usr/bin/rsync -az --delete --password-file=/etc/server.pass /app/mariadb/data zhangsan@192.168.1.2::PengYuYan  

3)验证:

[root@A-Server ~]# crontab -l        				 							# 查看计划任务
[root@A-Server ~]# date -s "2022-04-23 22:29:58"    	 						# 配置时间. 方便验证
[root@A-Server ~]# date		 						 							# 查看当前时间

在这里插入图片描述
在这里插入图片描述

三、通过 Inotify + Rsync 实现实时同步

当我们通过计划任务来进行自动备份时,是没有问题的,但是 定时备份这种方式,不好的就是备份时间固定、实时性差,并且当同步的数据长时间没有发生改变时,定时备份就比较浪费存储空间。所以,我们可以通过实时同步来避免上面的问题。


配置实时同步的话,需要使用 Inotify 命令来配合:Inotify 命令可以用来监控文件系统的文件/目录是否改变,如:文件的创建、删除、移动、修改等。使用 Inotify 命令可以很方便的实现文件异动告警、增量备份等操作。

所以,我们可以通过 Inotify 来实时同步(即,只要原始位置的文件发生改变,便立即启动增量同步,否则处于等待状态)

1.配置发起端

1)调整 Inotify 内核参数 (监控事件队列);最多监控实例数;每个实例最多监控文件数:

[root@A-Server ~]# cat /proc/sys/fs/inotify/max_queued_events
16384
[root@A-Server ~]# cat /proc/sys/fs/inotify/max_user_instances
128
[root@A-Server ~]# cat /proc/sys/fs/inotify/max_user_watches
8192

把三个参数数值加大: 监控的目录、文件数量较多或变化频繁

[root@A-Server ~]# cat <<END >> /etc/sysctl.conf
fs.inotify.max_queued_events = 16384
fs.inotify.max_user_instances = 1024
fs.inotify.max_user_watches = 1048576
END
[root@A-Server ~]# sysctl -p

2)安装 inotify-tools 软件;以便提供 inotifywait inotifywatch 辅助工具程序

[root@A-Server ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
[root@A-Server ~]# yum -y install epel-release
[root@A-Server ~]# yum -y install inotify-tools

验证: 监控 /opt 目录的变化

[root@A-Server ~]# inotifywait -mrq -e modify,create,move,delete  /app/mariadb/data
监控选项作用
-m表示持续监控
-r表示递归整个目录
-q简化输出消息
-e指定监控哪写事件
modify修改
create创建
move移动
delete删除
attrib属性变化

在这里插入图片描述
重新打开一个终端:

[root@A-Server ~]# cd /app/mariadb/data
[root@A-Server data]# 
[root@A-Server data]# ls
Hello.sql
[root@A-Server data]# echo "你好,CSDN-愿许浪尽天涯" > CSDN.txt

回到原来的终端进行查看:
在这里插入图片描述

2.编写自动同步脚本

[root@A-Server ~]# cat <<"END" > /root/sync.sh
#!/bin/bash
Monitor="inotifywait -mrq -e modify,create,attrib,move,delete /app/mariadb/data"
Sync="rsync -azH --delete --password-file=/etc/server.pass /app/mariadb/data zhangsan@192.168.1.2::PengYuYan"
$Monitor | while read DIRECTORY EVERT FILE
do
    $Sync
done
END
[root@B-Server ~]# chmod +x /root/sync.sh

在这里插入图片描述
运行脚本

[root@A-Server ~]# echo "/root/sync.sh" >> /etc/rc.local  		 	 	 # 将脚本配置开机自启
[root@A-Server ~]# nohup /root/sync.sh &	 						 	 # 后台运行脚本

3.验证

[root@A-Server ~]# cd /app/mariadb/data/
[root@A-Server data]# echo "CSDN -> 愿许浪尽天涯" > tianya.txt 
[root@A-Server data]# ls
CSDN.txt  Hello.sql  tianya.txt

在这里插入图片描述
在同步端上查看是否同步
在这里插入图片描述
使用上行同步:
在这里插入图片描述

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐