一、基础检查流程
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
六、维护检查清单
- 日常检查:
# 检查服务运行状态
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 # 对比目标目录
- 每周维护:
-
备份配置文件: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 为模拟运行)
- 应急工具包:
# 重启服务组合
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参数减少触发频率。