4

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

 1 year ago
source link: https://www.cnblogs.com/gaowenwenwen/p/16825349.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

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

一,环境准备

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

2005842-20221025162647491-1350742290.png

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

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

2005842-20221025163539748-1604065509.png
2005842-20221025164006331-219431066.png

 三,服务器端创建要共享的目录,并设置权限为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 使配置立即生效.
2005842-20221025165020380-324360024.png

五,防火墙相关配置

配置文件是 /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

2005842-20221025173920789-1445691954.png

 客户机端执行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命令创建几个文件,服务器创建的,客户机会有,客户机创建的,服务器也有,表示一切顺利。也可能出现挂载显示成功,数据不同步的情况,后面再详细分析可能性。

2005842-20221025175657009-2054913304.png

八,可能出现的问题分析

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 ..出去。

2005842-20221025190912993-402553523.png

 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命令,出现以下错误

2005842-20221025191946863-1840882576.png

 6,服务端停掉rpcbind服务

2005842-20221025192128296-2073024619.png

 7,服务端停掉rpcbind服务,也停掉nfs服务时
2005842-20221025192228364-1664765284.png
 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加上了。

2005842-20221025195108165-834799614.png

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK