在CentOS 9系统中为Discuz!论坛配置双服务器+NFS共享附件目录的详细步骤如下:
**一、架构说明**
- **NFS服务器**:存储图片附件(假设IP:192.168.1.100)
- **Web服务器A/B**:运行OpenResty+Discuz!(假设IP:192.168.1.101/102)
- **共享目录**:`/data/attachments`(需双向实时同步)
**二、NFS服务器配置**
# 1. 安装NFS服务
bash
dnf install nfs-utils -y
systemctl enable --now nfs-server
# 2. 创建共享目录并授权
bash
mkdir -p /data/attachments
chmod 777 /data/attachments # 或指定www-data用户权限
chown nobody:nobody /data/attachments # NFS默认映射用户
# 3. 配置NFS导出规则
编辑 `/etc/exports`:
bash
/data/attachments 192.168.1.101(rw,sync,no_subtree_check,no_root_squash)
/data/attachments 192.168.1.102(rw,sync,no_subtree_check,no_root_squash)
生效配置:
bash
exportfs -arv
# 4. 防火墙放行NFS
bash
firewall-cmd --permanent --add-service={nfs,mountd,rpc-bind}
firewall-cmd --reload
**三、Web服务器配置(两台相同操作)**
# 1. 安装NFS客户端
bash
dnf install nfs-utils -y
# 2. 创建本地挂载点
bash
mkdir -p /data/attachments
# 3. 手动挂载NFS共享
bash
mount -t nfs4 192.168.1.100:/data/attachments /data/attachments
# 4. 配置开机自动挂载
编辑 `/etc/fstab` 添加:
bash
192.168.1.100:/data/attachments /data/attachments nfs4 defaults,vers=4.2,_netdev 0 0
验证挂载:
bash
mount -a
**四、OpenResty权限适配**
# 1. 确保用户权限一致
检查OpenResty进程用户(通常为`nginx`或`www-data`):
bash
ps aux | grep nginx
若NFS目录属主为`nobody`,需调整:
bash
# 在NFS服务器执行
chown -R www-data:www-data /data/attachments
# 2. 配置SELinux(如启用)
bash
setsebool -P httpd_use_nfs=1
semanage fcontext -a -t httpd_sys_rw_content_t "/data/attachments(/.*)?"
restorecon -Rv /data/attachments
**五、Discuz!配置调整**
1. 登录Discuz!后台,修改附件路径:
- **全局设置** → **上传设置** → **附件目录** → 设置为`/data/attachments`
2. 迁移历史附件(如有):
bash
rsync -av /原/附件/路径/* /data/attachments/
**六、验证与排错**
# 1. 基础功能测试
bash
# 在Web服务器执行
touch /data/attachments/testfile
ls -l /data/attachments/testfile # 检查NFS服务器是否存在该文件
# 2. 性能调优建议
- **NFS参数优化**:在`/etc/exports`中添加`async,no_wdelay`提升写入速度(牺牲部分一致性)
- **内核优化**:调整`/etc/sysctl.conf`中的`sunrpc.tcp_max_slot_table_entries`
# 3. 常见问题排查
- **挂载失败**:检查`rpcinfo -p 192.168.1.100`确认服务端口可达
- **权限拒绝**:使用`exportfs -v`验证共享规则,`showmount -e 192.168.1.100`查看可挂载目录
- **IO延迟**:`nfsiostat`监控NFS读写性能
**附:高可用增强方案(可选)**
- **NFS集群**:使用DRBD+Keepalived实现NFS主备
- **分布式存储**:替换为GlusterFS/Ceph提供冗余存储
- **实时同步**:采用lsyncd+rsync做多节点双向同步
通过以上配置,两个Discuz!服务器将共享同一附件存储,确保数据一致性。建议定期测试故障转移场景(如卸载NFS模拟服务端宕机),验证系统健壮性。