一、先看清三台机器分别扮演什么角色¶
原始笔记在“极速上手指南”里给出了完整环境说明:
| 主机 | 角色 |
|---|---|
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 配置和联调测试才会顺利得多。这也是实时同步服务真正稳定运行的前提。