NFS服务部署

详情
操作系统 Centos 6.8 x86_64
服务情况 关闭iptables和Selinux

1.功能和适用场景

NFS(Network File System),功能同Windows下的磁盘映射,通过网络为其他服务器提供文件读取和存储服务。

适用场景
  • 数据备份
  • 多客户端数据共享读取、写入

2.原理

  1. 客户端通过mount命令访问要挂载的服务器
  2. NFS服务的rpcbind服务告知客户端NFS端口
  3. 客户端挂载NFS服务

NFS服务依赖rpcbind服务(rpcbind是Centos6.x之后的名字,Centos5.x叫portmap) rpcbind服务要优先于NFS服务启动,否则无法注册端口 客户端也依赖NFS服务(不安装会报错)

3.部署架构

主机情况
主机名 角色
test.v.nfs.192.168.0.238 NFS Serve(Master)
test.v.nfs.192.168.0.239 NFS Server(Backup)
test.v.web.192.168.0.233 Nginx+Tomcat(Client)
test.v.web.192.168.0.229 Nginx+Tomcat(Client)
目录初始化
目录位置 作用
/app 应用部署位置
/app/scripts 脚本存放位置
/app/logs 日志存放位置
/data 数据存放位置
/data/bakcup 数据本地备份
/remotebakcup 远端备份目录

服务端

mkdir /app /app/scripts /app/logs /data /data/backup -p

客户端

mkdir /app /app/scripts /app/logs /data /data/backup -p
mkdir /remotebackup

3.安装

NFS Server安装
  • 安装方式 1
yum install nfs-utils rpcbind
  • 安装方式 2
yum groupinstall "NFS file server"
  • 安装方式 3
光盘安装
NFS Client安装
同NFS Server

4.配置

配置开机启动
echo "/etc/init.d/rpcbind start" >> /etc/rc.local
echo "/etc/init.d/nfs start" >> /etc/rc.local
发布目录
echo "/data    192.168.0.0/24(rw,sync)" >> /etc/export
/etc/nfs reload

客户端挂载

mount -t nfs 192.168.0.238:/data /remotebackup

5.参数优化

NFS Server 优化

安全参数

  • 压缩权限到普通用户: all_squash

    备注:Centos 6.x会统一建议相同UID/GID的NFS用户65534;Centos 5.x 需要人工为NFS创建统一的UID/GID

  • 同步写入磁盘:sync(如果raid卡有bbu,是不是可以使用async呢?)

    备注:默认参数,可以不加;异步可提升性能

echo "/data    192.168.0.0/24(rw,all_squash)" >> /etc/export
mount 挂载优化

安全参数

参数 作用
noexec 不允许执行二进制文件
nosuid 不允许设置SUID

性能参数

参数 作用
noatime 不更改文件的访问时间
nodiratime 不更改目录的访问时间
nodev 不解析文件系统中的字符设备或块设备
mount -t nfs -o nodiratime,noatime,nodev,noexec,nosuid 192.168.0.238:/data /nfsdir/
内核优化

内核读写缓冲区配置

6.坑有哪些

  • 单点故障
  • 大并发下性能有限
  • 安全性一般(基于IP和主机名)
  • 和客户端强耦合(服务端挂了,客户端会HANG住)

    7.解决方案

备份角色

NFS + rsync + inotify

高可用性

NFS + heartbeat + DRBD

性能瓶颈

拆分业务
上分布式存储

9.总结

NFS使用非常普遍,使用中需要注意服务端的nfs和rpcbind的启动顺序,客户端挂载主要权衡安全和性能参数,保证业务的前提下,尽量安全。

results matching ""

    No results matching ""