当前位置: 首页 > news >正文

Linux系统Rsync+sersync 实现数据同步

一、Rsync 概述

Rsync(Remote Sync)是 Linux 系统下的一款强大的数据镜像备份工具,具备以下特点:

  • 支持远程同步和不同主机间同步
  • 可实现全量备份与增量备份
  • 保持数据链接和权限
  • 采用优化同步算法,传输前压缩数据
  • 适合架构集中式备份或异地备份
  • 支持本地复制及与 ssh、rsync 同步

Rsync 的优点

  • 相比 scp,能高效处理大量数据,同步、统计、比较同时进行
  • 可备份整个目录树和文件系统,保留文件原有属性
  • 安装简单,无需特殊权限
  • 首次全量备份,后续增量备份,同步快速
  • 支持多种传输方式和匿名传输
  • 传输速度快,通过压缩减少带宽占用

二、Rsync 运行原理

Rsync 采用 C/S 模式(客户端 / 服务器模式),通过 xinetd 服务监听 873 端口实现点到点传输。

  • 源主机:需要同步数据的服务器
  • 目标主机:存放同步数据的主机

数据同步方式有两种:

  • 推(push):源主机主动将数据发送给目标主机,服务器开销大,适合后端服务器较少的情况
  • 拉(pull):客户端主机从服务器拉取数据,可能导致传输缓慢

三、Rsync 部署步骤

1. 安装必要服务

客户端和服务器都需要安装 xinetd 和 rsync 服务:

bash

# 安装服务
[root@server ~]# yum install xinetd rsync -y
[root@client ~]# yum install xinetd rsync -y# 以daemon模式运行rsync
[root@server ~]# rsync --daemon
[root@client ~]# rsync --daemon# 验证873端口是否监听
[root@server ~]# netstat -antup | grep 873

2. 常用参数说明

参数作用
-a归档模式,递归并保持属性
-r递归处理
-p保留文件原有属性
-t保留文件原有时间
-z压缩传输
-v显示输出过程
--delete删除目标位置有而源没有的文件
--port指定端口号,默认 873
--password-file指定密码文件
-avz常用组合:保留权限、显示过程、压缩传输

四、Rsync 备份测试

  1. 创建测试用户并设置密码
  2. 在服务端创建测试目录并设置权限
  3. 在客户端创建备份目录
  4. 执行同步命令测试

bash

# 服务端推送数据到客户端
[root@server ~]# rsync -avz /data/ test@192.168.115.112:/data/backup

如果使用非默认 SSH 端口,需指定端口:

bash

rsync -avz /data/  -e "ssh -p 222" test@192.168.115.112:/data/backup 

五、使用非系统用户备份数据

1. Rsync 配置文件详解

配置文件路径:/etc/rsync.conf,包含全局参数和模块参数:

  • 全局参数:对整个 rsync 服务器生效,如端口、监听地址、运行用户等
  • 模块参数:针对特定目录,如同步目录路径、权限、认证用户等

2. 配置备份目录

以客户端(192.168.115.112)作为备份存储主机为例:

bash

# 编辑配置文件
[root@client ~]# vim /etc/rsyncd.conf
port=873
address = 192.168.115.112
uid = root
gid = root
use chroot = yes
max connections = 4
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
motd file = /etc/rsyncd.motd
hosts allow = 192.168.115.0/24
[data]
path = /data/backup
comment = bakcup data
read only = false
list = yes
auth users = rsyncuser
secrets file = /etc/rsync.passwd

创建密码文件并设置权限:

bash

[root@client ~]# echo "rsyncuser:123456" > /etc/rsync.passwd
[root@client ~]# chmod 600 /etc/rsync.passwd

启动服务并配置防火墙:

bash

[root@client ~]# systemctl start xinetd
[root@client ~]# systemctl enable xinetd
[root@client ~]# rsync --daemon --config=/etc/rsyncd.conf
[root@client ~]# firewall-cmd --permanent --zone=public --add-port=873/tcp
[root@client ~]# firewall-cmd --reload 

3. 备份测试

bash

# 服务端推送数据
[root@server ~]# rsync -avz --delete /data/ rsyncuser@192.168.115.112::data# 使用密码文件避免手动输入密码
[root@server ~]# rsync -avz /data rsyncuser@192.168.115.112::data --password-file=/etc/rsync.passwd

4. 定时同步设置

创建自动备份脚本并加入定时任务:

bash

