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上的一致
2.NFS应用场合
在生产环境,我们很少使用单机部署应用,因为单机存在单点故障,一旦宕机,将无法为前端业务提供服务,这是客户无法容忍的。 现在提倡的高可用及7*24服务,是我们追求的目标。 对于一些小的应用,双机成为了主流
我们来看一种简单集群场景, 应用分别部署在A及B上, 前端通过F5或着web服务器访问应用。NFS提供了一种机制,可以让A、B访问C中的一个共享目录,就像是操作本地文件一样。
如下图:
3.NFS原理:
首先:NFS包括两部分,服务端及客户端
由于NFS服务功能很多,会有很多端口,这些端口还有可能不固定,那么客户端就无法与服务器进行通信,因为程序间通信必须通过端口(tcp/udp都是端到端通信),那么就需要一个中间的桥接机制,RPC进程即充当这样一个角色,RPC的端口是一定的(111),当NFS启动时,会向RPC进行注册, 那么客户端PRC就能与服务器RPC进行通信, 从而进行文件的传输
当客户端用户打开一个文件或目录时,内核会判断,该文件是本地文件还是远程共享目录文件,如果是远程文件则通过RPC进程访问远程NFS服务端的共享目录,如果是本地文件,则直接打开
为了更好的并发,RPC进程及NFS进程都有多个
二、NFS服务端安装配置
用两台机器做实验,一台作为服务端(ying01 192.168.112.136),一台作为客户端(ying02 192.168.112.138)
在ying01上安装:nfs-utils包
同时也在ying02上安装:nfs-utils包
在ying01上,新建配置文件;写入以下语句
语句释义:
/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权限
开启nfs服务,并监听端口,端口111为其默认端口
设置开机启动:systemctl enable nfs
在客户端ying02上设置:
查看服务端共享目录:showmount -e 192.168.112.136
注意:假如没有出现共享目录,有下面可能,注意排查:
1、两者通信问题
2、把两者的防火墙关闭
挂载NFS
在增加的/mnt分区,就是NFS共享的目录,在该目录下创建测试文件
在服务端ying01机器上,查看其详细信息
测试结果:**可以看到创建的新文件ying.111,uid为1000
三、exportfs命令
看下图:假如A的NFS服务停掉了,但是B和C还在挂载着A分享的分区,这就无法正常工作了,由于B和C上面的进程是d状态(不可中断进程,在ps一节中学习到的),一旦A停止了,B和C一定会出问题,无法服务,既不可以重启,也不可以关闭,就会把系统整挂掉。所以NFS一定不可以随便重启。 如果必须重启怎么办?先把B和C上面的目录卸载下来
那么就开始卸载 B和C的目录,一个一个卸载下来
出现这种情况,不利于生产以及智能化。因此需要利用exportps命令
exportps命令常用选项:
在服务端ying01上:
这样就可以让服务器直接生效,不需要再次重启nfs服务,也不会对客户端造成之前所说的错误!
编辑配置文件,增加一个共享的目录
用命令:exportfs -arv 直接生效,不用重启NFS服务
使用客户端测试
查看服务端共享目录:showmount -e 192.168.112.136
在mnt下创建一个测试文本
新检测试文本1212.txt,查看其gid和uid都为root
在服务端ying01下
查看/tmp目录下的1212.txt测试文本,其uid和gid都为root
四、NFS客户端问题
注意:NFS 4版本会有该问题
我们在分享一个目录且权限设置为no_root_squash,客户端看到的文件属主、组不是root,却是nobody。 这个不是设置错误,是软件本身自带的BUG。
解决方案:
方案1: 在客户端挂载的时候加上 -o nfsvers=3,其目的是制定nfs使用3版本
方案2:在服务端和客户端配置:vim /etc/idmapd.conf
然后再重启rpcidmapd服务