一、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.txt10.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 底层环境要先通
  • 联调时要同时验证新增和删除两类动作

把这套流程跑通之后,实时同步服务就不再是一个抽象概念,而是一条可以稳定工作的实际链路。