Rsync+sersync 实现数据实时同步故障排查

一、基础检查流程

1. 服务状态检查

复制代码
# 检查sersync服务状态(系统服务方式)
systemctl status sersync
# 检查sersync进程(独立运行方式)
ps -ef | grep sersync | grep -v grep
​
# 检查rsync服务状态
systemctl status rsyncd
# 检查rsync进程
ps -ef | grep rsync | grep -v grep
​
# 查看服务日志
tail -n 100 /var/log/sersync.log  # sersync日志(需配置日志路径)
tail -n 100 /var/log/rsyncd.log   # rsync服务日志
journalctl -u rsyncd --no-pager -n 50  # 系统日志中的rsync记录

2. 网络与端口检查

复制代码
# 检查rsync默认端口(873)监听状态
netstat -tulnp | grep 873
ss -tulnp | grep 873
​
# 测试服务端与客户端网络连通性
ping <目标服务器IP> -c 4
telnet <目标服务器IP> 873  # 测试端口可达性
​
# 检查防火墙规则
firewall-cmd --list-all | grep 873  # firewalld
iptables -L INPUT | grep 873        # iptables

二、配置验证

1. 配置文件检查

复制代码
# 检查rsync配置文件语法(无专门语法检查命令,可通过启动日志判断)
cat /etc/rsyncd.conf | grep -v '^#\|^$'  # 过滤注释和空行查看有效配置
​
# 检查sersync配置文件
cat /usr/local/sersync/conf/confxml.xml  # 通常路径,以实际安装为准
​
# 验证目录权限配置
ls -ld /同步源目录/
ls -ld /目标同步目录/

2. 配置文件关键点检查

  • Rsync 配置文件(/etc/rsyncd.conf)检查:

  • uid/gid是否有足够目录权限

  • path指向的目录是否存在且可读写

  • hosts allow是否包含客户端 IP

  • auth users和secrets file配置是否正确(如需认证)

  • read only是否设置为no(如需双向同步)

  • Sersync 配置文件(confxml.xml)检查:

  • localpath本地目录是否正确

  • remoteip和remotepath远程配置是否准确

  • rsync args参数是否包含必要选项(如-avz)

  • inotify监控事件是否完整(create、delete、modify 等)

三、详细诊断方法

1. 调试模式启动

复制代码
# sersync调试模式(前台运行并输出详细日志)
sersync -d -r -o /usr/local/sersync/conf/confxml.xml
​
# rsync服务端调试模式
rsync --daemon --config=/etc/rsyncd.conf --verbose --debug=all
​
# 手动执行rsync命令测试
rsync -avz --progress /本地目录/ 用户名@目标IP::模块名 --password-file=/密码文件路径

2. 同步功能测试矩阵

测试类型 命令 / 方法 预期结果
基础文件同步 touch /同步源目录/testfile 目标目录出现 testfile
目录创建同步 mkdir /同步源目录/testdir 目标目录出现 testdir
文件删除同步 rm -f /同步源目录/testfile 目标目录 testfile 被删除
大文件同步 dd if=/dev/zero of=/同步源目录/bigfile bs=100M count=1 大文件完整同步且 MD5 一致
权限修改同步 chmod 777 /同步源目录/testfile 目标文件权限同步更新
符号链接同步 ln -s /同步源目录/testfile /同步源目录/link 目标目录创建相同符号链接

3. 常见错误代码分析

错误现象 可能原因 解决方案
sersync 启动报 inotify 错误 inotify 模块未加载或权限不足 modprobe inotify;检查目录权限
rsync 连接被拒绝 服务未启动或端口被屏蔽 重启 rsyncd;检查防火墙和网络 ACL
同步提示 permission denied 目录权限或 rsync uid/gid 错误 调整目录权限;修改 rsyncd.conf 的 uid/gid
部分文件同步失败 文件被锁定或 rsync 参数不全 关闭文件锁;添加--force或--delete参数
无实时触发同步 sersync 监控配置错误 检查 confxml.xml 的监控事件和路径配置

四、高级诊断工具

1. 网络抓包分析

复制代码
# 抓取rsync端口(873)流量
tcpdump -i eth0 -n port 873 -w rsync.pcap
tcpdump -n -r rsync.pcap -v | grep -i "rsync"
​
# 分析同步过程中的网络交互
tshark -i eth0 -f "port 873" -Y "tcp"

2. 监控与性能分析

复制代码
# 监控inotify事件(需安装inotify-tools)
inotifywait -mrq -e create,delete,modify /同步源目录/
​
# 查看rsync进程资源占用
top -p $(pidof rsync)
htop | grep rsync
​
# 统计同步文件数量与大小
find /同步源目录/ -type f | wc -l
du -sh /同步源目录/

3. 权限与 SELINUX 检查

复制代码
# 检查目录SELINUX上下文
ls -Z /同步源目录/
ls -Z /目标同步目录/
​
# 临时关闭SELINUX测试(如需)
setenforce 0
​
# 检查rsync认证配置
cat /etc/rsyncd.secrets  # 确保权限为600
ls -l /etc/rsyncd.secrets

