在CentOS 9系统中为Discuz!论坛配置双服务器+NFS共享附件目录的详细步骤

12May

8:40 AM

22 次浏览

0 条评论

  在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模拟服务端宕机),验证系统健壮性。


留言评论
称呼
邮箱
网址