NFS-共享存储搭建跟对接使用

  • Post author:
  • Post category:其他




1、基本概念

NFS(Network File System)网络文件系统,主要功能是通过网络(一般是局域网)让不同的主机系统之间可以共享文件或目录。

NFS是通过网络来进行服务器端和客户端之间的数据传输,NFS客户端可以通过挂载(mount)的方式将NFS服务器端共享的数据目录挂载在NFS客户端本地系统中(某一个挂载点下)。从客户端本地看,NFS服务器端共享的目录就好像是客户端自己的磁盘分区或目录一样,而实际上却是远端的NFS服务器的目录。

2、RPC与NFS通讯原理

NFS服务器使用哪个端口来进行数据传输?一般服务器端口开在2049,但NFS支持很多功能,对应不同的应用程序,因此对应多个端口,且不固定。

客户端如何知道NFS服务器端到底使用的是哪个端口呢?–> RPC

RPC(Remote Procedure Call, 远程过程调用)统一管理NFS端口,指定每个NFS功能所对应的port number,让客户端可以连接到正常端口上去。且统一对外的端口是111。

过程如下:当NFS启动后,会随机的使用一些端口,然后NFS就会向RPC去注册这些端口。RPC记录下这些端口,并开启111端口,等待客户端RPC的请求。如果客户端有请求,服务器端的RPC就会将之前记录的NFS端口信息告知客户端。如此客户端就会获取NFS服务器端的端口信息,并以实际端口进行数据的传输。

在启动NFS SERVER之前,首先要启动RPC服务(即portmap服务)如果RPC服务重新启动,原来已经注册好的NFS端口数据就会全部丢失。因此此时RPC服务管理的NFS程序也要重新启动以重新向RPC注册。

一般修改NFS配置文档后,是不需要重启NFS的,直接在命令执行systemctl reload nfs或exportfs –rv即可使修改的/etc/exports生效

3、NFS客户端和NFS服务器通讯过程

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

  • 服务器端启动NFS服务,并向RPC注册端口信息

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

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

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

4、NFS server的搭建

(1)使用centos8操作系统的虚拟机搭建方法

服务器端:(已最大安装系统)

①查看自带安装的nfs和rpc情况

[root@tt ~]# rpm -qa nfs*

nfs-utils-2.3.3-35.el8.x86_64

[root@tt ~]# rpm -qa rpcbin*

rpcbind-1.2.5-7.el8.x86_64

②启动nfs-server服务

[root@tt ~]# systemctl enable –now nfs-server

Created symlink /etc/systemd/system/multi-user.target.wants/nfs-server.service → /usr/lib/systemd/system/nfs-server.service.

启动RPC服务

[root@tt ~]# systemctl enable rpcbind

查看NFS的版本信息 + 表示支持 – 表示不支持

[root@tt ~]# cat /proc/fs/nfsd/versions

-2 +3 +4 +4.1 +4.2

③创建服务器端的共享目录,作为客户端挂载的远端入口。

修改NFS配置文件,为其配置权限

[root@tt ~]#mkdir /storage

[root@tt ~]#vi /etc/exports

写入:

/storage 192.168.10.*(rw,sync,no_subtree_check,no_root_squash)

*参数说明:

参数

含义

rw

可读写

ro

只读

no_root_squash

客户机用root访问该共享文件夹时,不映射root用户

root_squash

客户机用root用户访问该共享文件夹时,将root用户映射成匿名用户

all_squash

客户机上的任何用户访问该共享目录时都映射成匿名用户

anonuid

将客户机上的用户映射成指定的本地用户ID的用户,这个UID必需要存在于你的/etc/passwd当中

Anongid

将客户机上的用户映射成属于指定的本地用户组ID

sync

资料同步写入到内存与硬盘当中

async

资料会先暂存于内存当中,而非直接写入硬盘

insecure

允许从这台机器过来的非授权访问

subtree_check

如果共享/usr/bin之类的子目录时,强制NFS检查父目录的权限(默认)

no_subtree_check

和上面相对,不检查父目录权限

subtree_check

如果共享/usr/bin之类的子目录时,强制NFS检查父目录的权限(默认)

no_subtree_check

和上面相对,不检查父目录权限

wdelay

如果多个用户要写入NFS目录,则归组写入(默认)

no_wdelay

