一、先看清三台机器分别扮演什么角色

原始笔记在“极速上手指南”里给出了完整环境说明:

主机 角色
harbor01 Rsync 服务端
nfs01 Rsync 客户端 / NFS 服务端
gitlab-01 NFS 客户端

从这个角色划分可以看出,整个实时同步链路分成三段:

1、gitlab-01 把文件写入 NFS 挂载目录 2、文件实际落在 nfs01 的共享目录 /data/ 3、nfs01 上的 Sersync 再把变化通过 rsync 推送到 harbor01

二、先部署 Rsync 服务

2.1 Rsync 服务端部署

2.1.1 检查或安装 rsync

rpm -qa | grep rsync
yum install -y rsync

2.1.2 配置 /etc/rsyncd.conf

原始笔记里的配置重点如下:

fake super = yes
uid = rsync
gid = rsync
use chroot = no
max connections = 2000
timeout = 600
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
ignore errors
read only = false
list = false
auth users = rsync_backup
secrets file = /etc/rsync.password

[backup]
comment = zq created
path = /backup

[nfsbackup]
comment = zq created
path = /nfsbackup/

和普通备份场景相比,这里特别多了一个模块:

  • [nfsbackup]

它专门用于承接后面 Sersync 从 NFS 侧推送过来的实时同步数据。

2.1.3 检查进程和端口

ps -ef | grep rsync
ss -lntup | grep rsync

默认监听端口是:

  • 873

2.1.4 创建运行用户和密码文件

useradd -s /sbin/nologin -M rsync
echo 'rsync_backup:111' > /etc/rsync.password
chmod 600 /etc/rsync.password

2.1.5 创建共享目录并启动服务

mkdir /nfsbackup/
chown -R rsync.rsync /nfsbackup/
systemctl start rsyncd && systemctl enable rsyncd

2.1.6 本地测试

rsync -av /etc/hostname rsync_backup@192.168.1.67::nfsbackup
ll /nfsbackup/

只要能看到文件出现在 /nfsbackup/,说明这个同步目标模块已经能正常工作。

2.2 Rsync 客户端部署

2.2.1 检查或安装 rsync

rpm -qa | grep rsync
yum install -y rsync

2.2.2 做基础推送测试

rsync -av /etc/hosts rsync_backup@192.168.1.67::nfsbackup

2.2.3 配置免密文件

echo '111' > /etc/rsync.client
chmod 600 /etc/rsync.client

然后就可以通过:

rsync -avz /etc/passwd rsync_backup@192.168.1.67::nfsbackup --password-file=/etc/rsync.client

实现免交互推送。

三、再部署 NFS 服务

3.1 NFS 服务端部署

3.1.1 安装依赖

yum -y install rpcbind nfs-utils

3.1.2 启动服务

systemctl enable rpcbind && systemctl start rpcbind
systemctl enable nfs-server && systemctl start nfs-server

3.1.3 创建共享目录

mkdir -p /data/
chmod 666 /data/

3.1.4 配置 /etc/exports

/data/ 192.168.1.0/24(rw,sync,insecure,no_subtree_check,no_root_squash)

3.1.5 让配置生效

exportfs -r
systemctl reload nfs-server

3.2 NFS 客户端部署

3.2.1 安装依赖

yum -y install rpcbind nfs-utils

3.2.2 先验证服务端导出状态

showmount -e 192.168.1.66

如果输出里能看到:

/data 192.168.1.0/24

说明服务端已经正确导出共享目录。

3.2.3 创建挂载目录并挂载

mkdir /upload/
mount -t nfs 192.168.1.66:/data/ /upload/

3.2.4 验证挂载结果

df -h /upload/

当远端 /data 显示已经挂载到 /upload,就说明 NFS 这条链路已经打通。

四、为什么要先搭好 Rsync 和 NFS 再部署 Sersync

Sersync 本身并不负责:

  • 提供共享存储
  • 接收最终同步数据

它只负责监控目录变化并触发 rsync。

因此在它启动之前,必须先保证两件事已经成立:

1、NFS 的共享目录已经可用 2、Rsync 的远端接收模块已经可用

否则就算 Sersync 启动成功,也没有完整链路可以走。

五、这套基础环境的最小联通路径

在正式部署 Sersync 之前,至少要确认下面两段路径都已经通:

5.1 NFS 路径

gitlab-01 -> 挂载 /upload -> nfs01:/data

5.2 Rsync 路径

nfs01 -> rsync 推送 -> harbor01::nfsbackup

只有这两段都通,最后的实时同步闭环才能成立。

六、小结

实时同步环境搭建的核心,不是在第一步就启动 Sersync,而是先把底层两条基础链路准备好:

  • 一条是 NFS 共享链路
  • 一条是 Rsync 推送链路

等这两部分都验证无误后,后面的 Sersync 配置和联调测试才会顺利得多。这也是实时同步服务真正稳定运行的前提。