跨网段服务器rsync定时同步运维实践
跨网段同步的运维背景
在IDC多机房或混合云环境中,服务器往往分布在不同的网段,业务系统需要定期将日志、备份文件或静态资源从生产服务器同步至灾备或分析服务器。相比FTP、HTTP等方式,rsync具备增量传输、断点续传、权限保留等优势,是跨网段文件同步的首选工具。
基础环境与规划
假设源服务器IP为192.168.10.10(网段A),目标服务器IP为172.16.20.20(网段B),两机网络可达且仅开放指定端口。建议使用专用同步账号,避免使用root直接运行rsync。
配置SSH密钥互信
rsync通过SSH传输时,为了支持定时任务免密执行,可使用密钥认证:
- 在源服务器生成密钥对:
ssh-keygen -t rsa -b 2048,无需设置口令。 - 将公钥追加至目标服务器的
~/.ssh/authorized_keys中。 - 测试连接:
ssh sync_user@172.16.20.20,确认免密登录成功。
编写rsync同步命令
以同步/data/applogs目录为例,命令如下:
rsync -avz --progress --delete /data/applogs/ sync_user@172.16.20.20:/backup/applogs/- -a:归档模式,保留权限、属主、时间戳等。
- -v:输出详细过程。
- -z:传输时压缩,适合跨网段带宽有限场景。
- --delete:删除目标端多余文件,保持两端严格一致(按需使用)。
注意源路径末尾的/,它代表同步目录内的内容,而非目录本身。若需排除某些子目录或文件,可添加--exclude参数。
配置crontab定时任务
在源服务器编辑/etc/crontab或使用crontab -e添加计划任务。例如每天凌晨2点执行同步:
0 2 * * * /usr/bin/rsync -avz --delete /data/applogs/ sync_user@172.16.20.20:/backup/applogs/ >> /var/log/rsync_sync.log 2>&1建议将rsync绝对路径写入任务中,避免环境变量问题。同时输出日志便于排查。
跨网段传输的注意事项
端口与防火墙
默认SSH端口为22,建议在防火墙上仅允许源服务器IP访问目标服务器的指定端口,并将SSH监听端口改为非标准端口(如22022),在rsync命令中使用-e "ssh -p 22022"指定。
带宽与限速
若同步数据量大且不能影响业务,可使用--bwlimit参数限速,例如--bwlimit=5000表示限制为5000KB/s。
断点续传与校验
跨网段网络可能出现抖动,rsync默认支持断点续传,但若传输中断后未完成,可使用--partial保留部分传输的文件。数据完整性要求高时,可增加--checksum参数,但会增加计算开销。
使用rsync daemon模式
若无法直接使用SSH(如目标端只开放873端口),可配置rsync daemon。在目标服务器/etc/rsyncd.conf中定义模块,并设置hosts allow限制来源IP,然后使用rsync -avz --port=873 /data/applogs/ rsync://sync_user@172.16.20.20/backup_applogs/进行同步。
日志监控与异常处理
定时任务执行后,可通过以下方式确认同步结果:
- 查看日志文件:检查rsync退出码,0表示成功,非0需排查。
- 使用邮件或告警脚本:在crontab命令后追加
|| echo "rsync failed" | mail -s "sync error" admin@example.com。 - 定期对比源与目标的文件数量及大小,防止漏同步。
总结
跨网段rsync定时同步的要点是:规划专用账号、配置SSH免密、编写正确的rsync参数、优化带宽与安全策略,并结合日志监控形成闭环。通过合理的crontab调度,可稳定实现多机房数据定期同步,降低人工干预成本。