NAS数据存储之NFS搭建和使用

NFS是主流异构平台的共享文件系统之一,能够支持在不同类型的系统之间通过网络进行文件共享,允许一个系统在网络上与他人共享目录和文件。NFS传输协议用于服务器和客户机之间的文件访问和共享通信,从而使客户机进程访问保存在存储设备上的数据,挂载成功的情况下,在客户机挂载的目录中操作,如增删改文件或目录,服务器也同样生效。以下就是NFS的搭建方式和遇到的问题分享。

一,环境准备

VMware创建两台虚拟机,我选择的是centos7,如果需要新创建虚拟机,按照网上的教程,编辑/etc/sysconfig/network-scripts/ifcfg-ens33文件,设置虚拟机的ip固定。我主备的环境是服务器端:192.168.229.129,客户机端:192.168.229.130。尽量让两个版本一致,不一致的,比如服务器端是centos8,就出现了奇奇怪怪的问题,后面再详细说一下。

 二,分别在两台机器安装rpcbind、nfs-utils

因为centos7也算是比较老的版本了,而且我选择的镜像也比较简单,这两个服务都没有安装,通过yum命令来做,即 yum -y install rpcbind nfs-utils。如果新环境yum有问题,ping www.baidu.com 等不行,也许是dns的解析文件没有配置,我做了如下配置,修改/etc/resolv.conf,两个地址是windows命令行使用ipconfig -all查询的本地电脑的dns解析地址。

 

 三,服务器端创建要共享的目录,并设置权限为777

mkdir /data/share/
chmod 755 -R /data/share/

四,配置NFS配置

nfs的配置文件是 /etc/exports ,vi /etc/exports后,在配置文件中加入一行:
/data/share/ *(rw,no_root_squash,no_all_squash,sync)
配置可以以ip/端口或者通配为*,ip和端口是客户端的,意思是允许共享的客户端,我为了避免更多的坑,就通配了*,()中的几个参数分别是:
rw 表示设置目录可读写。
no_root_squash NFS客户端连接服务端时如果使用的是root的话,那么对服务端分享的目录来说,也拥有root权限。
no_all_squash 不论NFS客户端连接服务端时使用什么用户,对服务端分享的目录来说都不会拥有匿名用户权限。
sync 表示数据会同步写入到内存和硬盘中,相反 rsync 表示数据会先暂存于内存中,而非直接写入到硬盘中。
如果有多个共享目录配置,则使用多行,一行一个配置。保存好配置文件后,需要执行 exportfs -r 使配置立即生效.

五,防火墙相关配置

配置文件是 /etc/sysconfig/nfs,编辑的话把以下几个插入,实际使用时,不用配置这几个,防火墙等等的关闭了或者放开的比较宽,也能正常互访。
RQUOTAD_PORT=1001
LOCKD_TCPPORT=30001
LOCKD_UDPPORT=30002
MOUNTD_PORT=1002
配置防火墙使用以下几个命令
添加nfs相关端口:
firewall-cmd --zone=public --add-port=111/tcp --add-port=111/udp --add-port=2049/tcp --add-port=2049/udp --add-port=1001/tcp --add-port=1001/udp --add-port=1002/tcp --add-port=1002/udp --add-port=30001/tcp --add-port=30002/udp --permanent
重新加载防火墙配置:
firewall-cmd --reload

六,启动服务

按顺序启动rpcbind和nfs服务,(此顺序不能颠倒,否则后续可能会报错):
systemctl start rpcbind
systemctl start nfs(centos7)
systemctl start nfs-server(centos8)
加入开机启动:
systemctl enable rpcbind
systemctl enable nfs(centos7)
systemctl enable nfs-server(centos8)
nfs服务启动后,可以使用命令 rpcinfo -p 查看端口是否生效。
服务器启动后,我们可以使用 showmount 命令来查看服务端(本机)是否可连接:
服务器端执行 showmount -e localhost
 
 客户机端执行showmount -e 192.168.229.129
如果showmount 命令不可用,则可能是客户端忘记装nfs-utils了,用yum安装即可。

七,客户机执行挂载命令

