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参数减少触发频率。

相关推荐
橙子也要努力变强30 分钟前
信号捕捉底层机制-机理篇2
linux·服务器·c++
秋91 小时前
MySQL 8.0.46 全平台安装与配置详解(Windows/Linux/macOS)
linux·windows·mysql
小康小小涵1 小时前
基于ESP32S3实现无人机RID模块底层源码编译
linux·开发语言·python
CQU_JIAKE1 小时前
4.28~4.30【Q】
linux·运维·服务器
左手厨刀右手茼蒿2 小时前
Linux 内核中的设备驱动开发:从字符设备到网络设备
linux·嵌入式·系统内核
先知后行。2 小时前
Linux 设备模型和platform平台
linux·运维·服务器
lzh200409192 小时前
深入理解进程:从PCB内核结构到写时拷贝的底层实战
linux·c++
掌心向暖RPA自动化2 小时前
如何获取网页某个元素在屏幕可见部分的中心坐标影刀RPA懒加载坐标定位技巧
java·javascript·自动化·rpa·影刀rpa
日取其半万世不竭2 小时前
Minecraft Java版社区服务器搭建教程(Linux,适合新手)
java·linux·服务器
时空自由民.2 小时前
蓝牙协议之GAP协议
linux·服务器·网络