一、什么是nfs
是network file system 的缩写,网络文件系统,NFS共享存储
二、nfs的功能
通过 局域网络 ,实现不同主机系统之间的目录共享
三、nfs解决的问题
1.解决了多台web静态资源的共享(所有客户端都挂在服务端,看到的数据都一样)
2.解决了多台web静态资源的一致性(如果客户端A删除NFS服务上的test的文件one.txt,那客户端B也会看不到文件one.txt)
3.解决了多台web磁盘空间的浪费
4.能够快速迭代web服务器的代码
四、nfs注意事项
1.增加nfs会增加资源访问的延时
2.建议使用cdn,来加快对静态资源的访问速度,缓存节点,就近访问
五、nfs服务的实现
-
实现原理
1.NFS客户端执行增、删等操作,客户端会使用不同的函数对该操作进行封装。
2.NFS客户端会通过TCP/IP的方式传递给NFS服务端。
3.NFS服务端接收到请求后,会先调用portmap进程进行端口映射。
4.nfsd进程用于判断NFS客户端是否拥有权限连接NFS服务端。
5.Rpc.mount进程判断客户端是否有对应的权限进行验证。
6.idmap进程实现用户映射和压缩。
7.最后NFS服务端会将客户端的函数转换为本地能执行的命令,然后将命令传递至内核,由内核驱动硬件。
NO.1:服务端
1.安装
[root@nfs ~]# yum install rpcbind nfs-utils -y
注意:rpc是一个远程过程调用,那么使用nfs必须有rpc服务
2.对配置文件进行配置
#在配置文件中添加如下内容
[root@nfs ~]# vim /etc/exports
/data 172.16.1.0/24(rw,sync,all_squash)
配置文件中内容的语法格式
服务端共享的目录 允许连接NFS服务端的网段(共享参数)
nfs共享参数 | 含义 |
---|---|
rw | 读写权限 |
ro | 只读权限 |
sync | 同时将数据写入到内存和硬盘中,保证数据不丢失 |
async | 优先将数据保存到内存,然后再写入硬盘;效率更高,但数据可能会丢失 |
root_squash | 当NFS客户端以root管理员访问时,映射为NFS服务器的匿名用户(不常用) |
no_root_squash | 当NFS客户端以root管理员访问时,映射为NFS服务器的root管理员(不常用) |
no_all_squash | 无论NFS客户端是用什么账户访问,都不进行压缩(kvm热迁移) |
all_squash | 无论客户端是用什么账户访问,均映射为NFS服务器的匿名用户 |
anonuid=数值 | 配置all_squash使用,指定NFS的用户UID,必须系统存在 |
anongid=数值 | 配置all_squash使用,指定NFS的组GID,必须系统存在 |
3.根据配置文件创建共享目录
[root@nfs ~]# mkdir /data
#系统默认的匿名用户是 nfsnobody ,更改共享目录属主和属组
[root@nfs ~]# chown -R nfsnoboy.nfsnobody /data
4.启动服务
[root@nfs ~]# systemctl start nfs
[root@nfs ~]# systemctl enable nfs #设定为开机自启
小结
①对于共享参数中,指定UID和GID,服务端需要创建对应ID号的用户主和用户组。
②为了避免程序在操作NFS时,权限会出现错误,客户端也需要创建与nfs存储压缩的用户的相同用户
NO.2:客户端
1.安装软件包
[root@web01 ~]# yum install nfs-utils -y
2.检查服务端共享的目录详情
[root@web01 ~]# showmount -e 172.16.1.31
3.挂载共享目录到客户端的本地
[root@web01 ~]# mount -t nfs 172.16.1.31:/data /mnt
临时挂载
4.检查是否已经挂载成功
[root@web01 ~]# df -h |grep mnt
六、NFS存储总结
优点:
1.简单易用、方便部署、数据可靠、服务稳定、满足中小企业需求。
2.NFS的数据都在文件系统上,所有数据都能看得见。
局限性:
1.不支持集群,高可用实现复杂。
2.NFS数据都是明文的,数据不需要校验,也没有密码验证(内网使用good)。
应用建议
1.将静态数据尽可能放置CDN节点,较少后端存储压力。
2.如果没有缓存、架构或代码等,本身历史遗留问题太大,在多存储也没意义。