(Web→NFS共享→Lsyncd实时同步→Rsync备份服务器),这是生产环境中非常经典的轻量级文件实时同步方案。
一、核心错误汇总(必须先看)
- 致命错误 :
chmod 600 /etc/会把系统核心目录权限改成600,导致所有用户无法访问/etc,系统直接崩溃 - 多处拼写错误 :
rysnc→rsync,intall→install - 关键配置缺失 :
rsyncd.conf、/etc/exports、lsyncd.conf三个核心配置文件没有具体内容 - 命令不完整:服务启动命令格式错误,永久挂载配置有语法错误
- 依赖缺失:Lsyncd需要EPEL源才能安装
- 安全遗漏:完全没有提到防火墙和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:整体功能测试
-
在Web服务器创建文件:
bashtouch /webdata/final_test.txt echo "Hello Real-time Sync" > /webdata/final_test.txt -
在NFS服务器验证:
bashcat /nfsdata/final_test.txt -
在Backup服务器验证:
bashcat /data/backup/final_test.txt -
测试删除同步:
bash# 在Web服务器删除文件 rm -f /webdata/final_test.txt # 验证NFS和Backup服务器上的文件是否也被删除 ls /nfsdata/final_test.txt ls /data/backup/final_test.txt
如果以上三步都能正常同步,说明整个实时同步架构部署成功。
三、生产环境必做的安全和优化配置
-
防火墙配置:
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 -
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 -
定期备份验证 :
建议每天凌晨自动验证备份文件的完整性,避免备份失效。
-
监控告警 :
监控Rsync和Lsyncd服务状态,以及备份目录的磁盘使用率。