如果多个用户要写入NFS目录,则立即写入,当使用async时,无需此设置。

hide

在NFS共享目录中不共享其子目录

no_hide

共享NFS目录的子目录

secure NFS

secure NFS通过1024以下的安全TCP/IP端口发送

insecure NFS

通过1024以上的端口发送

fsid 见下方详细说明

fsid 参数具体含义如下:

For NFSv4, there is a distinguished filesystem which is the root of all exported filesystem. This is specified with fsid=root or fsid=0 both of which mean exactly the same thing.

在这里插入图片描述

参考链接:https://www.suse.com/support/kb/doc/?id=000017897

若使用参数fsid=0,在挂载时不指定版本,或指定版本但指定挂载路径为之前/etc/exports中设置的共享目录/storage时,nfs会默认使用ver3版本

例如:

/etc/exports中配置为

/storage 192.168.10.*(rw,sync,no_subtree_check,no_root_squash,fsid=0)

在客户端使用命令mount.nfs4 192.168.167.100:/storage /share进行挂载

在这里插入图片描述

若使用参数fsid=0,在挂载时指定版本ver4,并指定挂载路径为根目录,则nfs会使用ver4版本

如在客户端使用命令mount.nfs4 192.168.167.100:/ /share 进行挂载

在这里插入图片描述

若不使用参数fsid=0,在HC界面直接挂载,不指定版本,则nfs会使用ver4版本(本文在配置时选用的是这种方式,不配置参数fsid=0)

在这里插入图片描述

④重启服务

[root@tt ~]# systemctl restart rpcbind

[root@tt ~]# systemctl reload nfs-server

[root@tt ~]# netstat -antp | grep rpc

在这里插入图片描述

查看配置

[root@tt ~]# showmount -e

在这里插入图片描述



(2)使用Centos8操作系统的虚拟机搭建方法 服务器端:

挂载光驱安装系统时,需要选择SOFTWARE SELECTION中的以下配置:

在这里插入图片描述

重启后进入系统

查看自带安装的nfs和rpc情况

在这里插入图片描述

其他步骤与hs中搭建一致

备注:防火墙操作 service network restart或者systemctl restart network

在CentOS 8中执行以上命令会报错

正确的命令为nmcli c reload



(3)使用windows server2016操作系统的虚拟机搭建方法

① 创建磁盘:为windows虚拟机新增一个磁盘。

在虚拟机内部,右键开始菜单,选择磁盘管理,初始化磁盘,选择默认选项并确定。

在这里插入图片描述

对未分配的该卷新建简单卷,并格式化成NTFS格式

在这里插入图片描述

在这里插入图片描述

之后右键,将该格式化后的分区标记为活动分区

在这里插入图片描述

② 为虚拟机配置ip

为虚拟机配置一个ip地址,能够与使用NFS共享的服务器互通。

③ NFS服务器安装配置

在服务器管理器下点击添加角色和功能。

在这里插入图片描述

选择服务器角色,然后勾选NFS服务器,下一步直到安装就可以了。

在这里插入图片描述

安装完成后,点击服务器管理器下的文件和存储服务,然后点击共享,在右边的任务下拉菜单中点击新建共享。

在这里插入图片描述

选择NFS共享,快速和高级都可以,然后下一步。

在这里插入图片描述

在共享位置的地方,可以选择整个分区,也可以点击浏览选择分区下的某个文件夹。

在这里插入图片描述

设置一个共享名称,最好用英文,客户端访问的时候比较容易输入也不会出现乱码的情况。

在这里插入图片描述

指定身份验证的方法,可以使用kerberos验证,也可以不做验证。

在这里插入图片描述

添加权限,也就是谁可以访问NFS,可以是IP地址,工作组,还可以是所有的机器都可以访问,可以分配读写权限也可以分配只读权限。

在这里插入图片描述

一直点击下一步,之后确认创建

在这里插入图片描述

④ 在需要关联的客户端上上新建NFS存储池使用

可在客户端查看挂载目录

在这里插入图片描述

备注:使用windows server2016搭建的nfs存储在使用上存在问题,创建qcow2的精简模式的文件会失败。不推荐使用。



(4)使用ubuntu2204操作系统的虚拟机搭建方法

*使用sudo -s命令进入超级用户权限。否则运行命令时需要在前面加sudo

① 为虚拟机配置静态ip

