NFS网络共享介绍与使用
什么是NFS(网络文件系统)?
NFS(Network File System)即网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间通过TCP/IP网络共享资源。它的主要功能是通过网络(一般是局域网)让不同主机系统之间可以共享文件或目录。NFS客户的(一般是应用服务器,例如,web)可以通过挂载(mount)的方式将NFS服务端共享的数据目录挂载到NFS客户端本地系统中(就是某一个挂载点下)。从NFS客户端的机器本地看,NFS服务器端共享的目录就好像是客户机自建的磁盘分区或目录一样,而实际上确是远端的NFS服务器的目录。
NFS网络文件系统很像windows系统的网络共享、安全功能、网络驱动器映射,这也和linux系统里的samba服务类似。只不过一般情况,windows网络共享服务或者samba服务用于办公局域网共享,互联网中小型网站集群架构后端常用NFS作为数据共享,如果是大型网站。那么有可能还会用到更复杂的分布式 文件系统,例如,Moosefs(mfs),glusterfs,FastDFS等等。

例如:共享/data目录给192.168.43.0/24整个网段的主机可读写。
测试数据如下:
一、NFS服务测试环境环境:
服务器部署:
centos6.5X86_64 服务器角色 ip 192.168.43.117
centos6.5X86_64 客户端角色1 ip 192.168.43.118
centos6.5X86_64 客户端角色2 ip 192.168.43.119
服务端配置:
配置主机名:
hostname nfs-server 临时生效
vi /etc/sysconfig/nework 永久生效

查看操作系统及内核版本信息:
cat /etc/redhat-release 系统版本
uname –r 内核信息
uname –m 系统位数

我们下查询一下机器上是否安装了NFS服务:
rpm –qa nfs-utils rpcbind 如果知道服务器名字,此命令效率高
rpm –qa|egrep “nfs-utils|recbind”

安装nfs软件:centos6.5默认没有安装NFS软件包(centos5默认是会安装的。)因此我们可以:yum install nfs-utils rpcbind –y 命令来安装nfs软件。

rpcinfo –p localhost //查看NFS服务向rpc服务注册的端口信息,因为没启动nfs。

如果rpcbind服务未启动,执行命令rpcinfo –p localhost检查时,会报如下错误:

解决办法:执行/etc/init.d/rpcbind start 启动rpcbind服务即可。
启动rpcbind服务:
/etc/init.d/rpcbind status //查看rpcbind服务状态
/etc/init.d/rpcbind start //启动rpcbind服务
lsof -i :111 //111端口为rpcbind服务对外提供服务的主端口。

启动NFS服务:
启动顺序:rpcbind服务,再启动nfs服务。
etc/init.d/nfs start //启动nfs服务
netstat –lntup|grep 2049 //nfs主端口2049

rpcinfo –p localhost //查看NFS服务向rpc服务注册的端口信息。发现很多端口和功能的对应。

我们可以把启动命令放到/etc/rc.lcal文件里。当然也可以用chkconfig管理。

下面我们开始操作NFS服务端配置文件:
NFS服务的默认配置文件路径为:/etc/exports且默认是空的。

exports配置文件格式:
NFS 共享的目录 NFS客户端地址(参1,参2…)
NFS 共享的目录 NFS客户端地址1(参1,参2…) 客户端地址2(参1,参2…)

接下来,我们开始配置客户端1:

如果执行showmunt -e 192.168.43.117命令出现No route to host错误提示,多数原因是因为防火墙没有关导致的。
解决方法:执行service iptables stop命令即可。
NFS客户端mount挂载的命令:
挂载命令 挂载的格式类型 NFS服务器提供的共享目录 NFS客户端要挂载的目录
mount -t nfs ip地址:共享目录 要挂载的目录(必须存在)
----------------------------------------------------------------------------------------------------------
mount –t nfs 192.168.43.117:/data /mnt
df -h 查看磁盘挂载信息的情况(也可以用cat /proc/mounts)

此时我们测试一下:
①在共享目录/data里创建一个a.txt文件,并写入123值a.txt中,然后再客户端挂载的目录中看是否有服务端创建的文件。
②在服务端删除a.txt文件,过后再客户端创建b.log文件。
服务端:

客户端:


此时发现无法再客户端创建文件:
原因是/data属主为root,解决方法:修改属主

在NFS服务端把要共享的NFS目录赋予默认用户nfsnobody用户和用户组的权限,
如果不设置会导致NFS客户端访问时无法通过NFS本地共享目录权限写入数据,
当然也可以给NFS服务端本地共享目录权限,但工作中最好不用,因为777权限太大了。


