Linux基础:nfs-lsyncd-rsync

(Web→NFS共享→Lsyncd实时同步→Rsync备份服务器),这是生产环境中非常经典的轻量级文件实时同步方案。

一、核心错误汇总(必须先看)

  1. 致命错误chmod 600 /etc/ 会把系统核心目录权限改成600,导致所有用户无法访问/etc,系统直接崩溃
  2. 多处拼写错误rysncrsyncintallinstall
  3. 关键配置缺失rsyncd.conf/etc/exportslsyncd.conf 三个核心配置文件没有具体内容
  4. 命令不完整:服务启动命令格式错误,永久挂载配置有语法错误
  5. 依赖缺失:Lsyncd需要EPEL源才能安装
  6. 安全遗漏:完全没有提到防火墙和SELinux配置(生产环境必做)

二、修正后的完整部署步骤

环境说明

  • 服务器规划:
    • Backup服务器:172.16.1.41(运行Rsync服务)
    • NFS服务器:172.16.1.31(运行NFS服务+Lsyncd客户端)
    • Web服务器:172.16.1.32(挂载NFS共享)
  • 所有服务器均为CentOS 7/8/9系统
  • 所有操作均使用root用户执行

步骤1:部署Backup服务器(Rsync服务端)

1.1 安装Rsync
bash 复制代码
yum install -y rsync
1.2 配置rsyncd.conf(核心配置)
bash 复制代码
cat > /etc/rsyncd.conf << EOF
# Rsync全局配置
uid = rsync
gid = rsync
use chroot = no
max connections = 200
timeout = 300
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log

# 备份模块配置(模块名:data)
[data]
path = /data/backup  # 备份文件存储目录
comment = NFS Data Backup
read only = no       # 允许写入
list = no            # 不显示模块列表
auth users = rsync_backup  # 认证用户名(虚拟用户,非系统用户)
secrets file = /etc/rsync.password  # 密码文件路径
hosts allow = 172.16.1.0/24  # 允许访问的网段(只允许NFS服务器访问)
hosts deny = 0.0.0.0/32      # 拒绝所有其他IP
EOF
1.3 创建系统用户和备份目录
bash 复制代码
# 创建Rsync运行用户(禁止登录)
useradd -s /sbin/nologin -M rsync

# 创建备份目录并设置权限
mkdir -p /data/backup
chown -R rsync:rsync /data/backup
1.4 创建密码文件并设置严格权限
bash 复制代码
# 格式:用户名:密码(和rsyncd.conf中的auth users对应)
echo 'rsync_backup:Rsync@123456' > /etc/rsync.password

# 关键:密码文件权限必须是600,否则Rsync会拒绝运行
chmod 600 /etc/rsync.password
1.5 启动Rsync服务并设置开机自启
bash 复制代码
systemctl enable --now rsyncd
systemctl status rsyncd  # 查看服务状态,确保active(running)
1.6 本地测试Rsync服务
bash 复制代码
# 创建测试文件
touch /tmp/test.txt

# 本地同步测试(::data对应rsyncd.conf中的模块名)
rsync -av /tmp/test.txt rsync_backup@127.0.0.1::data --password-file=/etc/rsync.password

# 验证文件是否同步成功
ls /data/backup/test.txt

步骤2:部署NFS服务器

2.1 安装NFS和RPCBind
bash 复制代码
yum install -y nfs-utils rpcbind
2.2 配置NFS共享目录
bash 复制代码
cat > /etc/exports << EOF
# 格式:共享目录 允许访问的网段(权限参数)
/nfsdata 172.16.1.0/24(rw,sync,all_squash,anonuid=1999,anongid=1999)
EOF
  • 参数说明:
    • rw:读写权限
    • sync:同步写入(数据先写入磁盘再返回,安全性高)
    • all_squash:所有访问用户都映射为匿名用户
    • anonuid=1999,anongid=1999:匿名用户映射为UID/GID=1999的用户(和后面创建的www用户一致)
2.3 创建www用户和共享目录
bash 复制代码
# 创建www用户,指定UID=1999(必须和Web服务器的www用户UID一致)
useradd -s /sbin/nologin -M -u 1999 www

# 创建NFS共享目录并设置权限
mkdir -p /nfsdata
chown -R www:www /nfsdata
2.4 启动服务并设置开机自启
bash 复制代码
# 注意:必须先启动rpcbind,再启动nfs
systemctl enable --now rpcbind
systemctl enable --now nfs-server

# 查看NFS共享列表
exportfs -v

步骤3:Web服务器挂载NFS共享

3.1 安装NFS客户端工具
bash 复制代码
yum install -y nfs-utils
3.2 创建挂载目录
bash 复制代码
mkdir -p /webdata
3.3 临时挂载测试
bash 复制代码
# 注意:IP和共享目录之间的冒号后面**不能有空格**
mount -t nfs 172.16.1.31:/nfsdata /webdata

# 查看挂载结果
df -h | grep nfsdata
3.4 配置永久挂载(重启后自动生效)
bash 复制代码
# 追加到/etc/fstab文件末尾
echo '172.16.1.31:/nfsdata /webdata nfs defaults,_netdev 0 0' >> /etc/fstab

# 验证fstab配置是否正确(如果没有报错则配置正确)
mount -a
  • 关键参数:_netdev 表示网络就绪后再挂载,避免系统启动时因网络未就绪导致挂载失败