[root@server ~]# vim autobackup.sh
#!/bin/bash
rsync -avz /data rsyncuser@192.168.115.112::data --password-file=/etc/rsync.passwd[root@server ~]# chmod +x autobackup.sh
[root@server ~]# crontab -e
50 19 * * * bash /root/autobackup.sh

六、Rsync+sersync 实现数据实时同步

1. 同步原理

sersync 基于 inotify 开发,能监控目录中具体文件或目录的变化,结合 rsync 仅同步变化部分,实现高效增量同步。

相比 rsync+inotify-tools,rsync+sersync 的优势在于:

  • 能精确监控到具体哪个文件或目录发生变化
  • 避免整个目录同步,提高效率

2. 部署步骤

环境说明

  • sersync 服务端(同步服务器):192.168.115.111
  • rsync 客户端(备份存储):192.168.115.112

部署 sersync:

bash

# 解压并安装
[root@server opt]# tar xzf sersync2.5.4_64bit_binary_stable_final.tar.gz
[root@server opt]# mv GNU-Linux-x86 sersync# 配置sersync
[root@server ~]# vim /opt/sersync/confxml.xml
# 设置监控路径、目标主机和共享模块
<localpath watch="/data"><remote ip="192.168.115.112" name="data"/>
</localpath>
# 配置认证信息
<auth start="true" users="rsyncuser" passwordfile="/etc/rsync.passwd"/>

启动 sersync 守护进程:

bash

[root@server ~]# /opt/sersync/sersync2 -d -r -o /opt/sersync/confxml.xml

3. 开机自启与进程监控

设置开机自启:

bash

[root@server ~]# vim /etc/rc.d/rc.local
/opt/sersync/sersync2 -d -r -o /opt/sersync/confxml.xml

创建监控脚本确保服务运行:

bash

[root@server ~]# vim /opt/check_sersync.sh
#!/bin/sh
while true
do
sersync="/opt/sersync/sersync2"
confxml="/opt/sersync/confxml.xml"
status=$(ps aux |grep 'sersync2'|grep -v 'grep'|wc -l)
if [ $status -eq 0 ] ; thenecho "sersync未开启,现在开启"$sersync -d -r -o $confxml bash $0
elseecho "sersync已正常开启"exit 0;
fi
sleep 1
done# 添加定时任务
[root@server ~]# crontab -e
*/2 * * * * sh /opt/check_sersync.sh &> /dev/null
http://www.dtcms.com/a/390874.html

相关文章:

  • 【13/20】缓存与性能优化:Redis 在 Express 中的整合,实现用户数据缓存
  • 如何防止电脑长时间运行过热?定时关机是第一道防线
  • 开源监控利器Prometheus+Grafana在银河麒麟操作系统的落地实践
  • 小程序移动端设计UI(一)预约小程序——东方仙盟练气期
  • Android13 命令启用WLAN详细日志分析
  • 临床AI产品化全流程研究:环境聆听、在环校验与可追溯系统的多技术融合实践(中)
  • 深度解读昇腾CANN动态Shape图调度加速技术
  • linux系统使用ImageMagick注意,只能使用convert命令
  • [Windows] 搜狗拼音一键净化
  • Go语言25个关键字全解析
  • 图像滤波常用总结
  • Go语言设计原则与设计模式
  • (LoRA深度解析)LORA: LOW-RANK ADAPTATION OF LARGE LANGUAGE MODELS论文精读(逐段解析)
  • 第十四届蓝桥杯青少组C++选拔赛[2022.11.27]第二部分编程题(4、找路线)
  • 知识图谱对自然语言处理深层语义分析的影响与启示:结构化研究报告
  • 架构师成长之路-缓存二
  • 正点原子小智BOX0/BOX2 产品使用视频表情功能
  • 鸿蒙NEXT分布式文件系统:开启跨设备文件访问新时代
  • 【主机初始化工作】
  • Ubuntu20.04仿真 | iris四旋翼添加livox mid360激光雷达
  • Linux进程终止
  • Go如何重塑现代软件开发的技术基因
  • 设计模式(C++)详解—外观模式(2)
  • 【ubuntu24.04】apt update失败 过期的签名清理
  • Go 语言常用算法库教学与实践指南
  • 基于FPGA的智能垃圾分类装置
  • 168. Excel 表列名称【简单】
  • Ubuntu20.04 6步安装ROS-Noetic
  • 基于 MATLAB 的双边滤波去图像云雾处理
  • 将一台已连接无线网络的 Windows 电脑通过网络线共享网络给另一台电脑