为什么需要实时同步?
某电商平台曾因服务器宕机丢失3小时订单数据,损失超百万——这就是静态备份的致命伤。而美团技术团队通过rsync增量算法,将跨地域数据同步延迟压缩至100ms级(来源:美团技术博客),大润发更是借助rsync+NAS实现22家门店ERP数据实时备份(来源:群晖官方案例)。今天我们就用rsync+inotify搭建一套高可用同步方案,成本仅需现有服务器资源。
一图看懂核心原理
rsync通过"快速检查"算法比对文件大小与修改时间,仅传输差异数据块,首次同步后带宽占用降低90%
实时触发的秘密:inotify监控机制
传统定时同步(如crontab)存在30分钟延迟风险,而inotify能毫秒级捕捉文件变化:
当/web目录新增文件时,inotifywait立即触发rsync推送,完整链路:事件捕捉→差异计算→增量传输
工具选型:inotify-tools vs sersync
实战部署:3步搞定双向同步
1. 服务端配置(目标服务器)
# 安装rsync并启动守护进程 yum install -y rsync cat > /etc/rsyncd.conf << EOF uid = root gid = root port = 873 [backup] path = /data/backup read only = no auth users = sync_user secrets file = /etc/rsync.passwd EOF echo "sync_user:123456" > /etc/rsync.passwd chmod 600 /etc/rsync.passwd systemctl start rsyncd
2. 客户端配置(源服务器)
# 安装inotify-tools并编写监控脚本 yum install -y inotify-tools cat > /opt/sync.sh << 'EOF' #!/bin/bash SRC="/var/www/html" DEST="sync_user@192.168.60.99::backup" inotifywait -mrq -e create,delete,modify $SRC | while read event do rsync -az --delete $SRC/ $DEST --password-file=/etc/rsync.pass done EOF chmod +x /opt/sync.sh nohup /opt/sync.sh & # 后台运行
3. 企业级优化(关键参数)
# 调整inotify内核参数(支持百万级文件监控) echo "fs.inotify.max_user_watches=1048576" >> /etc/sysctl.conf sysctl -p
真实案例:大润发如何保障ERP数据安全?
通过rsync将22个门店的每日交易数据(约80GB)同步至总部NAS,同步完成后自动生成MD5校验文件,配合crontab每周六做全量备份
避坑指南
权限陷阱:目标目录需给rsync用户写入权限(chown -R rsync:rsync /data/backup)日志排查:同步失败时检查/var/log/rsyncd.log,常见错误码12(认证失败)带宽控制:添加--bwlimit=1000限制传输速率(单位:KB/s)
最后一步:验证同步效果
# 在源服务器创建测试文件 touch /var/www/html/test_{1..5}.txt # 目标服务器检查结果 ls /data/backup/test_*.txt # 应显示5个文件
延伸阅读:rsync算法深度解析(参考:《Rsync增量传输技术白皮书》)
通过这套方案,某游戏公司成功将跨机房同步延迟从15分钟降至2秒,每年节省带宽成本超12万元。你准备好改造你的备份系统了吗?