NFS文件共享服务器

1、NFS是什么

NFS是network file sytem的缩写,他最大的特点就是可以通过网络,让不同的机器,不同的系统实现文件共享。NFS客户端可以将NFS服务器共享的目录挂载在本地的文件系统中,访问目录就如同访问自己本地目录一样。

2、NFS工作原理与RPC协议

2.1 NFS工作原理
NFS分为客户端和服务端,首先由服务端开启rpcbind,然后开启NFS服务。由于NFS功能较多,而不同的功能是由不同的程序来启动,因而每个功能对应的端口皆不同。客户端要想与服务端进行通信,就必须知道服务端相应功能的端口,这时就需要RPC的协助。RPC在这里的作用就是记录并统一管理NFS的端口,并且RPC对外的端口统一为111。当NFS服务端启动时,就会将各个功能的端口注册到RPC,服务端RPC暴露111端口等待客户端RPC的请求。当客户端发出请求时,RPC就将所记录的NFS端口信息告知客户端,这样客户端就知道了服务端功能的端口信息,就可以进行数据通信了。
2.2 RPC协议
RPC(Remote Procedure Call Protocol)——远程过程调用协议,它是一种通过网络从远程计算机程 序上请求服务,而不需要了解底层网络技术的协议。RPC协议假定某些传输协议的存在,如TCP或 UDP,为通信程序之间携带信息数据。在OSI网络通信模型中,RPC跨越了传输层和应用层。 RPC采用客户机/服务器模式。请求程序就是一个客户机,而服务提供程序就是一个服务器。首先,客 户机调用进程发送一个有进程参数的调用信息到服务进程,然后等待应答信息。在服务器端,进程保持 睡眠状态直到调用信息到达为止。当一个调用信息到达,服务器获得进程参数,计算结果,发送答复信 息,然后等待下一个调用信息,最后,客户端调用进程接收答复信息,获得进程结果,然后调用执行继 续进行。

3、NFS安装部署

3.1 服务端和客户端关闭防火墙,安装NFS

#关闭防火墙
systemctl stop firewalld
#或防火墙放行NFS
firewall-cmd --permanent --add-service=nfs
firewall-cmd  --reload 

#临时关闭selinux
setenforce 0
#或永久关闭selinux
sed -i 's/=enforcring/=disabled/' /etc/selinux/config 

#安装nfs服务组件
yum install -y nfs-utils

3.2 编辑配置文件

[root@localhost ~]# vim /etc/exports

/data/mypackage  10.0.0.130 (rw,sync)

#说明:
/data/mypackage  必须存在,要共享出去的目录
10.0.0.130             可以挂载使用的对象,可以是指定IP也可以是网段
挂载参数:
rw :可读可写
ro:仅仅可读
sync:数据同步写入内存和磁盘
root_squash:压缩root权限,如果客户端使用root身份访问,责备压缩为nobody,权限也受到相应限制
no_root_squash:不压缩root权限,如果客户端使用root身份登录,会有所有权限,比较危险,建议压缩
all_squash:不管访问者是什么身份,包括root,全部压缩至匿名用户
no_all_squash:保留访问用户的身份uid和gid,一般只能查看,不能修改。

重启rpc和nfs服务,重新挂载exportfs中的设置

systemctl restart rpcbind 
systemctl restart nfs 
exportfs -r

3.3 配置客户端
搜素网络中可用的共享文件

[root@localhost ~]# showmount -e 10.0.0.129
Export list for 10.0.0.129:
/data/mypackage (everyone)
#查找到/data/mypackage (everyone),以上配置OK

创建目录,用于挂载

mkdir -p /mnt/nfs

挂载

mount -t nfs  10.0.0.129:/data/mypackage /mnt/nfs
#推荐使用软挂载
mount -t nfs -o soft,timeo=1 10.0.0.129:/data/mypackage /mnt/nfs

#解释
soft: 软挂载,遇到报错会终止挂载,并返回信息,默认是硬挂载,遇到报错也一直挂载
timeo: 超时时间,如果不设置,将一直连接

完成挂载,服务端目录创建文件,然后进入客户端目录查看
服务端创建文件

[root@localhost mypackage]# touch file1{1..8}
[root@localhost mypackage]# ls
file11  file12  file13  file14  file15  file16  file17  file18

客户端目录查看

[root@localhost nfs]# ls /mnt/nfs
file11  file12  file13  file14  file15  file16  file17  file18

#大功告成

此时可能会发现无法对目录中的文件进行修改,这主要是因为客户端访问服务器时,身份被压缩成nobody,相对服务器文件系统来说,就是其他用户。所以要想编辑,需要在服务端对文件授权或者更改exports文件,设置no_root_squash(不压缩客户端root身份)。

4、NFS自动挂载技术

4.1 autofs自动挂载服务
当我们将挂载信息写入到/etc/fstab文件中时,可实现开机自动挂载。但是当远程共享资源过多时,就会给网络带宽和服务器的硬件资源带来很大负载。如果挂载的资源长期不使用,也会造成服务器资源的浪费。autofs自动挂载服务是一种Linux系统守护进程,当检测到用户试图访问一个尚未挂载的文件系统时,就会自动挂载该文件系统。简单来说,将挂载信息写入/etc/fstab文件中,系统在每次开机时都会自动挂载,而autofs自动挂载服务则是在用户需要使用该文件系统时才去动态挂载,从而节约了网络资源和服务器硬件资源的开销。autofs自动挂载服务两大特点:一、可设置不需要在开机就挂载的目录,当用的时候才实现自动挂载;二、当自动挂载的目录用户一段时间不使用,会自动卸载,大大节约服务器资源。(默认时间为5分钟),可以在autofs.conf中修改配置。

