NFS远程挂载
两台服务器主机都需要安装nfs-utils
挂载之后的目录权限问题:
这种场景是典型的 多 Web 节点共享存储架构。实现思路是将 NFS 服务器作为中心存储,web01 和 web02(客户端)都挂载 NFS 的同一个目录。
这样无论用户请求落到哪台机器,上传的图片都会直接写入 NFS 服务器,两台机器读取到的也是同一份数据。
1. 架构规划(假设)
NFS 服务端:
192.168.10.120(存储服务器)Web 客户端:
web01:
192.168.10.100web02:
192.168.10.110
共享数据目录:假设网站图片上传目录为
/code/wordpress/wp-content/uploads
2. NFS 服务端操作(NFS Server)
第一步:创建统一运行用户
为了保证权限一致(避免两台 Web 上的 www 或 nginx 用户 UID/GID 不一致导致无法读写),在 NFS 服务端创建专门的映射用户:
Bash
groupadd -g 666 www
useradd -u 666 -g 666 -M -s /sbin/nologin www
第二步:创建共享目录并赋权
Bash
mkdir -p /data/uploads
chown -R www:www /data/uploads
第三步:编辑共享配置文件 /etc/exports
Bash
vim /etc/exports
写入配置(允许 web01 和 web02 所在网段挂载,并将所有访问用户强制映射为 UID 666 的 www 用户):
Plaintext
/data/uploads 192.168.10.0/24(rw,sync,all_squash,anonuid=666,anongid=666)
第四步:启动服务并生效
Bash
systemctl enable --now nfs-server
exportfs -rv3. Web 节点操作(web01 和 web02 都要做)
第一步:保证 Web 服务的执行用户 UID/GID 为 666
检查或创建 php-fpm / nginx 运行的用户(通常为 www),确保其 UID 和 GID 也是 666:
Bash
# 查看当前 www 用户的 uid
id www
# 若不存在或不一致,建议统一统一为 666
useradd -u 666 -g 666 -M -s /sbin/nologin www
同时确保 nginx.conf 和 php-fpm 进程池配置(www.conf)里的运行用户都是 user = www, group = www。
第二步:迁移存量数据(重要)
如果本地上传目录已有图片,先备份并同步到 NFS:
Bash
# 将现有的图片拷贝到 NFS(可以临时 mount 后拷贝,或者用 rsync)
rsync -avz /code/wordpress/wp-content/uploads/ 192.168.120:/data/uploads/第三步:客户端挂载(开机自启)
直接写入 /etc/fstab(Web 站点的静态资源目录需要长期在线,推荐用 fstab 永久挂载,无需用 autofs):
Bash
vim /etc/fstab
末尾追加:
Plaintext
192.168.10.120:/data/uploads /code/wordpress/wp-content/uploads nfs defaults,_netdev 0 0
注:
_netdev参数表示网络就绪后再挂载,防止开机卡死。
第四步:测试挂载
Bash
mount -a
df -Th
#查看挂载情况
评论