NFS共享一个目录后,在两台服务器上通过mount命令即可同时挂载访问,核心在于服务端exports配置正确、网络互通且客户端NFS服务启动。
nfs共享一个目录怎么挂载到2台服务器
服务端配置:编辑exports文件
在NFS服务端上,共享目录的权限通过/etc/exports文件定义,打开该文件,添加一行指定要共享的目录、允许访问的客户端IP范围以及挂载选项,示例如下:
/data 192.168.1.0/24(rw,sync,no_subtree_check)
rw:允许读写。sync:同步写入,保证数据持久化。no_subtree_check:禁用子树检查,提升性能。
保存后执行exportfs -r使配置生效,并确认NFS服务(nfs-server、rpcbind)正在运行,使用showmount -e localhost可查看当前共享的目录列表。
客户端挂载命令与自动挂载设置
在两台客户端服务器上,分别执行以下步骤:
- 创建挂载点目录,例如
mkdir -p /mnt/shared。 - 执行挂载命令:
mount -t nfs 192.168.1.10:/data /mnt/shared。 - 使用
df -h或mount确认挂载成功。
如需开机自动挂载,将以下内容写入/etc/fstab:
168.1.10:/data /mnt/shared nfs defaults,hard,intr 0 0
hard:硬挂载,避免网络中断时应用进程挂起。intr:允许中断被阻塞的挂载操作。
验证读写权限
在客户端上执行touch /mnt/shared/test.txt创建测试文件,并在另一台客户端观察文件是否可见,同时检查文件属主属组,确保UID/GID映射符合预期。
两台服务器挂载同一nfs目录的注意事项
文件锁定与并发写入问题
当两台服务器同时修改同一个文件时,NFS本地文件锁(flock)可能无法跨主机协调,行业共识认为,在并发写入场景下,应使用应用层锁机制(如Redis、数据库行锁)或切换到支持分布式锁的存储方案,NFSv4提供的状态管理比NFSv3更适合多客户端写入,但仍是建议以读为主的工作负载。
权限与用户映射
- 使用
root_squash选项将root用户映射为nfsnobody,可防止root在客户端拥有服务端超管权限,若需保留root权限,可改用no_root_squash,但需谨慎评估安全风险。 - 确保客户端与服务端的用户UID/GID一致,否则可能出现权限混乱,推荐使用LDAP或NIS同步用户信息。
网络延迟与性能影响
NFS对网络延迟敏感,尤其在跨机房或公网环境,建议将NFS部署在同一内网,并使用万兆网络,挂载时使用noatime关闭文件访问时间更新,减少磁盘写操作,若网络抖动频繁,可搭配soft挂载,但可能会丢失数据,生产环境通常选hard。
nfs多服务器挂载性能优化方案
调整挂载参数
| 参数 | 建议值 | 说明 |
|---|---|---|
| rsize | 131072 | 读数据块大小,增大可减少网络包数 |
| wsize | 131072 | 写数据块大小,建议与rsize保持一致 |
| noatime | 关闭访问时间更新,减少写操作 | |
| nodiratime | 关闭目录访问时间更新 | |
| hard+intr | 硬挂载可中断,避免进程死锁 |
在/etc/fstab挂载选项中添加这些参数,
168.1.10:/data /mnt/shared nfs rsize=131072,wsize=131072,noatime,hard,intr 0 0
使用NFSv4与pNFS
NFSv4版本整合了状态管理和伪文件系统,减少了网络协商次数,并支持安全增强(如Kerberos认证),pNFS(并行NFS)允许多个客户端同时访问存储设备,大幅提升多服务器挂载的吞吐量,但pNFS需要服务端硬件支持,且在非SSD阵列上提升有限。
缓存与同步策略
- 使用
sync确保每次写入都落盘,适合对数据一致性要求高的场景。 - 使用
async可提升写入性能,但若服务端宕机,可能丢失未同步的数据,合理做法是结合电池备份的RAID卡或使用NFS日志。
nfs共享存储挂载到两台服务器报错处理
常见错误与排查步骤
- mount.nfs: access denied:检查
/etc/exports中客户端IP或网段是否允许,并执行exportfs -r刷新,确认服务端防火墙未阻止NFS连接。 - mount.nfs: No route to host:在客户端使用
telnet server_ip 2049测试端口连通性,若不通,检查服务端防火墙规则,开放2049、111等端口。 - mount.nfs: Operation not permitted:检查SELinux是否阻止,使用
setsebool -P nfs_export_all_rw 1调整,同时确认客户端挂载目录的本地权限(例如客户端挂载点目录是否可写)。
防火墙与NFS端口
NFS依赖多个端口,典型配置是开放TCP 2049(NFS服务)、111(rpcbind)和动态端口(如20048用于mountd),在生产环境中,建议将NFS服务端与客户端置于同一安全网络,或使用防火墙白名单,命令
showmount -e server_ip可快速测试服务端共享列表是否可达。
多服务器挂载的常见问题
如何测试两台服务器对nfs共享目录的读写权限?
在客户端1上创建文件touch /mnt/shared/from_client1,在客户端2上检查该文件是否存在,并尝试写入内容,若文件属主属组显示为nobody,说明启用了root_squash,如果需要保留用户身份,确保客户端UID与服务端一致,或使用no_all_squash选项。
nfs挂载后无法写入,可能是什么原因?
检查exports配置是否包含ro(只读),客户端挂载选项是否漏加了rw,同时确认服务端目录的本地文件权限(如chmod 777 /data仅用于测试,生产环境应精确控制),SELinux的nfs_export_all_rw布尔值也需设置为on。
nfs共享目录挂载到两台服务器需要额外费用吗?
NFS是Linux内核自带的网络文件系统,无需支付任何许可费用,服务端和客户端只需要安装nfs-utils和rpcbind软件包,不存在额外授权成本,但在云环境中,跨可用区或跨地域的NFS挂载可能产生内网带宽费用,具体需参考云服务商定价。
NFS共享目录挂载到两台服务器,本质上是标准Linux网络文件系统的应用,只要遵循服务端exports配置、客户端挂载参数和权限管理的基本原则,就能稳定运行。 多服务器场景下,重点关注并发写入的冲突处理和网络性能瓶颈,这些直接影响业务的可靠性。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/548170.html



