NFS — Network File System
NFS(Network File System,网络文件系统)是一种分布式文件系统协议,让客户端通过网络像访问本地文件一样读写远程服务器上的文件。它是 Linux 集群架构中文件服务器层的基础方案,核心用途是实现跨服务器的文件共享。
原理与架构
NFS 基于 RPC(Remote Procedure Call) 机制工作:
客户端请求 → RPC(portmap/rpcbind)→ NFS 服务端 → 本地文件系统
关键进程
| 进程 | 功能 |
|---|---|
rpc.statd | 网络状态监控,配合锁定 |
rpc.mountd | 挂载认证,校验客户端权限 |
rpc.nfsd | NFS 服务本身 |
rpcbind | 端口映射器(客户端先查端口再连接) |
通信流程
- 客户端向服务端 rpcbind 查询 NFS 端口
- rpcbind 返回 rpc.nfsd 的端口号
- 客户端直接连接 NFS 服务端口
- 服务端读取本地文件系统返回数据
配置详解
服务端 /etc/exports
/share 192.168.71.0/24(rw,sync,no_root_squash)
export 核心选项
| 选项 | 说明 | 推荐场景 |
|---|---|---|
rw / ro | 读写 / 只读 | 共享上传目录用 rw |
sync / async | 同步写入 vs 异步 | 生产用 sync(安全) |
wdelay / no_wdelay | 合并写入 vs 立即写入 | 小文件用 no_wdelay |
root_squash / no_root_squash | root 降级 vs 保留权限 | 默认 root_squash |
all_squash | 所有用户降级 | 匿名共享 |
subtree_check | 跨子目录导出检查 | 大目录关掉提升性能 |
客户端挂载
mount -t nfs server:/share /local/mount配置 /etc/fstab 自动挂载,用 netstat -r 查看 NFS 连接状态。
高可用方案
NFS 单点故障解决方案:Keepalived + Rsync
主 NFS ←→ Rsync 同步 → 备 NFS
↑ ↑
└─── Keepalived VIP ───┘
- Keepalived:虚拟 IP(VIP)漂移,故障自动切换
- Rsync:主备数据同步(
rsync -avz) - ⚠️ 脑裂风险:需第三方仲裁
存储架构对比
| 类型 | 协议 | 共享 | 性能 | 场景 |
|---|---|---|---|---|
| DAS | SATA/SAS | ❌ | ⭐⭐⭐ | 本地盘 |
| NAS(NFS/SMB) | TCP/IP | ✅ | ⭐⭐ | 文件共享 |
| SAN(FC/iSCSI) | FC/网络 | ✅ | ⭐⭐⭐ | 数据库块存储 |
NFS vs 分布式文件系统
| 方案 | 特点 | 适合场景 |
|---|---|---|
| NFS | 简单成熟,单点 | 中小规模文件共享 |
| Ceph | 统一存储(对象/块/文件) | 大规模生产首选 |
| FastDFS | Tracker+Storage 架构 | 中小规模图片/文件 |
| GlusterFS | 无中心节点,POSIX | 中大规模文件 |
| HDFS | Hadoop 生态,大文件追加 | 大数据分析 |
相关页面
- 存储管理:文件系统基础(ext4/xfs/LVM/Swap)
- 文件服务器层:NAS/SAN/DAS 对比、分布式存储概述
- NFS 部署:RPC 原理、export 配置、高可用实战
- Keepalived:NFS 高可用依赖组件