4.2 自动挂载配置
客户端安装autofs

yum install -y autofs

编辑autofs服务的主配置文件
如果把挂载信息都写入到autofs服务的主配置文件中,会使主配置文件臃肿不堪,不利于管理和维护。因此在autofs的主配置文件中按照“挂载目录的上层目录 子配置文件”的格式填写,具体的挂载信息写入到子配置文件中,方便日后管理和维护。

vim /etc/auto.master 
#加入以下配置
/mnt/nfs /etc/nfs.misc 

编辑子配置文件

vim /etc/nfs.misc
cluo -fstype=nfs,rw,sync 10.0.0.129:/data/mypackage
meixi -fstype=nfs,ro,sync 10.0.0.129:/data/mypackage

#注意:
/data/mypackage是nfs服务器共享的目录,但是是在客户端编辑。 所以nfs服务端的exportfs文件中的权限会影响这级的权限。
如果nfs服务端exportfs,设置的权限为ro,那么即使这里写rw,也是不可写的。 如果nfs服务端exportfs,设置的权限为rw,那么可以在这级设置rw或者ro进行权限控制。

4.3 启动autofs服务

systemctl start autof

4.4 访问目录即可实现自动挂载

[root@localhost etc]# cd /mnt/nfs/cluo
[root@localhost cluo]# ls
file11  file12  file13  file14  file15  file16  file17  file18
[root@localhost cluo]# ls /mnt/nfs
cluo
[root@localhost cluo]# cd /mnt/nfs/meixi
[root@localhost meixi]# ls
file11  file12  file13  file14  file15  file16  file17  file18
[root@localhost meixi]# ls /mnt/nfs
cluo  meixi

4.5自动卸载
5分钟后重新访问挂载目录,挂载文件消失,重新访问挂载文件,又完成挂载

[root@localhost meixi]# ls /mnt/nfs
[root@localhost meixi]# cd /mnt/nfs/cluo
[root@localhost cluo]# ls
file11  file12  file13  file14  file15  file16  file17  file18
[root@localhost cluo]# ls /mnt/nfs
cluo

5、NFS常用命令

nfsstat : 
-m, --mounts        显示已经挂载的nfs文件系统的详细参数 
-c, --client        显示NFS客户端的统计信息 
-s, --server        显示NFS服务器端的统计信息 
-2                  显示nfsv2的统计信息 
-3                  显示nfsv3的统计信息 
-4                  显示nfsv4的统计信息 
-o [facility]       显示指定类型的统计信息    
	nfs             NFS协议信息    
	rpc             一般RPC信息    
	net             网络统计信息    
	all              显示以上所有信息

rpcinfo : 
-p                  显示注册的端口 
-m                  显示 rpcbind 操作的统计信息表 
-s                  显示所有已注册的 RPC 程序的简明列表 
-T                  显示有关使用特定传输或协议的服务的信息 
-t                  探测使用 TCP 的 RPC 程序 
-u                  探测使用 UDP 的 RPC 程序

exportfs : 
-r        重新共享目录

6、 深入解读NFS

NFS并不是单独存在的,而是由NFS-server,RPC,PORTMAP这三个模块组成。
NFS-server只负责将数据通过以文件系统的方式共享出去,并进行登录管理和权限管理,并不负责数据 的传输,而数据的传输则有RPC来完成。 NFS客户端要想访问NFS服务器,就必须要知道对方的ip和端口,但是NFS服务除了启动nfsd本身监听 的端口2049/tcp和2049/udp,还会启动其它进程(如statd,rquotad等)以完成文件共享,这些进程 的端口是由PORTMAP随机分配的(每次NFS服务启动时向RPC服务注册,RPC服务会通知PORTMAP分 配剩余可用的端口)。所以NFS客户端是很难直接与NFS服务器通信的。
不难想出,NFS的工作流程是,NFS客户端rpc服务就会通过网络向NFS服务端的rpc服务的111端口发出 NFS文件存取功能的询问请求,RPC服务获得请求,然后将NFS服务的各个进程端口号返给客户端的rpc 请求,客户端的rpc再拿着这些进程端口与服务端的rpc通信,进行数据传输。

7、NFS企业优化

主要优化mount -o 的相关参数。 async 异步同步,数据不会立刻同步至磁盘,此参数会提高I/O性能,但会降低数据安全(除非对 性能要求很高,对数据可靠性不要求的场合。一般生产环境,不推荐使用)。
noatime 取消更新文件系统上的inode访问时间,提升I/O性能,优化I/O目的,推荐使用。 nodiratime 取消更新文件系统上的directory inode访问时间,高并发环境,推荐显式应用该选 项,提高系统性能。
noexec 挂载的这个文件系统,要不要执行程序(安全选项)。
nosuid 挂载的这个文件系统上面,可不可以设置UID(安全选项)。
rsize/wsize 读取(rsize)/写入(wsize)的区块大小(block size),这个设置值可以影响客户端 与服务端传输数据的缓冲存储量。一般来说,如果在局域网内,并且客户端与服务端都具有足够的 内存,这个值可以设置大一点,比如说32768(bytes),提升缓冲区块将可提升NFS文件系统的传 输能力。

发布了34 篇原创文章 · 获赞 1 · 访问量 523

猜你喜欢

转载自blog.csdn.net/weixin_42440154/article/details/103403719