五、常见问题解决方案

1. 实时同步不触发

  • 检查
复制代码
# 确认sersync监控状态
ps -ef | grep sersync
# 检查inotify监控上限
cat /proc/sys/fs/inotify/max_user_watches
# 测试sersync配置文件有效性
sersync -o /usr/local/sersync/conf/confxml.xml --test
  • 解决

  • 增加 inotify 监控上限:echo "fs.inotify.max_user_watches=524288" >> /etc/sysctl.conf && sysctl -p

  • 重新加载 sersync 配置:systemctl restart sersync

  • 确认同步源目录在 sersync 配置的监控路径内

2. Rsync 认证失败

  • 检查
复制代码
# 验证密码文件配置
grep "secrets file" /etc/rsyncd.conf
# 测试认证连接
rsync -avz 用户名@目标IP::模块名 --password-file=/错误密码文件路径  # 故意用错密码对比
  • 解决

  • 确保密码文件权限为 600:chmod 600 /etc/rsyncd.secrets

  • 检查auth users与密码文件中的用户名一致

  • 清除客户端 rsync 缓存:rm -rf /root/.rsyncd/

3. 大文件同步中断

  • 检查
复制代码
# 查看网络超时设置
grep "timeout" /etc/rsyncd.conf
# 检查磁盘空间
df -h /同步源目录/
df -h /目标同步目录/
# 查看中断时系统日志
tail -n 50 /var/log/messages | grep -i "rsync\|disk"
  • 解决

  • 增加 rsync 超时时间:timeout = 300(单位秒)

  • 启用断点续传:rsync 命令添加--partial参数

  • 检查目标磁盘是否有足够空间和 inode:df -i

4. 同步权限不一致

  • 检查
复制代码
# 对比源文件和目标文件权限
stat /同步源目录/testfile
stat /目标同步目录/testfile
# 检查rsync权限相关参数
grep "rsync args" /usr/local/sersync/conf/confxml.xml
  • 解决

  • 配置 rsync 保留权限:添加-p参数(或包含在-a中)

  • 关闭目标目录的权限继承:调整目录 ACL 设置

  • 如使用 root 用户同步,确保 rsyncd.conf 中uid = root且gid = root

六、维护检查清单

  1. 日常检查
复制代码
# 检查服务运行状态
systemctl status sersync rsyncd
​
# 查看同步日志错误
grep -i "error\|fail" /var/log/sersync.log /var/log/rsyncd.log
​
# 检查同步延迟情况
ls -lrt /同步源目录/ | tail -n 5  # 最新5个文件
ls -lrt /目标同步目录/ | tail -n 5  # 对比目标目录
  1. 每周维护
  • 备份配置文件:tar czvf /backup/rsync_sersync_$(date +%F).tar.gz /etc/rsyncd.conf /usr/local/sersync/conf/ /var/log/sersync.log

  • 清理旧日志:find /var/log -name "sersync.log*" -mtime +7 -delete

  • 验证关键目录同步完整性:rsync -avn /同步源目录/ 目标IP::模块名(-n 为模拟运行)

  1. 应急工具包
复制代码
# 重启服务组合
systemctl restart rsyncd && systemctl restart sersync
​
# 手动触发全量同步
sersync -r -o /usr/local/sersync/conf/confxml.xml
​
# 临时关闭实时监控(保留rsync功能)
systemctl stop sersync

通过以上步骤可系统排查 Rsync+sersync 的同步问题,建议重点关注 inotify 监控范围、rsync 权限配置和网络连通性三个核心环节。对于大规模文件同步场景,可结合rsync --stats分析同步性能,优化sersync的delay参数减少触发频率。

相关推荐
86Eric2 小时前
基于 Rclone 实现 Linux 数据库备份自动同步至 Windows 本地
linux·windows·rclone 自动同步
zandy10112 小时前
打破API瓶颈!衡石HENGSHI CLI:专为AI Agent打造,重构BI自动化底层逻辑
人工智能·重构·自动化
SPC的存折2 小时前
6、MySQL设置TLS加密访问
linux·运维·服务器·数据库·mysql
cyber_两只龙宝3 小时前
【Docker】Docker的自定义网络详解
linux·运维·网络·docker·云原生·容器
林开落L3 小时前
【项目实战】博客系统完整测试报告(含自动化+性能测试)
python·功能测试·jmeter·自动化·postman·性能测试·xmind
taxunjishu3 小时前
速冻食品物联网网关应用 DeviceNet转Profinet提升产线协同效率
物联网·网络协议·自动化
JustNow_Man3 小时前
【opencode】使用方法
linux·服务器·网络·人工智能·python
爱学习的小囧3 小时前
vSphere 每虚拟机 EVC 配置审计教程:PowerCLI 自动化实操
运维·自动化·esxi·vmware·虚拟化
初願致夕霞3 小时前
Linux_线程
linux·运维·服务器·c++