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不是一个版本。但是我在客户端挂载是能成功的,数据也能共享。不知道问题在哪里,不影响使用,就没去钻研这个问题。

NAS数据存储之NFS搭建和使用的更多相关文章

  1. Nfs+Drdb+Heartbeat 数据存储高可用服务架构方案

    一.方案的应用场景 适用于2千万-3千万PV架构的网站,Nfs数据存储高可用服务方案 备注:互联网排名前30左右公司常用的架构 二.生产环境方案部署原理图 三.生产环境服务器硬件配置: 生产环境中采用 ...

  2. 环境搭建 Hadoop+Hive(orcfile格式)+Presto实现大数据存储查询一

    一.前言 Hadoop简介 Hadoop就是一个实现了Google云计算系统的开源系统,包括并行计算模型Map/Reduce,分布式文件系统HDFS,以及分布式数据库Hbase,同时Hadoop的相关 ...

  3. Elasticsearch集群搭建及使用Java客户端对数据存储和查询

    本次博文发两块,前部分是怎样搭建一个Elastic集群,后半部分是基于Java对数据进行写入和聚合统计. 一.Elastic集群搭建 1. 环境准备. 该集群环境基于VMware虚拟机.CentOS ...

  4. java调用Linux执行Python爬虫,并将数据存储到elasticsearch--(环境脚本搭建)

    java调用Linux执行Python爬虫,并将数据存储到elasticsearch中 一.以下博客代码使用的开发工具及环境如下: 1.idea: 2.jdk:1.8 3.elasticsearch: ...

  5. Kooboo CMS技术文档之三:切换数据存储方式

    切换数据存储方式包括以下几种: 将文本内容存储在SqlServer.MySQL.MongoDB等数据库中 将站点配置信息存储在数据库中 将后台用户信息存储在数据库中 将会员信息存储在数据库中 将图片. ...

  6. iOS本地数据存储(转载)

    看到一篇不错的文章,推荐给大家!!! 应用沙盒 1)每个iOS应用都有自己的应用沙盒(应用沙盒就是文件系统目录),与其他文件系统隔离.应用必须待在自己的沙盒里,其他应用不能访问该沙盒 2)应用沙盒的文 ...

  7. [转载]存储基础:DAS/NAS/SAN存储类型及应用

    这篇文章转自博客教主的一篇博客存储基础:DAS/NAS/SAN存储类型及应用, 他是在张骞的这篇博客DAS,NAS,SAN在数据库存储上的应用上做了部分修改和补充.   一. 硬盘接口类型 1. 并行 ...

  8. linux高级数据存储

    linux内此存储模式由5部分组成,自低向上的顺序: 物理卷,内核块设备驱动,内核文件系统驱动,虚拟文件系统,应用程序数据结构; 系统中所有的文件仅按此模式存储,无论是数据还是元数据,均在此模式下统一 ...

  9. Microsoft IoT Starter Kit 开发初体验-反馈控制与数据存储

    在上一篇文章<Microsoft IoT Starter Kit 开发初体验>中,讲述了微软中国发布的Microsoft IoT Starter Kit所包含的硬件介绍.开发环境搭建.硬件 ...

随机推荐

  1. 笃情开源:我和 Apache DolphinScheduler 社区的故事

    背景 本文的主人翁是 2 次飞机参会现场交流,四天研究就把 DolphinScheduler 用上生产的来自车联网行业的大数据 boy - 黄立同学.怎么样,听起来是不是有点 crazy?下面就来看看 ...

  2. Luogu2580 于是他错误的点名开始了 (Trie树)

    复习\(Trie\),忘了用\(val[]\)表示每个节点权值,用\(vis[]\)水过了 #include <iostream> #include <cstdio> #inc ...

  3. Luogu1083 借教室 (线段树)

    当根都<0,就不行了 #include <iostream> #include <cstdio> #include <cstring> #include &l ...

  4. Word 常识备忘录

    一句科普 名词解释 左右页边距 正文到纸左右两边之间的间距. 分页符 分页符是分页的一种符号,上一页结束以及下一页开始的位置. 分栏符 分栏的页面使用分栏符可以使一列分栏的段落排列到另一栏. 邮件合并 ...

  5. 【PostgreSQL】PostgreSQL 15移除了Stats Collector

    试用即将发行的PostgreSQL 15的人会发现少了一个后台进程:​ postgres 1710 1 0 04:03 ? 00:00:00 /usr/pgsql-15/bin/postmaster ...

  6. 尝试理解Linux容器进程与宿主机共享内核到底是什么意思?

    背景 近期接触容器技术时,经常看到各类比较容器与虚拟机区别的文章中会提到:容器是共享宿主机的内核,而虚拟机则是拥有自己独立的内核,所以不可能在Linux上用容器运行windows,但是用虚拟机则可以. ...

  7. 面试突击78:@Autowired 和 @Resource 有什么区别?

    @Autowired 和 @Resource 都是 Spring/Spring Boot 项目中,用来进行依赖注入的注解.它们都提供了将依赖对象注入到当前对象的功能,但二者却有众多不同,并且这也是常见 ...

  8. Qt 创建按钮动画

    1 封装自定义按钮 myPushBttton 2 构造函数 (默认图片,按下后显示图片) 3 测试开始按钮 4 开始制作特效 5 zoom1 向下弹跳 6 zoom2 向上弹跳 代码如下 main.h ...

  9. Html飞机大战(八):子弹的移动和管理

    好家伙,这应该是这个小游戏最难的几个点之一了 现在我们要做出子弹射击的效果我们应该如何处理? 1.首先我们要确定几个变量和方法的关系 变量: 子弹  bullet  弹夹(用来装子弹的东西)bulle ...

  10. KingbaseES Query Mapping 查询映射功能

    有过SQL优化经历的人都知道,对于有些SQL性能问题,可能需要涉及到SQL层面的修改,这不仅麻烦,而且在已上线的系统还存在很大的风险.KingbaseES V8R6 提供了query mapping功 ...