简介:
NFS是network file system的缩写及网络文件系统。nfs主要功能是通过局域网让不同的主机之间可以共享文件或目录;nfs系统和Windows网络共享、网络驱动器类似,只不过Windows用于局域网nfs用于企业集群架构中;如果是大型网站,会用到更复杂的分布式文件系统FastDFS(音频,小说,视频),glustrfs(ISO镜像),HDFS
nfs(2049端口):
解决前端web静态资源的共享
解决前端web静态资源一致性
解决前端web磁盘空间的浪费
并不能解决网站访问的延时,如果想解决访问延时:静态资源走CDN
nfs实现原理:
- 用户进程访问NFS客户端使用不同的函数对数据进行处理
- NFS客户端通过TCP/IP的方式传递给NFS服务端
- NFS服务端接收到请求后,会先调用portmap进程进行端口映射
- nfsd进程用于判断NFS客户端是否拥有连接NFS服务端
- Rpc.mount进程判断客户端是否有对应的权限进行验证
- idmap进程实现用户映射和压缩
- 最后NFS服务端会将对应请求的函数转换为本地能识别的命令,传递至内核,由内核驱动硬件
注意:rpc是一个远程过程调用,那么使用nfs必须有rpc服务
nfs安装:
yum install nfs-utils -y [默认安装rpcbind并启动]
配置:
rpm -qc nfs-utils
vim /etc/exports
/data 172.16.1.0/24(rw,sync,all_squash)
mkdir /data
chown -R nfsnobody,nfsnobody /data
启动:
systemctl start nfs
systemctl enable nfs
检查:
cat /var/lib/nfs/etab
客户端:
安装
yum install nfs-utils -y
检查NFS是否有共享的内容
showmount -e 172.16.1.31
挂载:
mount -t nfs 172.16.1.31:/data /opt
echo "172.16.1.31:/data /opt nfs defaults 0 0">>/etc/fstab
mount -a #验证fstab开机启动是否填写错误
配置文件参数详解
rw 读写权限
ro 只读权限
root_squash 当NFS客户端以root管理员访问时,映射为NFS服务器的匿名用户(不常用)
no_root_squash 当NFS客户端以root管理员访问时,映射为NFS服务器的root管理员(不常用)
all_squash 无论NFS客户端使用什么账户访问,均隐射为NFS服务器的匿名用户
no_all_squash 无论NFS客户端使用什么账户访问,都不进行压缩
sync 同时将数据写入到内存与硬盘中,保证不丢失数据
async 优先将数据保存到内存,然后写入硬盘,这样效率更高,但可能丢失数据
anonuid 配置all_squash使用,指定NFS的用户UID,必须存在系统
anongid 配置all_squash使用,指定NFS的用户GID,必须存在系统
nfs存储优点
- NFS文件系统简单易用、方便部署、数据可靠、服务稳定、满足中小企业需求
- NFS文件系统内存的数据都在文件系统之上,所有数据都是能看得见
NFS存储局限
- 存在单点故障,如果构建高可用维护麻烦
- NFS数据明文,并不对数据做任何检验
- 客户端挂载NFS服务没有密码验证,安全性一般(内网使用)
NFS应用建议
- 生产场景应将静态数据尽可能往前端推,减少后端存储压力
- 必须将存储里的静态资源通过CDN缓存jpg/png/mp4/avi/css/js
- 如果没有缓存或架构本身示例遗留问题太大,在多存储也无用