Skip to content

实时同步工具概述

解决 NFS 单点故障

目前用来解决nfs单点故障

什么是单点故障

NFS 单点故障(Single Point of Failure, SPOF) 是指在 NFS 架构中,某个组件或节点发生故障时,可能导致整个系统无法正常工作或服务不可用的情况。简单来说,就是 NFS 服务器本身或其某个关键组件是唯一的故障点,如果发生故障,所有依赖于该 NFS 服务的客户端将无法访问共享文件系统。

为什么会有单点故障

在传统的 NFS 架构中,NFS 服务器是集中式的,所有客户端都依赖它提供的文件访问服务。如果服务器宕机或出现故障,所有客户端都会受到影响。

实时同步工具对比

同步工具是否推荐监控方式部署方式额外特性维护状态
inotify❌ 不推荐目录变化监控需结合rsync使用需手动编写脚本基础功能稳定
sersync⚠️ 慎用配置文件指定目录二进制部署基于inotify+rsync二次开发长期未更新
lsyncd✅ 推荐配置文件监控apt/yum安装原生支持rsync/SSH等协议持续维护

Lsyncd 配置测试

环境配置

角色主机名IP地址
lnfs0110.0.0.31
lsyncd客户端(数据收集)10.0.0.41

Lsyncd 客户端流程

shell
Lsyncd前提是已经安装rsync了,在前面已经写过 就不多说了
[root@backup ~]# cat   /etc/rsyncd.conf 
[nfsbackup]
comment = /nfsbackup/
path = /nfsbackup/

[root@backup ~]# vim  /etc/rsyncd.conf 
[root@backup ~]# mkdir -p /nfsbackup/
[root@backup ~]# chown -R rsync.rsync /nfsbackup/
[root@backup ~]# ll -d /nfsbackup/
drwxr-xr-x 2 rsync rsync 6  3月 23 21:53 /nfsbackup/
[root@backup ~]# systemctl restart nfs
#本地测试
root@backup ~]# rsync -avz /etc/hostname rsync_backup@backup::nfsbackup
Password: 
sending incremental file list
hostname

sent 102 bytes  received 43 bytes  58.00 bytes/sec
total size is 7  speedup is 0.05

[root@backup ~]# cat  /nfsbackup/hostname 
backup
#Success

Lsync 服务端流程

shell
# Debian/Ubuntu
apt install lsyncd

# CentOS/RHEL
yum install lsyncd

#查看配置文件路径
[root@nfs01 ~]# rpm -ql lsyncd
/etc/logrotate.d/lsyncd
/etc/lsyncd.conf


[root@nfs01 ~]# cat /etc/lsyncd.conf 
settings {
    logfile = "/var/log/lsyncd.log",  -- 日志文件,主要查看日志文件
    pidfile = "/var/run/lsyncd.pid",  -- PID文件
    statusFile = "/var/log/lsyncd.status",  -- 服务状态文件
    nodaemon = true,  -- 改为非守护进程模式,默认rsync命令,lsyncd
    maxProcesses = 2  -- 控制最多用于传输数据的进程数量(rsync进程数),根据CPU核心数来一致或2倍
}

sync {
    default.rsync,  -- 指定rsync工作模式
    source = "/data/",  -- 指定lsyncd监控目录,源目录
    target = "rsync_backup@172.16.1.41::nfsbackup",  -- 指定目标rsync服务端,用户名@IP地址::模块名字
    delay = 15,  -- 每隔15秒同步一次
    delete = true,  -- rsync命令的--delete选项
    rsync = {
        binary = "/usr/bin/rsync",  -- 命令位置
        archive = true,  -- rsync命令的-a选项
        compress = true,  -- rsync命令的-z选项,压缩
        password_file = "/etc/rsync.client"  -- 配置rsync--password-file密码文件
    }
}


[root@nfs01 ~]# mkdir -p /data/
[root@nfs01 ~]# chmod 600 /etc/rsync.client 
[root@nfs01 ~]# ll -d /etc/rsync.client 
-rw------- 1 root root 2  2月 25 17:12 /etc/rsync.client
[root@nfs01 ~]# systemctl restart lsyncd
#看日志是否成功
[root@nfs01 ~]# tail -f /var/log/lsyncd.log 
Tue Mar 25 21:51:22 2025 Normal: recursive startup rsync: /data/ -> rsync_backup@172.16.1.41::nfsbackup/
Tue Mar 25 21:51:22 2025 Normal: Startup of /data/ -> rsync_backup@172.16.1.41::nfsbackup/ finished.

[root@nfs01 /data]# systemctl status lsyncd
 lsyncd.service - Live Syncing (Mirror) Daemon
   Loaded: loaded (/usr/lib/systemd/system/lsyncd.service; enabled; vendor preset: disabled)
   Active: active (running) since Tue 2025-03-25 21:53:06 CST; 2min 3s ago

测试

nfs 在/data/目录创建之后

在 backup 的/nfsbackup/查看是否有文件

感谢阅读,欢迎交流!