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 备份测试
- 创建测试用户并设置密码
- 在服务端创建测试目录并设置权限
- 在客户端创建备份目录
- 执行同步命令测试
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