NFS服务介绍
什么是NFS服务
- NFS(Network File System)即网络文件系统,它允许网络中的计算机之间通过TCP/IP网络共享资源。
- 文件形式是nfs4
- 方式是文件访问。一个挂载点可以挂载多个文件系统,默认访问最后挂载的文件系统;一个文件系统也可以被多个挂载点所挂载。
- 基于C/S架构实现
- 在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样,也就是说客户端PC可以挂载NFS服务器所提供的目录并且挂载之后这个目录看起来如同本地的磁盘分区一样,可以使用cp、cd、mv、rm及df等与磁盘相关的命令。
- 用户访问文件,需要通过权限验证,有权限可以访问。在程序的配置文件当中可以设置访问权限,然后对于目录和文件的权限在进行匹配
NFS服务的优缺点
优点
- a.节省本地存储空间将常用的数据存放在一台服务器可以通过网络访问
- b.简单容易上手
- c.方便部署非常快速,维护十分简单
缺点
- a.局限性容易发生单点故障,及server机宕机了所有客户端都不能访问
- b.在高并发下NFS效率/性能有限
- c.客户端没用用户认证机制,且数据是通过明文传送,安全性一般(一般建议在局域网内使用
- d.NFS的数据是明文的,对数据完整性不做验证
- e.多台机器挂载NFS服务器时,连接管理维护麻烦
NFS原理简单介绍
- NFS Server服务器上设定/data目录被分享,而客户端可以通过internet将/data目录挂载到本地的挂载点(常用mnt)后,客户端就可以进入挂载点目录进行文件的读写。
- NFS客户端所开放的端口是随机的,一般是2049
- 因为NFS支持的功能相当多,而不同的功能会使用不同的程序来启动,每启动一个功能就会启动一些端口来传输数据,因此NFS的功能对应的端口并不固定
RPC远程过程调用
- RPC(Remote Procedure Call)即远程过程调用。RPC 最主要的功能就是在指定每个 NFS 功能所对应的 port number ,并且回报给客户端,让客户端可以连结到正确的port上去。
RPC服务原理
顺序:
- 启动RPC服务 :首先服务器开启RPC服务,并开启111端口
- 注册端口 :启动NFS服务时,主动向RPC服务器进行注册(端口映射)
- 查询端口 :客户端发起NFS的响应,匹配客户端的RPC服务,与客户端的RPC服务器建立连接,获取端口列表信息
- 建立数据连接 :通过获取的NFS端口与服务器NFS建立连接,不用经过RPC
rpc如何找到对应的port
- 这是因为当服务器在启动NFS时会随机取用数个port,并且主动的向RPC注册,因此RPC可以知道每个NFS的port对应的NFS功能,然后RPC又是固定使用port111来监听客户端的需求并汇报客户端的正确的port
portmap
功能:主要是把RPC程序号转化为Internet的端口号。
特点:只在第一次建立连接时候帮助网络应用程序找到正确的port,当当双方正确连接时,端 口就和应用绑定,portmap就无用。相当于媒婆。
RPC:Remote Procedure Call,远程过程调用,如NFS
如:window—服务–
如打印机,是由你计算机上对应的程序去调用打印机上相应的程序来进行工作的。
判断服务是否启动
rpm -qa | grep nfs 查看已经安装的服务
nfs-utils-2.3.3-31.el8.x86_64 NFS服务
systemctl status rpcbind 查看RPC服务是否启动
systemctl stop rpcbind 关闭RPC服务
systemctl status nfs-server.service 查看NFC服务是否启动
systemctl restart nfs-server 启动NFC服务
rpcinfo -p localhost 查看本地RPC注册列表
lsof -i:111
查看111端口被哪一个进程所使用的(也可以用于查看服务是否启动,适用于固定端口不标准)
ps -aux 查看全部进程
ps -aux | grep nfs 查看nfs的进程
netstat -tunlp 监听协议信息
netstat -tunlp | grep rpc 监听RPC信息
配置
服务器
- 服务配置文件
vim /etc/exports
- exports格式
- 默认存在参数root_squash。root用户映射为普通用户
输出目录 客户端 选项(访问权限,用户映射,其他)
- 输出目录: 需要共享的目录路径
- 客户端: 服务的用户对象
- 选项: 共享的权限,紧跟客户端列
共享目录路径 共享主机(ro/rw,参数,参数.....)
/pud *(ro)
/root 192.168.203.128(ro)
- 重新读取
exportfs -ar
systemctl restart nfs-server
- 关闭防火墙,Linux
systemctl stop firewalld 关闭防火墙
setenforce 0
客户端
- 挂载
mount 192.168.203.130:/pud /mnt
服务器 文件 挂载点
mount -o remount,ro /mnt
重新挂载,修改为ro
- 查看
showmount -e 192.168.203.130 查看当前主机共享的文件
主机
- exports选项
参数命令 | 参数用途 |
---|---|
sync | 将数据同步写入内存缓冲区与磁盘中,效率低,但可以保证数据的一致性(保障安全性) |
async | 将数据先保存在内存缓冲区中,必要时才写入磁盘;(保障速度) |
no_root_squash | 对root用户和组不映射,使用root身份登录,最终身份也是root |
root_squash | 将root用户和组映射为匿名用户和组(默认设置) |
all_squash | 将所有普通用户和组映射为匿名用户和组 |
no_all_squash | 对普通用户不映射(默认设置) |
anonuid=xxx | 将用户映射为服务器上的指定UID |
anongid=xxx | 将用户组映射为服务器上的指定GID |
/pud *(rw,no_root_squash)
/pud *(rw,all_squash,anonuid=1000,anongid=1000)