NFS服务

NFS服务

NFS介绍

什么是NFS

介绍:NFS是Network File System的缩写,即网络文件系统,一种使用于分散式文件系统协定,由Sun公司开发,明文传输,不安全,只在内网使用

功能和作用:通过网络让不同的机器、不同的操作系统能够彼此分享个别的数据(视频、图片、静态数据),让应用程序在客户端通过网络访问位于服务器磁盘中的数据,是在类Unix系统之间实现磁盘文件共享的一种方法

NFS服务

实现方式:

通过网络让不同机器系统之间彼此共享文件和目录,允许NFS客户端将远端服务器端的共享目录挂载到本地的NFS客户端中,在本地NFS客户端的机器来看,NFS服务器端共享的目录就像自己的磁盘分区和目录一样,客户端需要将服务端的目录挂载到到本地目录,服务端的目录和本地目录名尽量一致,方便管理

NFS服务

NFS通讯原理:
NFS通过网络进行数据传输,有数据传输就要有对应的端口号
NFS服务器端口是随机端口,确定使用哪个端口需要通过RPC协议(远程过程调用协议)(英文全称:remote procedure call)实现的,RPC会统一管理NFS的端口,客户端和服务端通过RPC先来沟通NFS是用了哪些端口,之后再利用这些端口进行数据传输。也就是说RPC管理服务端的NFS端口号分配,客户端要传输数据,那客户端的RPC会先跟服务端的RPC去要服务器端的端口号,要到端口号再建立连接。然后数据传输

RPC和NFS如何实现互相通讯:首先启动NFS,就会随机使用一些端口,然后NFS就会向RPC去注册一些端口,RPC记录下这些端口,并开启111端口等待用户的请求,并将RPC记录的NFS端口号信息告知客户端

RPC和NFS启动顺序:在启动NFS之前,首先启动RPC服务,否则NFS服务无法向RPC服务区注册,如果重启RPC服务,原来注册好的NFS端口号会全部丢失,因此NFS也需要重新启动向RPC注册,修改完NFS配置文件后,systemctl reload nfs即可
reload (重新加载),reload会重新加载配置文件,服务不会中断。而且reload时会测试conf语法等,如果出错会rollback用上一次正确配置文件保持正常运行。也叫平滑重启,不会对已经连接的服务造成影响。
restart (重启)(先stop后start),会重启服务。这个重启会造成服务一瞬间的中断,如果配置文件出错会导致服务启动失败,那就是更长时间的服务中断了。

总结:

具体通讯过程

首先服务器端启动RPC服务,并开启111端口
启动NFS服务,并向RPC注册端口信息
客户端启动RPC服务,向服务端的RPC服务请求服务端的NFS端口
服务端的RPC服务反馈NFS端口信息给客户端RPC
客户端通过从客户端RPC获取NFS端口来建立和服务端NFS连接并进行数据传输

NFS服务

访问文件过程

NFS服务

客户端以root的身份启动nfs,但是到了NFS服务端会将其压缩成nfsnobody(匿名用户),导致进入本地文件访问时因权限而无法访问原因:设置了root_squash

NFS操作知识点:

下载包
yum -y install nfs-utils 主程序包,下载NFS命令和监控程序包,nfsd是NFS的守护进程,目的是使客户端能够登录服务器
yum -y install rpcbind 下载RPC服务链接包,rpcbind功能是进行端口映射,将端口号提供给客户端

NFS服务配置文件知识设置

vim /etc/exports 修改配置文件
内容格式:共享的目录    客户端1地址(访问权限,用户映射,其他)   客户端2地址(访问权限,用户映射,其他)

共享目录:是指NFS服务器共享给客户机使用的目录
客户端是指:网络中可以访问这个NFS共享目录的计算机
	指定ip地址:192.168.1.10
	指定子网中所有主机:192.168.1.0/24
	指定域名 www.baidu.com
	指定域名中所有主机 *.baidu.com
	所有主机:*
访问权限:
	ro:只读
	rw:读写:若想正常写入,还需要设置共享目录可写权限
用户映射:
	root_squash:若果是以root用户访问时,(nfsnobody)对共享目录的权限会被压缩为nfsnobody用户的权限
	no_root_squash:访问共享目录时,用户如果是root,对共享目录也具有root权限
	all_squash:将远程访问的用户及所属组都映射为指定的uid,gid(服务端的uid和gid不要和用户端重复)格式:all_squash,anonuid=xxx,anongid=xxx
	no_all_squash(默认)所有用户都不压缩权限
其他选项:
	sync:数据同步写入缓冲区与磁盘中 ,数据的安全性较高,性能较差
	async:将数据先保存在内存缓冲区,必要时写入磁盘,数据安全性较低(断电丢失),性能较高

