Linux - NFS网络文件系统
一、 Linux - NFS
NFS 介绍
NFS
是 Network File System 的缩写及网络文件系统。NFS
主要功能是通过局域网络让不同的主机系统之间可以共享文件或目录。
NFS
系统和 Windows
网络共享,网络驱动器类似,只不过windows
用于局域网,NFS
用于企业集群架构中,如果是大型网站,会用到更复杂的分布式文件系统FastDFS
,glusterfs
,HDFS
我们使用数据存储共享服务可以实现:
- 实现多台服务器之间的数据共享
- 实现多台服务器之间的数据一致
NFS 实现场景
- A 用户上传图片经过负载均衡,负载均衡将上传请求调度至
WEB1
服务器上。 - B 用户访问 A 用户上传的图片,此时 B 用户被负载均衡调度至
WEB2
上,因为WEB2
上没有这张图片,所以 B 用户无法看到 A 用户上传的图片。
使用共享存储的情况:
- A 用户上传图片无论被负载均衡调度至
WEB1
还是WEB2
,最终数据都会被写入至共享存储。- B 用户访问 A 用户上传的图片时,无论被调度至
WEB1
还是WEB2
,最终都会访问到共享存储对应的文件,这样就可以访问到资源了。
- B 用户访问 A 用户上传的图片时,无论被调度至
NFS 实现原理
本地文件操作方式
- 当用户执行
mkdir
命令时,该命令会调用shell
解释器翻译给内核。 - 内核解析完成后会驱动对应的硬件设备,完成相应的操作。
NFS 实现原理(需要了解 程序 、进程、线程)
- 用户进程访问
NFS
客户端,使用不同的函数对数据进行处理。 NFS
客户端通过TCP/IP
的方式传递给NFS
服务端。NFS
服务端接收到请求后,会先调用portmap
线程进行端口映射。nfsd
进程用于判断NFS
客户端是否拥有权限连接NFS
服务端。Rpc.mount
进程判断客户端是否有对应的权限进行验证。idmap
进程实现用户映射和压缩。- 最后
NFS
服务端会将对应请求的函数转换成本地能识别的命令,传递至内核,由内核驱动硬件。
注意:rpc
是一个远程过程调用,那么使用 NFS
必须有 rpc
服务。
NFS 使用
环境准备
角色 | 外网 IP | 内网IP |
---|---|---|
NFS 服务端 | eth0:10.0.0.1 | eth1:192.168.1.1 |
NFS 客户端 | eth0:10.0.0.2 | eth1:192.168.1.2 |
服务端
1 | 1. 准备 |
1 | 2. 安装 nfs 服务端 |
1 | 3. 配置 nfs 服务 |
1 | 4. 配置场景 |
1 | 5. 设置开机自启 |
NFS客户端挂载卸载
1 | NFS 客户端的配置步骤也十分简单。先使用 showmount 命令,查询 NFS 服务器的远程共享信息,其输出格式为“共享的目录名称 允许使用客户端地址”。 |
1 | 2. 客户端查看挂载源 |
1 | 3. 客户端挂载 |
1 | 4. 挂载成功后可以进行增删改操作 |
1 | 5. 开机挂载 |
1 | 6. 卸载nfs |
1 | 7. 增加安全性 |
1 | 8. 增加性能 |
NFS 配置详解
查看帮助:
执行 man exports
命令,然后切换到文件结尾,可以快速查看如下样例格式:
1 | rw* #读写权限 |
验证 ro 权限实践
服务端
1 | 服务端修改rw为ro参数 |
客户端验证
1 | [root@nfs-client ~]# mount -t nfs 172.16.1.31:/data /mnt |
验证all_squash、anonuid、anongid权限
服务端
1 | 1. 服务端配置 |
1 | 2. 服务端需要创建对应的用户 |
1 | 3. 重新加载 nfs-server |
1 | 4. 授权共享目录为 www |
客户端
1 | 1. 重新挂载 |
NFS 存储 总结
NFS
存储优点- NFS文件系统简单易用、方便部署、数据可靠、服务稳定、满足中小企业需求。
- NFS文件系统内存放的数据都在文件系统之上,所有数据都是能看得见。
NFS
存储局限- 存在单点故障, 如果构建高可用维护麻烦
web->nfs()->backup
- NFS数据明文, 并不对数据做任何校验。
- 客户端挂载NFS服务没有密码验证, 安全性一般(内网使用)
- 存在单点故障, 如果构建高可用维护麻烦
NFS
应用建议- 生产场景应将静态数据尽可能往前端推, 减少后端存储压力
- 必须将存储里的静态资源通过CDN缓存
jpg\png\mp4\avi\css\js
- 如果没有缓存或架构本身历史遗留问题太大, 在多存储也无用
NFS 案例实践
准备 3 台 服务器,并且请按照要求搭建配置 NFS服务。
服务器 | 权限 |
---|---|
NFS服务端(A) | 共享/data/w(可写)及/data/r(只读) |
NFS客户端(B) | 挂载 |
NFS客户端(C) | 挂载 |
NFS 服务端配置
1 | 1.安装nfs |
1 | 2.配置nfs |
1 | 3.创建对应用户 |
1 | 4.创建共享目录 |
1 | 5.重启NFS |
NFS客户端配置
1 | 1.安装nfs工具 |
1 | 2.准备本地挂载点目录 |
1 | 3.准备对应用户 |
1 | 4.查看远端共享的nfs目录 |
1 | 5.挂载对应目录站点 |
1 | 6.测试/data/r读权限 |
1 | 7.测试/data/w写权限 |
1 | 8.实现开机自动挂载 |
1 | 9.卸载nfs |
NFS 额外配置
1 | 1.扩展:无需重启NFS服务平滑加载配置文件 |
1 | 2.扩展:nfs客户端挂载参数 |
1 | 3.扩展:nfs客户端永久挂载参数 |
1 | 4.扩展:客户端检查挂载参数是否生效 |