保障训练-20200927

14.1 NFS介绍

14.2 NFS服务端安装配置

14.3 NFS配置选项

14.4 exportfs命令

14.5 NFS客户端问题

一、NFS介绍

1.NFS简介

NFS,Network File System。网络文件系统,即通过网络,对在不同主机上的文件进行共享

NFS最早由Sun公司开发,分2,3,4三个版本,2和3由Sun起草开发,4.0开始Netapp公司参与并主导开发,最新为4.1版本,更新比较慢其实4.1是从2010年就开始使用了

NFS数据传输基于RPC协议,RPC为Remote Procedure Call的简写

NFS应用场景是:A,B,C三台机器上需要保证被访问到的文件是一样的,A共享数据出来,B和C分别去挂载A共享的数据目录,从而B和C访问到的数据和A上的一致

保障训练-20200927

2.NFS应用场合

在生产环境,我们很少使用单机部署应用,因为单机存在单点故障,一旦宕机,将无法为前端业务提供服务,这是客户无法容忍的。 现在提倡的高可用及7*24服务,是我们追求的目标。 对于一些小的应用,双机成为了主流

我们来看一种简单集群场景, 应用分别部署在A及B上, 前端通过F5或着web服务器访问应用。NFS提供了一种机制,可以让A、B访问C中的一个共享目录,就像是操作本地文件一样。

如下图:

保障训练-20200927

3.NFS原理:

首先:NFS包括两部分,服务端及客户端

由于NFS服务功能很多,会有很多端口,这些端口还有可能不固定,那么客户端就无法与服务器进行通信,因为程序间通信必须通过端口(tcp/udp都是端到端通信),那么就需要一个中间的桥接机制,RPC进程即充当这样一个角色,RPC的端口是一定的(111),当NFS启动时,会向RPC进行注册, 那么客户端PRC就能与服务器RPC进行通信, 从而进行文件的传输

当客户端用户打开一个文件或目录时,内核会判断,该文件是本地文件还是远程共享目录文件,如果是远程文件则通过RPC进程访问远程NFS服务端的共享目录,如果是本地文件,则直接打开

为了更好的并发,RPC进程及NFS进程都有多个

保障训练-20200927

二、NFS服务端安装配置

用两台机器做实验,一台作为服务端(ying01 192.168.112.136),一台作为客户端(ying02 192.168.112.138)

在ying01上安装:nfs-utils包

保障训练-20200927

同时也在ying02上安装:nfs-utils包

保障训练-20200927

在ying01上,新建配置文件;写入以下语句

保障训练-20200927

语句释义:

/home/nfstestdir :共享的目录

rw: 读写

ro: 只读

sync: 同步模式,内存数据实时写入磁盘

async :非同步模式

no_root_squash: 客户端挂载NFS共享目录后,root用户不受约束,权限很大

root_squash: 与上面选项相对,客户端上的root用户收到约束,被限定成某个普通用户

all_squash:客户端上所有用户在使用NFS共享目录时都被限定为一个普通用户

anonuid/anongid: 和上面几个选项搭配使用,定义被限定用户的uid和gid

192.168.112.0/24:为客户端的网段

创建nfstestdir目录,并给予777权限

保障训练-20200927

开启nfs服务,并监听端口,端口111为其默认端口

保障训练-20200927

设置开机启动:systemctl enable nfs

保障训练-20200927

在客户端ying02上设置:

查看服务端共享目录:showmount -e 192.168.112.136

保障训练-20200927

注意:假如没有出现共享目录,有下面可能,注意排查:

1、两者通信问题

2、把两者的防火墙关闭

挂载NFS

保障训练-20200927

在增加的/mnt分区,就是NFS共享的目录,在该目录下创建测试文件

保障训练-20200927

在服务端ying01机器上,查看其详细信息

保障训练-20200927

测试结果:**可以看到创建的新文件ying.111,uid为1000

三、exportfs命令

看下图:假如A的NFS服务停掉了,但是B和C还在挂载着A分享的分区,这就无法正常工作了,由于B和C上面的进程是d状态(不可中断进程,在ps一节中学习到的),一旦A停止了,B和C一定会出问题,无法服务,既不可以重启,也不可以关闭,就会把系统整挂掉。所以NFS一定不可以随便重启。 如果必须重启怎么办?先把B和C上面的目录卸载下来

保障训练-20200927

那么就开始卸载 B和C的目录,一个一个卸载下来

出现这种情况,不利于生产以及智能化。因此需要利用exportps命令

exportps命令常用选项:

保障训练-20200927

在服务端ying01上:

保障训练-20200927

这样就可以让服务器直接生效,不需要再次重启nfs服务,也不会对客户端造成之前所说的错误!

编辑配置文件,增加一个共享的目录

保障训练-20200927

用命令:exportfs -arv 直接生效,不用重启NFS服务

保障训练-20200927

使用客户端测试

查看服务端共享目录:showmount -e 192.168.112.136

保障训练-20200927

在mnt下创建一个测试文本

新检测试文本1212.txt,查看其gid和uid都为root

保障训练-20200927

在服务端ying01下

查看/tmp目录下的1212.txt测试文本,其uid和gid都为root

保障训练-20200927

四、NFS客户端问题

注意:NFS 4版本会有该问题

我们在分享一个目录且权限设置为no_root_squash,客户端看到的文件属主、组不是root,却是nobody。 这个不是设置错误,是软件本身自带的BUG。

解决方案:

方案1: 在客户端挂载的时候加上 -o nfsvers=3,其目的是制定nfs使用3版本

保障训练-20200927

方案2:在服务端和客户端配置:vim /etc/idmapd.conf

保障训练-20200927

然后再重启rpcidmapd服务