cd /etc/netplan

vim 00-installer-config.yaml

配置如下:

This is the network config written by ‘subiquity’

network:

ethernets:

ens3:

  dhcp4: no

  addresses: [192.168.190.88/24]

  gateway4: 192.168.190.254

version: 2

② NFS服务器安装与配置

ubuntu默认没有安装nfs,需要先连接外网,下载nfs-kernel-server:

apt-get install nfs-kernel-server

创建共享文件夹

cd /home/gzh/nfstest

mkdir nfstest

配置nfs服务

vim /etc/exports 写入下述配置。具体配置的含义见第一条。

/home/gzh/nfstest *(rw,sync,no_subtree_check,no_root_squash)

挂载目录为/home/gzh/nfstest

重启nfs服务:

/etc/init.d/nfs-kernel-server restart

查看nfs服务状态:

/etc/init.d/nfs-kernel-server status

已搭建好的nfs镜像已上传ftp:

用户名gzh

密码ctsi@Passw0rd



5、相关命令和操作:

mount | grep nfs 查看主机nfs的挂载情况

systemctl status nfs-server 查看nfs服务的启动情况

showmount -e 192.168.190.88 客户端侧查看挂载目录

在客户端使用命令 mount或nfsstat -m 可以查看nfs版本

在服务端使用命令nfsstat -s可以查看nfs版本

在这里插入图片描述

在这里插入图片描述

扩展:虚拟机永久挂载磁盘

虚拟机搭建NFS客户端时,会受到存储大小的限制,导致存储池比较小。可以不用系统盘,新增较大的磁盘作为共享目录。永久挂载磁盘到共享目录/storage的方式如下:

mkfs.xfs /dev/vdb

mount /dev/vdb /storage

硬盘uuid查看命令:

[root@ceph-3 vms]# blkid /dev/sdb

/dev/sdb: UUID=“2b097401-6f4c-41fa-814d-e96c9a734149” BLOCK_SIZE=“512” TYPE=“xfs”

vim /etc/fstab 中增加:

UUID=2b097401-6f4c-41fa-814d-e96c9a734149 /storage xfs defaults 0 0

需要重启服务

systemctl restart rpcbind

systemctl reload nfs-server



6、版本情况

(1)系统版本对NFS的影响:

RHEL6.5以NFSv3作为默认版本,NFSv3使用TCP、UDP协议(端口号是2049),默认是UDP;

RHEL7和RHEL8以ver4作为默认版本,NFSv4使用TCP协议(端口号是2049)和NFS服务器建立连接。

RHEL7默认的NFS配置文件是/etc/sysconfig/nfs

RHEL8默认的NFS配置文件是/etc/ nfs.conf

(2)X86默认版本

①使用centos8虚拟机默认搭建的nfs,配置/ext/exports中使用fsid=0参数时

在这里插入图片描述

关联主机后查到版本是vers=3

在这里插入图片描述

192.168.202.34:/storage on /nfs type nfs (rw,nosuid,nodev,noexec,relatime,vers=3,rsize=524288,wsize=524288,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,mountaddr=192.168.202.34,mountvers=3,mountport=20048,mountproto=udp,local_lock=none,addr=192.168.202.34)

且HA迁移时报错:failed to get “write” lock

在这里插入图片描述

②当配置nfs服务器参数时,不配置fsid=0,关联主机后查到版本是vers=4.2

在这里插入图片描述

(3)ARM默认版本

ARM情况与x86一致



7、存在的问题

(1) NFS异常时阻塞问题

nfs存储异常检测:需要 NFS server异常。可以模拟NFS server虚拟机关机 NFS 服务重启等。观察主机上存储池虚拟机状态。

目前情况的处理办法:

umount -l nfsmount点

通过mount | grep nfs 命令查看nfs mount点

在这里插入图片描述

如上图,mount点为/data/vms/qnfs

如果不恢复 使用systemctl restart libvirtd命令重启libvirtd

关联NFS存储池时连接超时

可能原因:nfs server的防火墙没有开放nfs端口。

解决办法:nfs真实端口其实不是111,111端口是rpc的,nfs所有的端口都要报备给rpc, 通过rpc 111端口发出来。但是centos有针对nfs服务的放行。命令:firewall-cmd –permanent –add-service=nfs

或关闭防火墙



版权声明:本文为qq_41196999原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。