使用 Rsync 实现远程同步,以及实时同步

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

使用 Rsync 实现远程同步,以及实时同步



一、基本介绍


二、使用 Rsync 实现远程同步


1.配置同步端

2.进行同步备份

3.结合 CronJob 进行自动备份


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


1.配置发起端

2.编写自动同步脚本

3.验证


一、基本介绍



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


服务器身份区分:


  • 发起端: 可以理解为客户端,向服务端发送要备份的数据(需要有同步端提供目录的读权限)


  • 同步端: 可以理解为服务端,专用于存放备份文件;类似于远程备份中心(通过提供目录,来使客户端进行同步)


image.png


Rsync 两种同步方式:


  • 上行同步: 将 Rsync 配置文件中的 path 目录同步到当前主机指定目录。


  • 下行同步: 将当前主机指定目录同步到 Rsync 配置文件中的 path 目录。


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


二、使用 Rsync 实现远程同步



准备工作:


image.png


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 目录下)


image.png


在 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       # 远程同步


image.png


image.png



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                             # 查看当前时间


image.png


image.png



三、通过 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


image.png


image.png


重新打开一个终端:


[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


回到原来的终端进行查看:


image.png



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


image.png


运行脚本


[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


image.png



在同步端上查看是否同步


image.png


使用上行同步:


image.png


相关文章
|
Linux PHP Shell
自建centos5/6/7 64位yum源(官网rsync同步)
自建centos yum源,5、6、7 64位yum源,官网rsync同步
6360 0
|
人工智能
IDEA完全免费AI辅助编程插件BITO-GPT4安装及中文国产化设置
IDEA完全免费AI辅助编程插件BITO-GPT4安装及中文国产化设置
2713 1
|
弹性计算 网络协议 安全
【图文教程】阿里云服务器开放端口设置(超详细)
阿里云服务器端口怎么打开?云服务器ECS端口在安全组中开启,轻量应用服务器端口在防火墙中打开,阿里云服务器网以80端口为例,来详细说下阿里云服务器端口开放图文教程,其他的端口如8080、3306、443、1433也是同样的方法进行开启端口:
47200 2
|
网络协议 Linux 网络安全
文件共享同步5种方式:NFS、NAS、rsync、scp、ftp
谈到文件同步,我们最直接的同步方式是采用rsync的同步软件,rsync同步可以保持server和client的强一致(server中的增删改都会同步client),但在实际场景中rsync可能并不能被采纳。
19256 0
|
Kubernetes 容器 Perl
【kubernetes】解决: kubelet Failed to create pod sandbox: rpc error: code = Unknown desc = faile...
【kubernetes】解决: kubelet Failed to create pod sandbox: rpc error: code = Unknown desc = faile...
18416 0
|
Linux Apache
Linux【环境部署 02】yum源镜像下载+挂载镜像+本地yum源配置+局域网yum源服务搭建+局域网yum源使用(一篇学会离线yum源配置)
Linux【环境部署 02】yum源镜像下载+挂载镜像+本地yum源配置+局域网yum源服务搭建+局域网yum源使用(一篇学会离线yum源配置)
8812 0
|
12月前
|
监控 Linux 应用服务中间件
Linux多节点多硬盘部署MinIO:分布式MinIO集群部署指南搭建高可用架构实践
通过以上步骤,已成功基于已有的 MinIO 服务,扩展为一个 MinIO 集群。该集群具有高可用性和容错性,适合生产环境使用。如果有任何问题,请检查日志或参考MinIO 官方文档。作者联系方式vx:2743642415。
3752 57
|
Linux 网络安全 Python
linux centos上安装python3.11.x详细完整教程
这篇文章提供了在CentOS系统上安装Python 3.11.x版本的详细步骤,包括下载、解压、安装依赖、编译配置、解决常见错误以及版本验证。
11891 3
linux centos上安装python3.11.x详细完整教程
|
Linux 数据安全/隐私保护 Windows
【JumpServer教程】简便添加Windows资产:JumpServer堡垒机使用指南
本文是JumpServer堡垒机使用指南,介绍了如何在JumpServer中简便添加Windows资产的步骤,包括准备工作、开启Windows远程设置、在JumpServer中配置Windows资产以及授权使用。
4436 1
【JumpServer教程】简便添加Windows资产:JumpServer堡垒机使用指南