3.5 测试NFS读写权限
bash 复制代码
# 在Web服务器创建测试文件
touch /webdata/nfs_test.txt

# 在NFS服务器验证文件是否存在
ls /nfsdata/nfs_test.txt

步骤4:部署Lsyncd实现NFS到Backup的实时同步

在NFS服务器(172.16.1.31)上执行以下操作

4.1 安装EPEL源和Lsyncd
bash 复制代码
# Lsyncd在EPEL源中,必须先安装EPEL
yum install -y epel-release
yum install -y lsyncd
4.2 创建Rsync客户端密码文件
bash 复制代码
# 只需要密码,不需要用户名(和Backup服务器的密码一致)
echo 'Rsync@123456' > /etc/rsync.client

# 设置严格权限
chmod 600 /etc/rsync.client
4.3 配置lsyncd.conf(核心配置)
bash 复制代码
cat > /etc/lsyncd.conf << EOF
settings {
    logfile = "/var/log/lsyncd/lsyncd.log",
    statusFile = "/var/log/lsyncd/lsyncd.status",
    inotifyMode = "CloseWrite",  # 监控文件关闭写入事件(最稳定)
    maxProcesses = 8,            # 最大同步进程数
    nodaemon = false,            # 后台运行
}

sync {
    default.rsync,
    source = "/nfsdata",         # 要监控的源目录(NFS共享目录)
    target = "rsync_backup@172.16.1.41::data",  # 目标Rsync地址
    delete = true,               # 源目录删除文件时,目标目录也同步删除
    delay = 1,                   # 延迟1秒同步(合并频繁写入操作)
    
    rsync = {
        binary = "/usr/bin/rsync",
        archive = true,          # 归档模式(保留权限、时间戳等)
        compress = true,         # 传输时压缩
        password_file = "/etc/rsync.client",  # 密码文件路径
        _extra = {"--bwlimit=20000"}  # 限制带宽为20MB/s(可选,避免占满带宽)
    }
}
EOF
4.4 启动Lsyncd服务并设置开机自启
bash 复制代码
systemctl enable --now lsyncd
systemctl status lsyncd  # 确保服务正常运行
4.5 查看Lsyncd日志(排错必备)
bash 复制代码
tail -f /var/log/lsyncd/lsyncd.log

步骤5:整体功能测试

  1. 在Web服务器创建文件

    bash 复制代码
    touch /webdata/final_test.txt
    echo "Hello Real-time Sync" > /webdata/final_test.txt
  2. 在NFS服务器验证

    bash 复制代码
    cat /nfsdata/final_test.txt
  3. 在Backup服务器验证

    bash 复制代码
    cat /data/backup/final_test.txt
  4. 测试删除同步

    bash 复制代码
    # 在Web服务器删除文件
    rm -f /webdata/final_test.txt
    
    # 验证NFS和Backup服务器上的文件是否也被删除
    ls /nfsdata/final_test.txt
    ls /data/backup/final_test.txt

如果以上三步都能正常同步,说明整个实时同步架构部署成功。


三、生产环境必做的安全和优化配置

  1. 防火墙配置

    bash 复制代码
    # Backup服务器开放873端口(Rsync)
    firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='172.16.1.31/32' port protocol='tcp' port='873' accept"
    firewall-cmd --reload
    
    # NFS服务器开放NFS和RPCBind端口
    firewall-cmd --permanent --add-service=nfs
    firewall-cmd --permanent --add-service=rpc-bind
    firewall-cmd --permanent --add-service=mountd
    firewall-cmd --reload
  2. SELinux配置(如果开启SELinux):

    bash 复制代码
    # NFS服务器允许HTTPD访问NFS共享(如果Web服务器是Apache/Nginx)
    setsebool -P httpd_use_nfs on
    
    # Rsync允许访问备份目录
    setsebool -P rsync_export_all_ro on
    setsebool -P rsync_export_all_rw on
  3. 定期备份验证

    建议每天凌晨自动验证备份文件的完整性,避免备份失效。

  4. 监控告警

    监控Rsync和Lsyncd服务状态,以及备份目录的磁盘使用率。

相关推荐
天蓝不会忘记022 小时前
Kubernetes
服务器
汪汪大队u2 小时前
基于 K8s 的物联网平台运维体系:Ansible+Zabbix 自动化监控与故障自愈(一)—— 环境准备与 Zabbix Server 部署
运维·kubernetes·自动化·ansible·zabbix
杨云龙UP2 小时前
一次 Oracle 11g 异常不可用排查:从 ORA-01034 到磁盘 I/O 故障定位_2026-05-17
运维·数据库·windows·sql·oracle·centos
艾莉丝努力练剑2 小时前
【Linux网络】Linux 网络编程:HTTP(二)HTTP协议请求应答宏观格式(附代码演示)
linux·运维·服务器·网络·tcp/ip·计算机网络
Donk_672 小时前
高可用-Keepalived 解析
运维·服务器·apache
fiveym2 小时前
Linux systemctl服务管理全解析:命令+原理+运维最佳实践
linux·运维·服务器
xlq223222 小时前
56.自定义协议
linux·服务器·网络·网络协议
learning-striving3 小时前
华为云欧拉操作系统的服务器实例中手工部署 Docker
linux·运维·服务器·docker·容器·华为云
戴西软件3 小时前
戴西软件入选2026年安徽省制造业数智化转型服务商名单
java·大数据·服务器·前端·人工智能