用户和用户组都是nfsnobody,服务端认为所有的客户端写入的文件和目录都会被压缩成默认的uid为65534和nfsnobody用户。
我们将rpcbind服务和挂载加入开启启动项:

到此,nfs客户端1挂载成功。
注意:
实战的情况下,客户端是不用安装nfs软件的,centos6.4以前版本;
但是6.5、6.6要是不装的话有时会有问题。所有我们在做测试的时候,
都装nfs和rpbind。但是客户端不用配置nfs和启动
我们可以用同样的方法配置客户端2:
/etc/init.d/rpcbind start
vi /etc/rc.local
/etc/init.d/rpcbind start
mount –t nfs 192.168.43.117:/data /mnt
showmount –e 192.168.43.117
df –h
.......截图省略
此时在客户端2上,我们可以创建文件,也可以管理挂载的目录文件:
创建c.txt文件,并删除服务端a.txt和客户端1b.txt文件。

卸载挂载点: umount -t nfs 192.168.43.117:/data /mnt
个人总结:
在工作中,我们配置/etc/exports内容为:/data 10.1.1.0/24(rw,sync,all_squash)
rw:表示读写。
ro:表示只读
sync:请求或写入数据时,数据同步写入到NFS Server的硬盘后才返回。
优点:数据安全不会丢;缺点:性能比不启用该参数要差
async:写入时数据会先写到内存缓存区,直到硬盘有空挡才会再写入磁盘,
这样可以提升写入效率!风险为若服务器宕机或不正常关机,会损失缓存区中
未写入磁盘的数据
解决办法:服务器主板电池或加UPS不间断电源
all_squash:不管访问NFS Server共享目录的用户身份如何,它的权限都将被压缩成匿名
用户,同时它的UID和GID都会变成nfsnobody账号身份。在早期多个NFS客户端同时读
写NFS Server数据时,这个参数很有用
在生产中配置NFS的重要技巧:
1)确保所有客户端服务器对NFS共享目录具备相同的用户访问权限
a、all_squash把所有客户端都压缩成固定的匿名用户(UID相同)。
b、就是anonuid,anongid指定的UID和GID的用户。
2)所有的客户端和服务器端都需要有一个相同的UID和GID的用户,即nfsnobody(UID必须相同)
例如exports内配置的为:
/data 192.168.43.0/24(rw,sync)
/etc/init.d/nfs reload //在服务端
在客户端df -h 查看依旧是挂载状态,root用户切到/mnt目录下,可以创建目录寄文件;如果用普通用户切换到/mnt目录下,无法创建目录及文件。
反之,如果exports内配置为:/data 192.168.43.0/24(rw,sync,all_squash)
既可以在普通用户下创建目录及文件,可读可写。并且常见的文件及目录属主及属组都为nfsnobody。
如果追求极致:可以用如下参数挂载:
mount –t nfs –o bg,hard,intr,rsize=121072,wsize=121072 192.168.43.0:/data /mnt
安全挂载参数:
mount –t nfs –o nosuid,noexec,nodev,rw 192.168.43.117:/data /mnt
nosuid:不希望共享的存储被执行setuid的功能;
noexec:不希望共享的存储被执行二进制文件;
nodev: 不希望共享的存储创建的设备。
通过mount –o 指定挂载参数和在/etc/fstab里指定挂载参数效果是一样的,网络文件系统和本地的文件系统效果也是一样的。
有关NFS服务的所有服务器内核优化:
cat >>/etc/sysctl.conf<<eof
net.core.wmem_default=8388608
net.core.rmem_default=8388608
net.core.rmem_max=16777216
net.core.wmem_max=16777216
eof
执行sysctl –p 生效。
如果卸载的时候提示: umount:/mnt:device is busy
解决方法:需要退出挂载目录再进行卸载,或者是否NFS server宕机了,需要强制卸载:
mount –lf /mnt
此命令也可以:fuser –km /mnt 不建议用。
nfs性能优化挂载的例子:
①禁止更新目录及文件时间戳挂载
mount –t nfs –o noatime,nodiratime 192.168.43.117:/data
②安全加优化的挂载方式
mount –t nfs –o nosuid,noexec,nodev,noatime,nodiratime,intr,rsize=131072,
wsize=131072 192.168.43.117:/data /mnt (intr:避免出问题时真个系统被NFS锁死)
③默认的挂载方式
mount –t nfs 192.168.43.117:/data /mnt
NFS客户端挂载排错思路:
首先确认NFS服务端配置和服务是否ok(服务端最后自己挂载自己看是否ok)
确认NFS客户端showmount是否ok(提示NO route to host关闭防火墙即可)
NFS网络共享介绍与使用的更多相关文章
- linux下如何挂接(mount)光盘镜像文件、移动硬盘、U盘、Windows网络共享和NFS网络共享
首先,介绍一下挂接(mount)命令的使用方法,mount命令参数非常多,这里主要讲一下今天我们要用到的. 命令格式: mount [-t vfstype] [-o options ...
- ubuntu 10.10配置NFS网络共享步骤
安装好交叉编译环境arm-linux-gcc之后,就开始配置NFS网络共享,用于不同的linux主机与目标机之间文件的共享.如果是windows和linux的共享则需用samba服务. NFS(Net ...
- linux redhat NFS网络共享搭建
nfs网络共享 测试环境: 服务端:redhat6.7 ip:192.168.1.100 客户端:redhat6.7 ip:192.168.1.110 一.服务端 1.创建共享文件夹 权限666即可 ...
- NFS网络共享文件系统
1.nfs服务端配置操作 1.1 创建所需的共享目录--源 mkdir /data/rw #rw代表同步的数据可读可写 1.2 对共享目录进行授权 chown -R nfsnobody.nfsno ...
- NFS网络共享服务 挂载参数及优化 内核优化建议
配置NFS服务端 nfs01上安装软件 [root@nfs01 ~]# yum install nfs-utils rpcbind -y nfs-utils:NFS服务的主程序,包括rpc.nfsd. ...
- nfs网络共享服务基础
nfs原理 1.开启RPC服务 2.NFS向RPC服务注册启动的端口 3.用户向RPC询问NFS服务的端口 4.RPC返回端口给客户端 5.客户端通过获得的端口与NFS服务器进行数据传输 实验步骤 一 ...
- NFS网络共享服务部署
10.3 NFS服务端部署环境准备 10.3.1 NFS服务部署服务器准备 服务器系统 角色 IP Centos6.7 x86_64 NFS服务器端(NFS-server) 192.168.1.14 ...
- centos6.5 nfs实时共享
一.什么时NFS NFS(Network File System)——网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间通过TCP/IP网络共享资源.在NFS的应用中,NF ...
- 网络共享存储服务NFS
网络共享存储服务NFS 作者:Eric 微信:loveoracle11g 环境准备 服务器系统 角色 IP RHEL 7.5 x86-64 NFS服务端 192.168.10.201 RHEL 7.5 ...
随机推荐
- screen 实战后台命令执行备份
一.安装 [root@vmware ~]# yum install -y screen 二.直接在命令行键入 screen 命令 [root@vmware ~]# screen 三.暂时终端会话 那么 ...
- Spring MVC - MultipartFile实现文件上传(单文件与多文件上传)
准备工作: 需要先搭建一个spirngmvc的maven项目 1.加入jar包 <dependency> <groupId>commons-fileupload</gro ...
- Java并发编程-synchronized指南
在多线程程序中,同步修饰符用来控制对临界区代码的访问.其中一种方式是用synchronized关键字来保证代码的线程安全性.在Java中,synchronized修饰的代码块或方法不会被多个线程并发访 ...
- HDFS恢复误删操作的方法
1.通过垃圾箱恢复 使用这种方式的前提是在hdfs上面开启trash功能,默认是没有开启的.interval的值默认为0,单位是分钟.只需要在hadoop的配置文件core-site.xml中添加下面 ...
- springMVC和json整合配置方法
一.配置方法一 1.导入第三方的jackson包,jackson-mapper-asl-1.9.13.jar和jackson-core-asl-1.9.13.jar 百度云链接:https://pan ...
- 团队作业6——展示博客(alpha阶段)
Deadline: 2018-5-9 10:00PM,以提交至班级博客时间为准. 5.10周四实验课将进行alpha阶段项目复审,请在5.10之前,根据以下要求,完成alpha版本的展示,并以此作为参 ...
- [转]微信小程序、微信公众号、H5之间相互跳转
本文转自:https://www.cnblogs.com/colorful-paopao1/p/8608609.html 转自慕课网 一.小程序和公众号 答案是:可以相互关联. 在微信公众号里可以添加 ...
- ASP.NET开发,从二层至三层,至面向对象 (2)
继续上一篇<ASP.NET开发,从二层至三层,至面向对象>http://www.cnblogs.com/insus/p/3822624.html .我们了解到怎样把自己的程序由二层变为三层 ...
- 使用 Swagger UI 与 Swashbuckle 创建 RESTful Web API 帮助文件(转)
作者:Sreekanth Mothukuru2016年2月18日 本文旨在介绍如何使用常用的 Swagger 和 Swashbuckle 框架创建描述 Restful API 的交互界面,并为 API ...
- Sql动态查询拼接字符串的优化
Sql动态查询拼接字符串的优化 最原始的 直接写:string sql="select * from TestTables where 1=1";... 这样的代码效率很低的,这样 ...