相关命令

启动服务命令
systemctl start rpcbind 启动rpc服务
systemctl start nfs 启动nfs服务
systemctl enable rpcbind 开机自启动rpcbind服务
systemctl enable nfs 开机自启动nfs服务
systemctl reload nfs 平滑重启nfs服务(如果不平滑加载,需要先重启rpc服务,再重启nfs服务)

其他相关命令
共享查看
exportfs:服务端查看nfs共享状态
客户端查看nfs共享状态:showmount -e NFS服务器IP
卸载与重载
exportfs -au:卸载所有共享目录
exportfs -arv:重新共享目录并输出详细信息,类似于reload
客户端卸载:umount 挂载源或挂载点
rpcinfo -p 查看rpc开启的端口号所提供的程序有哪些(rpc 不仅只管理nfs端口号,所以实验时别重启,会导致其管理的其他服务无法使用)

如果遇到”设备正忙“
1:你所在的目录为共享目录,切换到其他目录
2: 下载psmisc包
fuser -m -v 目录位置
查看谁在使用此目录,然后kill -9 PID

nfs启动产生的进程
rpc.statd 检查数据一致性
rpc.mountd 管理NFS文件系统,包括客户端访问权限认证
rpc.rquotad 管理磁盘配额

防火墙出现的挂载问题
iptables -L 查看防火墙规则
iptables -F 清空防火墙规则

查看nfs权限详细信息
cat /var/lib/nfs/etab

NFS服务

NFS实验

下载包(服务端和客户端)
yum -y install nfs-utils
yum -y install rpcbind

NFS服务器端建立/share目录作为共享目录,(可选:并为目录增加读写权限)

修改配置文件
vim /etc/exports 进去后输入 /share 192.168.1.11(rw(这里默认写为",root_squash")) 若想共享整个网段,则输入192.168.1.0(rw)

启动两端服务
systemctl start rpcbind 启动rpc服务
systemctl start nfs 启动nfs服务

客户端挂载nfs服务器共享目录
mount 192.168.1.10:/home/sharefiles /share(可以选择mount -o vers=3 共享本地指定挂载使用nfs V3版本,避免同步延迟)
mount | grep nfs 或者df -Th查看nfs挂载情况

查看共享状态
服务端查看nfs共享状态:exportfs
客户端查看nfs共享状态:showmount -e NFS服务器IP
showmount -e 192.168.1.10

NFS服务

验证
客户端进入/share
创建一个文件a.txt,ll 查看一下所有者和所属组(nfsnobody)

NFS服务

之后使用普通用户user1创建b.txt,ll查看

若想开机自动生效,需要修改客户端开机挂载配置文件
192.168.1.10:/home/sharefiles /home/sharefiles nfs defaults,_netdev 0 0
_netdev如果没有网络则忽略

用户映射实验:重新修改配置文件/etc/exports,重启nfs服务(systemctl reload nfs),创建文件,查看所有者和所属组

具体修改内容:

第一次:/home/sharefiles 192.168.1.11(rw,no_root_squash),以服务端当前root身份创建所有者和所属组,对服务端root身份不进行压缩

第二次:/share 192.168.1.11(rw,all_squash,anonuid=xxx,anongid=xxx)指定所有者和所属组,不压缩任何人的身份,要保证客户端和服务端具有相同的用户,并且UID相同,此时还要记者使用acl或者文件所有者和数组进行修改

NFS服务
NFS服务
NFS服务

客户端

NFS服务

查看

服务端

NFS服务

客户端

NFS服务

客户端显示的1100就是服务端张三的uid和gid

测试一下服务端加载卸载
exportfs -au:卸载所有共享目录
exportfs -ar:重新共享共享目录并输出详细信息

nfs内核优化

简介:proc下保存着大量的pid文件和动态文件,存在内存中,里面记录了当前进程相关信息
fd 文件描述符
net 网络资源
root 用户的身份
task 调用的任务
uid_map对UID的隔离

NFS服务
NFS服务

发送套接字缓冲区的默认大小
套接字(socket):实质是 IP加端口(例如:192.168.1.10:80) 应用层的,端到端的,可以使应用程序直接进行数据传输,提高传输效率

临时修改参数方式:
echo 800000 >/proc/sys/net/core/rmem_default

NFS服务

永久设置方式
sysctl -a|grep rmem 列出读缓存的所有内核参数

NFS服务

vim /etc/sysctl.conf 内核参数配置文件
复制格式写入到内核文件中

NFS服务

sysctl -p 内核参数配置文件立即生效

发布者:LJH,转发请注明出处:https://www.ljh.cool/5662.html

(0)
上一篇 2022年5月18日 上午1:04
下一篇 2022年6月4日 下午5:23

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注