一、Sersync 部署前先明确它监听什么目录¶
结合前面的环境搭建,Sersync 运行在 nfs01 上,监听的核心目录就是:
/data/
这是因为:
gitlab-01通过 NFS 把远端/data/挂载成本地/upload/- 业务在
/upload/下产生文件变化 - 变化最终体现在
nfs01:/data/
所以 Sersync 只需要盯住 /data/,就能感知业务侧文件变化。
二、如何安装并规划 Sersync 目录¶
2.1 下载 Sersync 包¶
原始笔记中的命令是:
wget https://github.com/wsgzao/sersync/blob/master/sersync2.5.4_64bit_binary_stable_final.tar.gz
如果下载不完整,原始笔记也提示可以直接去项目主页:
https://github.com/wsgzao/sersync
手动下载对应文件。
2.2 规划目录结构¶
原始笔记推荐在 nfs01 上按下面方式规划:
mkdir -p /app/tools/sersync/{bin,conf}
然后解压并移动文件:
tar xf sersync2.5.4_64bit_binary_stable_final.tar.gz
mv GNU-Linux-x86/sersync2 /app/tools/sersync/bin/
mv GNU-Linux-x86/confxml.xml /app/tools/sersync/conf/
最终目录结构类似:
/app/tools/
└── sersync/
├── bin/
│ └── sersync2
└── conf/
└── confxml.xml
这种规划方式的好处是:
- 二进制和配置文件分开
- 后续维护更清晰
- 便于做多个配置实例
三、confxml.xml 里要改哪些核心参数¶
这是 Sersync 部署里最关键的一步。原始笔记给出了明确修改项。
3.1 本地监听目录¶
<localpath watch="/data/">
表示 Sersync 监听 /data/ 目录变化。
3.2 远端 Rsync 目标¶
<remote ip="192.168.1.67" name="nfsbackup"/>
这里包含两个关键信息:
- Rsync 服务端 IP:
192.168.1.67 - 模块名:
nfsbackup
3.3 Rsync 公共参数¶
<commonParams params="-az"/>
表示同步时使用的 rsync 参数是:
-a-z
3.4 开启认证并指定免密文件¶
<auth start="true" users="rsync_backup" passwordfile="/etc/rsync.client"/>
这一步和前面准备好的 Rsync 客户端免密文件配套使用。
3.5 指定失败日志文件¶
<failLog path="/var/log/rsync_fail.log" timeToExecute="60"/>
这意味着如果同步出现问题,可以优先从失败日志入手排查。
3.6 关键配置片段汇总¶
原始笔记中的核心配置可以整理为:
<sersync>
<localpath watch="/data/">
<remote ip="192.168.1.67" name="nfsbackup"/>
</localpath>
<rsync>
<commonParams params="-az"/>
<auth start="true" users="rsync_backup" passwordfile="/etc/rsync.client"/>
<userDefinedPort start="false" port="874"/>
<timeout start="false" time="100"/>
<ssh start="false"/>
</rsync>
<failLog path="/var/log/rsync_fail.log" timeToExecute="60"/>
<crontab start="false" schedule="600">
<crontabfilter start="false">
<exclude expression="*.php"></exclude>
<exclude expression="info/*"></exclude>
</crontabfilter>
</crontab>
<plugin start="false" name="command"/>
</sersync>
四、Sersync 怎么启动¶
4.1 创建软链接¶
为了更方便执行,原始笔记先把二进制链接到系统命令路径:
ln -s /app/tools/sersync/bin/sersync2 /bin/
4.2 启动命令¶
sersync2 -rdo /app/tools/sersync/conf/confxml.xml
这条命令里,最关键的是指定配置文件路径。
4.3 检查进程¶
ps -ef | grep sersync
如果看到类似:
sersync2 -rdo /app/tools/sersync/conf/confxml.xml
就说明服务已经运行起来了。
4.4 一个非常重要的注意点¶
原始笔记特别强调:
- 一个
.xml文件只能对应一个 Sersync 进程 - 不能拿同一个
.xml起多个进程 - 如果要同步多个共享目录,就要准备多个不同的
.xml配置文件
这在后续扩展多目录同步时非常关键。
五、如何做联调测试¶
联调测试的核心目标很明确:确认文件在三台机器之间能按预期流转。
5.1 测试文件新增同步¶
先在 gitlab-01 上创建文件:
touch /upload/{1..10}.txt
5.1.1 在 nfs01 上验证¶
查看 /data/:
ll /data/
如果能看到 1.txt 到 10.txt,说明:
- NFS 挂载链路没问题
- 客户端写入已经落到服务端共享目录
5.1.2 在 harbor01 上验证¶
查看 /nfsbackup/:
ll /nfsbackup/
如果这里也同步出现这些文件,说明:
- Sersync 已经监听到变化
- 并成功调用 rsync 把文件推送到远端
5.2 测试文件删除同步¶
在 gitlab-01 上删除文件:
rm -f /upload/*
5.2.1 在 nfs01 上验证¶
ll /data/
目录为空,说明 NFS 侧删除已经生效。
5.2.2 在 harbor01 上验证¶
ll /nfsbackup/
如果远端目录也同步变为空,说明删除事件同样被实时同步过去了。
六、如何判断整条实时同步链路已经打通¶
如果新增文件和删除文件两组测试都成功,实际上已经证明下面三段能力都正常:
1、gitlab-01 -> nfs01 的 NFS 写入链路正常
2、nfs01 上的 Sersync 监听机制正常
3、nfs01 -> harbor01 的 Rsync 推送链路正常
这意味着整条“共享存储 + 实时同步 + 远端备份”的链路已经闭环。
七、Sersync 场景里最容易忽略的排查点¶
实际排查时,建议优先检查下面几项:
/etc/rsync.client是否存在且权限正确confxml.xml中监听目录和远端模块名是否写对- Rsync 服务端的模块
[nfsbackup]是否已配置并启动 /var/log/rsync_fail.log是否有同步失败记录- NFS 挂载是否正常
因为 Sersync 本身只是“中间协调者”,只要上下游任意一段出问题,最终效果就会异常。
八、小结¶
Sersync 的部署思路可以概括成一句话:
- 监听本地目录变化,再自动调用 rsync 同步到远端
真正落地时,最关键的是三件事:
confxml.xml配置要写对- Rsync 和 NFS 底层环境要先通
- 联调时要同时验证新增和删除两类动作
把这套流程跑通之后,实时同步服务就不再是一个抽象概念,而是一条可以稳定工作的实际链路。