一、什么是NFS?
全称 network file system 网络文件系统
通过网络存储和组织文件的一种方法或机制。
什么是文件系统?
操作系统中负责管理和存储文件信息的软件结构称为文件管理系统,简称文件系统
二、为什么要用共享存储?
前端所有的应用服务器接收到用户上传的图片、文件、视频,都会统一的放到后端的存储上。为什么要共享?所有节点服务器都需要将内容存到存储上,取的统一来取。
有无NFS对比:
三、NFS工作流程
![](https://i-blog.csdnimg.cn/blog_migrate/7277eb01267d7483f5a0ab877f2e70f1.png)
四、工作原理
![](https://i-blog.csdnimg.cn/blog_migrate/da55415fa2f3472a78db923805f64d78.png)
![](https://i-blog.csdnimg.cn/blog_migrate/99150b17953d190077885cd6cd0a69f9.png)
五、实践
![](https://i-blog.csdnimg.cn/blog_migrate/e233f4886ba434974f3427ff459f652c.png)
1、客户端与服务端
rpm -qa nfs-utils rpcbind
yum install nfs-utils rpcbind -y
systemctl start rpcbind.service(端口111)
systemctl enable rpcbind.service
2、NFS服务端(172.16.1.31)
配置/etc/exports------配置客户端网段与权限等等
/data 172.16.1.0/24(rw,sync,all_squash,anonuid=1111,anongid=1111)
/data1 10.0.0.0/24(ro)
#表示共享服务器上的/data1目录只有10.0.0.0主机可以访问,且有只读权限
NFS配置权限设置常用参数说明<=====
创建、授权共享目录:chown -R nfsnobody.nfsnobody /data 查看ll
平滑重启NFS服务:systemctl reload nfs等价于exportfs -r
检查挂载:showmount -e 172.16.1.31
服务端本地挂载:mount -t nfs 172.16.1.31:/data /mnt 查看:df -h
3、客户端(10.0.0.7)
查看是否开启rpcbind:ps -ef|grep rpcbind
查看NFS服务器提供的共享目录:showmount -e 172.16.1.31
查看一下RPC有没有注册:rpcinfo -p 172.16.1.31
创建、授权:chown -R nfsnobody.nfsnobody /data
挂载测试:
mount -t nfs 172.16.1.31:/data /mnt(把服务端共享目录/data挂载到本地目录/mnt)
df -h
测试的时候可以在/mnt目录创建文件(看/etc/exports给的权限)测试。
扩展:
[ root@ nfs01 ~]# exportfs -o rw,sync 172.16.1.31:/test 临时挂载目录
[ root@ nfs01 ~]# showmount -e 172.16.1.31 查看挂载目录
六、优点与局限性
优点
- ①简单,容易上手,容易掌握。
- ②NFS文件系统内数据是在文件系统之上的,即数据是能看得见的。
- ③部署快速,维护简单方便,且可控,满足需求的就是最好的。
- ④可靠,从软件层面上看,数据可靠性高,经久耐用。数据是在文件系统之上的。
- ⑤服务非常稳定。
局限:
1、存在单点故障,如果NFS Server宕机了,所有客户端都不能访问共享目录。
2、在大数据高并发的场合,NFS效率、性能有限(2千万/日以下PV的网站不是瓶颈,除非网站架构设计太差)。
可以考虑购买CDN服务。CDN:网站加速器,分布式缓存服务。
3、客户端认证是基于IP和主机名的,权限要根据ID识别,安全性一般(用于内网则问题不大)。(没有用户名跟密码——》安全性不高)
4、NFS数据是明文的,NFS本身不对数据完整性作验证。
5、多台客户机器挂载一个NFS服务器时,连接管理维护麻烦(耦合度高)。尤其NFS服务端出问题后,所有NFS客户端都处于挂掉状态
(测试环境可使用autofs自动挂载解决,正式环境可修复NFS服务或强制卸载)。
应用建议:
大中小型网站(参考点2000万/日PV以下)线上应用,都有用武之地。门户站也会有应用,生产场景应该多把数据的访问往前推,
即尽量把静态存储里的资源通过CDN或缓存服务器提供服务,如果没有缓存服务或架构不好,存储服务器数量再多也是扛不住压力的,
而且用户体验会很差。
解决NFS性能问题:
(内存优化,挂载优化,磁盘选择:scsi,raid10,CDN,弃用NFS,切割目录)。
1、硬件:sas/ssd磁盘,买多块,硬件raid,制作raid5或raid10。网卡吞吐量要大,至少千兆(多块bond)。
2、NFS服务器端配置:
/data 172.16.1.0/24(rw,sync,all_squash,anonuid=65534,anongid=65534)
3、NFS客户端挂载优化配置命令:
mount -t nfs -o,nosuid,noexec,nodev,noatime,nodiratime,rsize=131072,wsize=131072 172.16.1.31:/data/ /mnt<==兼顾安全性能
4、对NFS服务的所有服务器内核进行优化时,执行如下命令:
cat >>/etc/sysctl.conf<<EOF
net.core.wmem_default = 8388608
net.core.rmem_default = 8388608
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
EOF
5、使用CDN加速以及自己搭建文件缓存服务(squid.nginx,varnish)。
6、把多个目录分配到不同的NFS服务器上。
7、弃用NFS
8、使用分布式文件系统。