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服务状态,以及备份目录的磁盘使用率。

相关推荐
zh路西法5 小时前
【navigation2全局路径更新频率修正】行为树框架的巧妙利用
linux
苏宸啊6 小时前
IPC管道
linux·c++
bush46 小时前
嵌入式linux学习记录十,定时器
linux·嵌入式
峥无6 小时前
Linux进程信号:从基础概念到内核底层原理
linux·运维·服务器·信号处理
广州灵眸科技有限公司6 小时前
瑞芯微RV1126B开发板(EASY-EAI-PI2) 开发(编译)方式说明
linux·服务器·单片机·嵌入式硬件·电脑
土星云SaturnCloud7 小时前
土星云AI边缘计算SE110S系列模型部署实战-YOLOv5
服务器·人工智能·yolo·docker·边缘计算
北山有鸟7 小时前
用开发板的.config替换ubuntu中内核源码目录的.config
linux·运维·ubuntu
qq_452396237 小时前
第二十篇:《Docker 故障排查常用命令与技巧》
运维·docker·容器
jcbut7 小时前
离线安装dify 1.7
linux·运维·dify
艾iYYY8 小时前
string 类的模拟实现
android·服务器·c语言·c++·算法