网络服务—NFS

2022-09-19 20:37:18 浏览数 (1)

什么是NFS ?

代码语言:javascript复制
存储空间共享服务
初级:单设备存储(分区、格式化、挂载、逻辑卷、磁盘阵列)
中级:网络文件系统:通过网络实现多设备共享存储{samba/cifs}

NFS(NetWork File Sysetem, 网络文件系统)它允许网络中的计算机之间通过TCP/IP网络共享资源的分布式存储系统,通常用来存储共享视频、图片等静态数据; NFS Server允许NFS Client将远端NFS Server的共享目录挂载到本地。在本地的NFS客户端的机器看来,NFS服务器端共享的目录就好像自己的磁盘分区和目录一样。一般客户端挂载到本地目录的名字可以随便,但为方便管理,我们要和服务器端一样比较好。

NFS端口管理

1. 当NFS Server与NFS Client,进行数据传输时,实际上是使用随机端口进行传输2049开始。

2. NFS服务器的端口需要通过RPC(remote procedure call 远程过程调用)协议(服务)进行管理。也就是说RPC服务会统一管理NFS的端口,客户端和服务端通过RPC来先沟通NFS使用了哪些端口,之后再利用这些端口来进行数据的传输。

NFS与FTP的区别

nfs服务:侧重的是文件的共享(在客户端像操作本地文件一样操作服务端文件)

FTP服务:侧重的是文件的传输(上传下载)

NFS的优点

1. 节约使用的磁盘空间 :客户端经常使用的数据可以集中存放在一台机器上,并使用NFS发布,那么网络内部所有计算机可以通过网络访问,不必单独存储。

2. 节约硬件资源 :NFS还可以共享软驱, CDROM和ZIP等的存储设备, 减少整个网络上的可移动设备的数量。

3. 用户主目录设定 :对于特殊用户,如管理员等,为了管理的需要,可能会经常登录到网络中所有的计算机,若每个客户端,均保存这个用户的主目录很繁琐,而且不能保证数据的一致性。实际上,经过NFS服务的设定,然后在客户端指定这个用户的主目录位置 ,并自动挂载,就可以在任何计算机上使用用户主目录的文件。

nfs服务管理软件包

nfs-utils : 包括NFS命令与监控程序,用于管理nfs服务

nfs服务端口

生成随机端口,并向rpcbind服务进行注册,rpcbind服务(调用portmap过程)对随机端口进行端口映射,记录其端口信息,然后通过111端口接收Client的请求。将nfs端口信息发送给Client。

NFS面临的问题**

1. 存储空间不足,需要更大容量的存储。

2. 直接用NFS挂载存储,有一定风险,存在单点故障。

3. 某些场景不能满足要求, 大量的访问磁盘IO是瓶颈。

rpcbind服务

rpcbind服务的功能作用

rpcbind服务能够将RPC程序号码和通用地址相互转换。

rpcbind服务原理

1. 要让某主机能向进程主机的服务发动RPC远程过程调用, 则该主机上的rpcbind必须处于已运行状态。

2. 当客户端要向某个给定的程序号码发动RPC调用时,它首先会确定RPC 申请应该发送到哪个地址上。

3. 当服务端收到RPC申请后,返回申请服务的地址(端口映射)。

rpcbind服务相关信息

软件包: rpcbind

启动命令: systemctl start rpcbind

服务端口: TCP111 和UDP111

NFS挂载原理

RPC和NFS如何通信

总结:客户端NFS和服务端NFS通讯过程

1)首先服务器端启动RPC服务,并开启111端口

2)启动NFS服务,并向RPC注册端口信息

3)客户端启动RPC(portmap服务),向服务端的RPC(portmap)服务请求服务端的NFS端口

4)服务端的RPC(portmap)服务反馈NFS端口信息给客户端。

5)客户端通过获取的NFS端口来建立和服务端的NFS连接并进行数据的传输。

NFS相关协议及软件安装管理

协议:

RPC(Remote Procedure Call Protocol)——远程过程调用协议

软件:

nfs-utils-* :包括NFS命令与监控程序 

rpcbind-* :支持安全NFS RPC服务的连接

注:通常情况下,是作为系统的默认包安装的

CentOS 6.*之前rpcbind叫portmap

NFS系统守护进程

nfs:它是基本的NFS守护进程

主要功能是管理客户端是否能够登录服务器

rpcbind:主要功能是进行端口映射工作。

当客户端尝试连接并使用RPC服务器提供的服务(如NFS服务)时,rpcbind会将所管理的与服务对应的端口提供给客户端,从而使客户可以通过该端口向服务器请求服务。

NFS服务器的配置

NFS服务器的配置相对比较简单,只需要在相应的配置文件中进行设置,然后启动NFS服务器即可。

NFS服务的配置文件为 /etc/exports,这个文件是NFS的主要配置文件,不过系统并没有默认值,所以这个文件不一定会存在,可能要使用vim手动建立,然后在文件里面写入配置内容。

NFS的服务器端

配置文件/etc/exports文件内容格式:

共享目录 客户端IP或网段(权限,映射关系,同步方式) 客户端2(权限,映射关系,同步方式)

共享目录2 ........

共享目录:共享目录是指NFS服务器共享给客户机使用的目录

客户端:客户端是指网络中可以访问这个NFS共享目录的计算机

客户端常用的指定方式:

指定ip地址的主机:192.168.0.200

指定子网中的所有主机:192.168.88.0

指定域名的主机:www.kernel.com

指定域中的所有主机:*.kernel.com

所有主机:*