客户机创建需要挂载的本地目录,并赋权777
mkdir /mnt/share
chmod -R 777 /mnt/share
mount -t nfs 192.168.229.129:/data/share /mnt/share/ -o nolock,nfsvers=3,vers=3
如果没有报错提示的话,执行df -h命令查看,如果显示文件系统是服务端ip:/目录 ,容量也对应上了服务器的用量,则表示挂载成功了,在本地目录/mnt/share执行ls -l 可以看到服务的/data/share中的目录和文件,前提是/data/share在挂载前已经有数据。再用touch命令创建几个文件,服务器创建的,客户机会有,客户机创建的,服务器也有,表示一切顺利。也可能出现挂载显示成功,数据不同步的情况,后面再详细分析可能性。

八,可能出现的问题分析

1,按照以上顺序操作,基本上不会有问题,因为什么都是从头开始的,包括服务器的/data/share和客户机的/mnt/share都没有数据。而且挂载前不cd到/mnt/share目录。但是,若是挂载前cd到客户机的/mnt/share目录了,即使挂载成功,在当前终端的/mnt/share目录操作还是本地的,不同步到服务器端,服务器端创建的,当下也看不到。解决方法也简单,就是cd ..,然后在cd到share目录,或者打开一个新的终端窗口,ls查看是否更新,如果还不行,就是先卸载挂载,本地的什么都清空,重启服务器端的nfs,然后客户端再进行挂载操作。在操作中,还有一种不同步的情况,属于是我瞎操作了,给大家简单说下。就是我还有一台centos8的云服务器,也想设置NFS,当作服务端。按照上面配置,虚拟机的客户端,挂载虚拟机服务端,虚拟机的服务端的/data/share目录又作为本地挂载点挂载到云服务器,这就出现,虚拟机的服务端又是客户端,与云服务器共享了,我以为虚拟机那个纯客户端的,也会共享到云服务器端,但是没有,正如上所述的,/data/share也是作为一个本地文件系统的存在的,在纯客户端那个机器上操作,只会到虚拟机服务端的本地/data/share目录,在虚拟机服务端机器上卸载云服务器挂载,进到/data/share目录,发现了纯客户端创建的新文件。如果想三台机器共享,只要都挂载云服务就可以了,这种一传一的,着实摸不清楚套路。
2,执行卸载挂载的umount命令,出现umount.nfs: /mnt/share: device is busy  ,这种情况可能是在当前终端在共享目录里,或者有其它终端在共享目录中,比如在/mnt/share下,等一会执行也没啥用。解决方法就是cd ..出去,也操作其它当前ip的终端窗口,cd ..出去。
 3,挂载出现 access denied by server while mounting 192.168.229.129:/data/share   ,这种是129的目录已经挂载到云服务器了,先在129卸载云服务器的挂载后再执行。
4,挂载没反应,一直卡着,过会返回mount.nfs: Connection refused,则是我在关闭虚拟机服务端的nfs服务时,出现的,包括已经挂载后,创建文件时卡着了,则都可能时服务端的nfs服务未启动。解决方法就是去nfs服务端执行systemctl start nfs来启动。
5,服务端的nfs服务未启动,在客户机用showmount -e 192.168.229.123命令,出现以下错误

 6,服务端停掉rpcbind服务

 7,服务端停掉rpcbind服务,也停掉nfs服务时

 8,还有 mount.nfs: Stale file handle  ,不太晓得什么原因,解决方法就是重启服务端的两个服务。
 9,客户机show -e 云服务器ip,卡了一会,然后返回clnt_create: RPC: Port mapper failure - Timed out,这种不太清楚哪里不对,只知道我的云服务器是centos8,yum安装的nfs-utils不是一个版本。但是我在客户端挂载是能成功的,数据也能共享。不知道问题在哪里,不影响使用,就没去钻研这个问题。

九,开启自启配置

有教程说是在/etc/rc.d/rc.local中加入挂载的命令,我试了下,不行。还有教程是修改/etc/fstab文件,如下我追加的,能够成功。后面的几个参数不知道什么用处,就按照挂载命令的后面几个数据为3加上了。

 

posted @ 2022-10-25 19:42  gaowen_wenwen  阅读(1688)  评论(1编辑  收藏  举报