NFS共享存储
一、NFS基本概述
NFS是Network File System的缩写及网络文件系统。NFS主要功能是通过局域网络让不同的主机系统之间可以共享文件或目录。NFS系统和Windows网络共享、网络驱动器类似,只不过windows用于局域网,NFS用于企业集群架构中,如果是大型网站会用到更复杂的分布式文件系统FastDFS、glusterfs、HDFS……
🔎 为什么要用共享存储呢?
① 为了实现多台服务器之间数据共享;② 实现多台服务器之间数据一致
实例解释:A用户上传图片经过负载均衡,负载均衡将上传请求调度至Web1服务器上。B用户访问A用户上传的图片,此时B用户被负载均衡调度至Web2上,因为Web2上没有这张图片,所以B用户无法看到A用户传的图片,试想一下,如果微信的架构是这样的,那我们还会有朋友圈📸这个这样的功能吗?
实例解释:如果使用NFS服务,此时A用户上传图片无论被负载均衡调度至Web1还是Web2, 最终数据都被写入至共享存储,当B用户访问A用户上传图片时,无论负载均衡将其调度至Web1还是Web2,最终都会通过NFS共享存储访问到对应的文件。
二、NFS服务原理
本地过程调用:当用户本地执行某个命令时,该命令会调用shell
解释器翻译给内核,内核解析完成后会驱动对应的硬件设备,完成相应的操作。
远程过程调用:当用户本地执行某个命令时,命令实际写入的地址示远程服务器,则该命令会通过通过网络协议传递给我们实际写入地址的远程服务器,服务器再进行本地过程调用。
NFS服务的实现就是一个远程过程调用:
1.用户进程访问NFS客户端,使用不同的函数对数据进行处理;
2.NFS客户端通过TCP/IP的方式传递给NFS服务端;
3.NFS服务端接收到请求后,会先调用portmap进程进行端口映射;
4.nfsd进程用于判断NFS客户端是否拥有权限连接NFS服务端;
5.Rpc.mount进程判断客户端是否有对应的权限进行验证;
6.idmap进程实现用户映射和压缩;
7.最后NFS服务端会将对应请求进行本地过程调用,以完成客户端相应的操作;
三、NFS服务配置
1、服务端配置
1️⃣ 关闭防火墙;(以免默认的防火墙策略禁止正常的NFS共享服务)
2️⃣ 安装NFS服务端;yum -y install nfs-utils
;
3️⃣ 对NFS服务的配置文件/etc/exports
进行配置;
需要严格按照共享目录的路径、允许访问的NFS客户端(共享权限参数)的格式书写!定义要共享的目录与之相应的权限,具体书写方式如下图所示;
NFS共享目录及配置会记录至/var/lib/nfs/etab
,配置完成需要重启NFS服务,然后再查看/var/lib/nfs/etab
,如果该目录不存在共享信息,则表示配置错误,请重新检查配置信息!
4️⃣ 设置开机自启动服务;(在使用NFS服务进行文件共享之前,需要使用RPC–Remote Procedure Call远程过程调用服务将NFS服务器的IP地址和端口号信息发送给客户端。因此,在启动NFS服务之前,需要先重启并启用rpcbind服务程序,同时都加入开机自启动)
再次检测端口和文件,确保配置正确且服务正常运行。
2、客户端配置
1️⃣ 客户端挂载;(在NFS客户端创建一个挂载目录, 使用mount命令挂载)
3、使用测试
① 客户端创建文件,相当于直接在NFS服务端直接写入;
② 多台客户端挂载NFS服务端,进行访问,内容一致;
③ 文件在NFS服务端删除后,所有客户端均无法访问;