不同环境的 NFS 配置策略完全不同,核心区别在于:安全性、性能、可靠性和管理便捷性的权衡。
一、三环境配置对比总览
| 维度 | 开发环境 | 测试环境 | 生产环境 |
|---|---|---|---|
| 核心目标 | 便捷开发 | 模拟生产验证 | 稳定、安全、高性能 |
| 安全策略 | 宽松 | 接近生产 | 最严格 |
| 权限控制 | 777 常见 | 按需设置 | 最小权限原则 |
| 性能优化 | 默认 | 部分优化 | 全面调优 |
| 监控告警 | 无 | 基础 | 完善 |
| 高可用 | 无 | 可选 | 必须 |
二、开发环境配置
特点
- 追求便捷性,快速搭建
- 权限宽松,方便调试
- 不考虑高可用
配置示例
# /etc/exports - 开发环境
# 允许整个网段,读写权限,权限映射宽松
/develop/data 192.168.1.0/24(rw,sync,no_root_squash,no_all_squash,insecure)
# 单独给开发人员机器特殊权限
/develop/code 192.168.1.100(rw,no_root_squash)
/develop/code 192.168.1.101(rw,no_root_squash)
目录权限
# 开发环境常用 777 方便调试
mkdir -p /develop/data
chmod 777 /develop/data
chown nobody:nogroup /develop/data # 或直接 root
客户端挂载
# 开发机挂载
mount -t nfs -o vers=4,soft,timeo=50 192.168.1.10:/develop/data /mnt/data
三、测试环境配置
特点
- 接近生产配置
- 权限控制加强
- 可能测试高可用场景
- 有基础监控
配置示例
# /etc/exports - 测试环境
# 只允许测试网段
/testdata/applogs 10.0.1.0/24(rw,sync,no_subtree_check)
/testdata/dbdata 10.0.1.0/24(rw,sync,no_subtree_check)
# 针对特定测试服务器
/testdata/jenkins 10.0.1.50(rw,sync,no_subtree_check)
# 只读挂载给测试监控机
/testdata/reports 10.0.1.200(ro,sync,no_subtree_check)
目录权限(最小权限原则)
# 测试环境严格控制权限
mkdir -p /testdata/applogs
chown appuser:appgroup /testdata/applogs
chmod 750 /testdata/applogs # 所有者读写执行,组读执行,其他无
mkdir -p /testdata/dbdata
chown mysql:mysql /testdata/dbdata
chmod 750 /testdata/dbdata
测试 HA 配置(可选)
# 使用 NFS + DRBD + Pacemaker 模拟生产
# 或使用 NFS-Ganesha + GlusterFS 测试
客户端挂载
# 测试环境使用稳定选项
mount -t nfs -o vers=4,hard,intr,rsize=65536,wsize=65536 10.0.1.10:/testdata/applogs /var/log/apps
四、生产环境配置
特点
- 严格安全控制
- 高性能优化
- 高可用架构
- 完善监控
- 备份恢复
1. 服务端基础配置
# /etc/exports - 生产环境
# 只允许特定生产服务器,使用主机名或固定 IP
/production/web web01.prod.internal(rw,sync,no_subtree_check,sec=krb5p)
/production/web web02.prod.internal(rw,sync,no_subtree_check,sec=krb5p)
/production/web web03.prod.internal(rw,sync,no_subtree_check,sec=krb5p)
/production/db db01.prod.internal(rw,sync,no_subtree_check,sec=krb5p)
/production/db db02.prod.internal(rw,sync,no_subtree_check,sec=krb5p)
# 监控服务器只读权限
/production/logs monitor.prod.internal(ro,sync,no_subtree_check,sec=sys)
2. 内核参数优化
# /etc/sysctl.conf - NFS 优化
# 增加 NFS 线程数
fs.nfs.nlm_tcpport = 32803
fs.nfs.nlm_udpport = 32768
# 提高网络缓冲区
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
3. NFS 服务优化
# /etc/nfs.conf
[nfsd]
# 线程数,通常等于 CPU 核心数 threads=64 # 使用 TCP proto=tcp # 关闭不安全的旧版本 vers2=n vers3=y vers4=y vers4.0=y vers4.1=y vers4.2=n
4. 高可用架构
# 方案1:NFS + Keepalived + Rsync
# 方案2:NFS + DRBD + Pacemaker
# 方案3:分布式存储(Ceph/GlusterFS)替代 NFS
5. 客户端生产级挂载
# /etc/fstab 配置
nfsmaster.prod.internal:/production/web /var/www nfs4 defaults,_netdev,hard,intr,rsize=1048576,wsize=1048576,timeo=600,retrans=2,sec=krb5p 0 0
# 手动挂载选项说明:
# - hard: 硬挂载,IO 请求一直重试
# - intr: 允许中断等待的进程
# - rsize/wsize: 读写块大小,万兆网络用 1MB
# - timeo=600: 超时 60 秒
# - retrans=2: 重试 2 次
# - sec=krb5p: Kerberos 加密认证
五、权限控制详细对比
| 控制项 | 开发环境 | 测试环境 | 生产环境 |
|---|---|---|---|
| exports 网段 | 整个内网 | 测试网段 | 具体 IP/主机名 |
| root_squash | 通常 no_root_squash | root_squash | root_squash |
| all_squash | 不用 | 匿名服务用 | 敏感数据用 |
| 目录权限 | 777 或 755 | 750 或 755 | 750 或 755 |
| 文件权限 | 666 或 644 | 640 或 644 | 640 或 644 |
| 用户映射 | 不映射 | 映射到专用用户 | Kerberos 认证 |
| SELinux | 关闭 | 许可模式 | 强制开启 |
六、性能调优对比
| 优化项 | 开发环境 | 测试环境 | 生产环境 |
|---|---|---|---|
| rsize/wsize | 默认 32K | 64K | 1M(万兆网) |
| NFS 版本 | v3 或 v4 | v4 | v4.1+ |
| 协议 | TCP | TCP | TCP |
| 同步/异步 | sync | sync | async(有 UPS) |
| noatime | 可选 | 是 | 必须 |
| 网络 | 千兆 | 千兆 | 万兆/聚合 |
七、监控和告警配置
生产环境必须监控
# 1. NFS 服务状态
systemctl status nfs-server
# 2. 导出状态
showmount -e localhost
# 3. 连接数监控
netstat -an | grep :2049 | wc -l
# 4. 性能指标
nfsstat -s # 服务端统计
nfsstat -c # 客户端统计
# 5. 目录使用率
df -h /production/data
Prometheus + Grafana 监控
# node_exporter 默认包含 NFS 指标
- job_name: 'nfs_stats'
static_configs:
- targets: ['nfs01:9100', 'nfs02:9100']
八、备份策略对比
| 环境 | 备份频率 | 备份方式 | RPO | RTO |
|---|---|---|---|---|
| 开发 | 无/手动 | 不备份 | – | – |
| 测试 | 每日 | 简单 rsync | 24h | 4h |
| 生产 | 实时/小时 | 快照+远程复制 | 1h | 30min |
九、实际案例配置
案例:生产环境 Web 集群共享静态资源
# 服务端配置
mkdir -p /data/web/static
chown -R www:www /data/web/static
chmod 755 /data/web/static
# /etc/exports
/data/web/static web01(rw,sync,no_subtree_check,sec=krb5p)
/data/web/static web02(rw,sync,no_subtree_check,sec=krb5p)
# 客户端 fstab
nfsserver:/data/web/static /var/www/static nfs4 defaults,_netdev,hard,intr,rsize=1048576,wsize=1048576,sec=krb5p 0 0
十、环境迁移注意事项
从开发 → 测试 → 生产
- 开发环境验证功能
- 测试环境验证:
- 权限是否正确
- 性能是否达标
- 监控是否覆盖
- 生产环境:
- 配置管理(Ansible/Puppet)
- 灰度发布
- 回滚预案
十一、一句话总结
开发环境求方便(777 + 宽松),测试环境求真实(接近生产),生产环境求稳定(最小权限 + 高性能 + 高可用 + 监控完备)。
发表回复