设置共享目录的访问权限。

访问权限选项:

设置输出目录只读:ro

设置输出目录读写:rw

同步方式:

sync :同步{服务器压力较大,增加了磁盘IO的压力,但数据安全性高}

async :异步{服务器压力较小,在磁盘IO压力较低的情况下进行数据同步,但数据安全性较差}

客户端创建文件时,所借用的服务器端身份【映射关系】

在不写任何映射关系时,客户端来到服务器借用服务器的nfsnobody用户身份进行文件管理

人为控制客户端借用的服务器身份,四种映射关系

root_squash #默认映射关系

no_root_squash

all_squash

all_squash,anonuid=NNN,anongid=NNN

客户端使用root身份时:

root_squash

#会借用服务器端的nfsnobody身份进行文件管理

no_root_squash

#客户端会保留客户端的创建身份,可能在服务器端会显示为某UID的归属

all_squash

#客户端不管任何用户,创建文件时,都借用服务器端的nfsnobody用户进行文件管理

all_squash,anonuid=NNN,anongid=NNN

#要求客户端不管使用什么用户,都必须借用服务器端的指定UID和GID作为文件管理身份

客户端使用非root身份时:

root_squash

#客户端会保留客户端的创建身份,可能在服务器端会显示为某UID的归属

no_root_squash

#客户端会保留客户端的创建身份,可能在服务器端会显示为某UID的归属

all_squash

#客户端不管任何用户,创建文件时,都借用服务器端的nfsnobody用户进行文件管理

all_squash,anonuid=NNN,anongid=NNN

#要求客户端不管使用什么用户,都必须借用服务器端的指定UID和GID作为文件管理身份

NFS服务器的启动与停止

1、启动NFS服务器

为了使NFS服务器能正常工作,需要启动rpcbind和nfs两个服务,并且rpcbind一定要先于nfs启动。

# service rpcbind start

# service nfs start

2、查询NFS服务器状态

# service rpcbind status

# service nfs status

3、停止NFS服务器

要停止NFS运行时,需要先停止nfs服务再停止rpcbind服务,对于系统中有其他服务(如NIS)需要使用时,不需要停止rpcbind服务

# service nfs stop

# service rpcbind stop

4、设置NFS服务器的自动启动状态

设置rpcbind和nfs服务在系统运行级别2345自动启动。

# chkconfig --level 2345 rpcbind on

# chkconfig --level 2345 nfs on

5、查看RPC服务器开启了哪些端口

rpcinfo –p localhost

实验相关实例

将NFS服务器的/home/zhangsan共享给192.168.115.0网段,rw权限

# vim /etc/exports

/home/zhangsan 192.168.115.0(rw)

重启rpcbind 和nfs 服务

# service rpcbind restart

# service nfs restart

# exportfs

服务器端查看nfs共享状态

# showmount -e 本机ip

查看自己共享的服务

客户端查看nfs共享状态

# showmount -e NFS服务器IP

客户端挂载nfs服务器共享目录

命令格式:mount NFS服务器IP:共享目录 本地挂载点目录

# mount 192.168.115.10:/home/zhangsan/ /media/zhangsan/

# mount | grep nfs

mount -o vers=3 共享 本地 #指定挂载使用nfs V3版本(避免同步延迟)

验证客户端和nfs服务器端文件是否一致:

修改服务器端相应权限,不然客户端无法正常访问和使用

卸载和自动挂载

卸载:

卸载客户端的挂载目录

umount 挂载点

停止服务器端的共享

exportfs –au

自动挂载:/etc/fstab

格式:<server>:</remote/export> </local/directory> nfs < options> 0 0

#192.168.115.10:/home/zhangsan /media/zhangsan nfs defaults 0 0

#mount –a

相关命令

exportfs命令

如果我们在启动了NFS之后又修改了/etc/exports,是不是还要重新启动nfs呢?这个时候我们就可以用exportfs 命令来使改动立刻生效,该命令格式如下: 

格式:exportfs [-aruv]

-a 全部挂载或卸载 /etc/exports中的内容

-r 重新读取/etc/exports 中的信息 ,并同步更新/etc/exports、/var/lib/nfs/xtab

-u 卸载单一目录(和-a一起使用为卸载所有/etc/exports文件中的目录)

-v 在export的时候,将详细的信息输出到屏幕上。

具体例子:

# exportfs -au 卸载所有共享目录

# exportfs -ra 重新共享所有目录并输出详细信息

rpcinfo命令

利用rpcinfo -p 可以查看出RPC开启的端口所提供的程序有哪些

其中nfs 开启的是2049,portmapper(rpcbind) 开启的是111,其余则是rpc开启的

NFS v3 v4 区别

问题现象:

NFS客户端在使用v4版本挂载NFS服务器共享目录时,所创建的文件属于nobody用户

问题原因:

NFS 在 v4 版本中修改了用户映射关系模式,通过调用NIS服务来完成用户映射,但NIS服务在未配置的情况下无法提供正常映射关系,所以出现了上述错误。

#拓展:NIS(Network Information Service)网络信息服务

#相关配置文件:/etc/idmapd.conf

问题解决方案:

服务器端:

1. 创建并编写配置文件

/etc/modprobe.d/nfs.conf

options nfs nfs4_disable_idmapping=1

#关闭掉RPC服务对rpc.idmapd模块的调用

2. 正常编辑NFS配置文件并重启

/etc/exports

service nfs restart

3. 手动关闭rpcidmapd服务

service rpcidmapd stop

客户端:

正常挂载即可

0 人点赞