Linux中NFS文件共享服务概述及搭建

一、NFS文件共享服务概述

㈠ NFS概述

NFS(Network File System)网络文件系统

  • 主要用于linux系统上实现文件共享的一种协议,其客户端主要是Linux
  • 没有用户认证机制,且数据在网络上传送的时候是明文传送,一般在局域网中使用
  • 支持多节点同时挂载及并发写入

㈡ NFS工作原理

该服务包括的组件:
	1. RPC(Remote Procedure Call Protocol):远程过程调用协议,通过网络从远程计算机程序上请求服务,不需要了解底层网络技术的协议。
	2. rpcbind	            # 负责NFS的数据传输,远程过程调用  tcp/udp协议 端口111
	3. nfs-utils	        # 控制共享哪些文件,权限管理

​ RPC与NFS的通讯:客户端要和服务的进行数据传输,必须指定服务端NFS的端口号,由于NFS服务对应的端口不固定,所以需要RPC来统一管理NFS服务的端口,并且统一对外的端口是111,RPC会记录NFS端口的信息,我们就通过RPC实现服务端和客户端沟通端口信息。

​ RPC是如何指定NFS服务的端口:

  1. 首先当NFS启动后,就会随机的使用一些端口,然后NFS就会向RPC去注册这些端口
  2. RPC记录下这些端口,并且RPC会开启111端口,等待客户端RPC的请求
  3. 客户端发送请求,那么服务器端的RPC就会将之前记录的NFS端口信息告知客户端
  4. 客户端获取NFS服务器端的端口信息,就会以实际端口进行数据的传输了

㈢ NFS应用

企业应用场景:为集群中的web server提供后端存储

Linux中NFS文件共享服务概述及搭建_第1张图片

二、NFS服务配置

㈠ NFS相关软件包

nfs-utils-1.3.0-0.65.el7.x86_64 		nfs服务的一个脚本控制工具(服务端与客户端)
nfs4-acl-tools-0.3.3-20.el7.x86_64	     acl 工具包

[root@nfs ~]# rpm -q rpcbind
rpcbind-0.2.0-48.el7.x86_64
[root@nfs ~]# rpm -aq|grep ^nfs
nfs4-acl-tools-0.3.3-20.el7.x86_64
nfs-utils-1.3.0-0.65.el7.x86_64

[root@client ~]# yum install nfs-utils

㈡ 配置文件解读

通过命令 ‘man 5 exports’查看NFS的配置文件设置
[root@nfs ~]# man 5 exports
[root@nfs ~]# vim /etc/exports  
	# 共享目录        共享选项格式为共享对象+(共享目录给予权限)
	/share   	    *(ro,sync,anonuid=500,anongid=500,all_squash)


共享主机:
*   :代表所有主机
192.168.0.0/24:代表共享给某个网段
192.168.0.0/24(rw) 192.168.1.0/24(ro) :代表共享给不同网段
192.168.0.254:共享给某个IP
*.itcast.com:代表共享给某个域下的所有主机

共享选项:
ro:只读
rw:读写
sync:实时同步,直接写入磁盘
async:异步,先缓存在内存再同步磁盘
anonuid:设置访问nfs服务的用户的uid,uid需要在/etc/passwd中存在	
anongid:设置访问nfs服务的用户的gid
root_squash:默认选项,客户端root用户创建的文件的属主和属组在服务端都变成nfsnobody,客户端其他人创建的文件,在服务端端是它自己,client端是nobody。
no_root_squash:客户端root用户创建的文件属主和属组还是root,其他人服务端是它自己uid,client端是nobody。
all_squash: 不管是root还是其他普通用户创建的文件的属主和属组都是nfsnobody

说明:
anonuid和anongid参数和all_squash一起使用。
all_squash表示不管是root还是其他普通用户从客户端所创建的文件在服务器端的拥有者和所属组都是nfsnobody;服务端为了对文件做相应管理,可以设置anonuid和anongid进而指定文件的拥有者和所属组

㈢ 搭建NFS总结

  1. 分清楚服务端和客户端

    1)NFS服务端,提供一个共享目录

    2)NFS客户端挂载使用

  2. 服务端搭建NFS服务

    1)安装相应的软件(rpcbind、nfs-utils)

    2)发布共享目录

    • 创建共享目录(mkdir /share)

    • 修改配置文件(/etc/exports)

      共享目录		共享给谁,以什么方式
      /share		    10.1.1.0/24(rw)
      

    3)启动服务(先启动rpcbind,再启动nfs)

  3. 客户端挂载使用

    1)安装软件包(nfs-utlis)

    2)挂载使用(mount.nfs 10.1.1.31:/share /挂载点

    showmount -e 10.1.1.31		查看nfs服务器端共享的目录
    

三、NFS文件共享服务搭建:

1、环境准备

Ip地址 主机名 角色
10.1.1.31 nfs NFS服务器
10.1.1.32 cli1 客户端1
10.1.1.33 cli2 客户端2

2. 配置客户端服务器

在 cli1 和 cli2 进行操作
# yum -y install nfs-utils*
# rpm -aq|grep ^nfs
nfs4-acl-tools-0.3.3-20.el7.x86_64
nfs-utils-1.3.0-0.65.el7.x86_64

2、搭建NFS服务

在nfs 服务器上操作
1) 创建共享目录来保存静态资源文件
[root@nfs ~]# mkdir /data/web -p
[root@nfs ~]# echo hello world > /data/web/index.html	

2) 安装相应的软件包(rpcbind  nfs-utils)
[root@nfs ~]# rpm -q rpcbind
rpcbind-0.2.0-48.el7.x86_64
[root@nfs ~]# rpm -aq|grep ^nfs
nfs4-acl-tools-0.3.3-20.el7.x86_64
nfs-utils-1.3.0-0.65.el7.x86_64

3) 修改配置文件发布共享目录
[root@nfs-server ~]# vim /etc/exports
/data/web       10.1.1.0/24(rw)
4) 启动服务,先启动rpcbind再启动nfs
[root@nfs-server ~]# service rpcbind restart
[root@nfs-server ~]# service nfs restart

3、客户端挂载使用

查看nfs服务器共享目录(在客户端进行操作)
# showmount -e 10.1.1.2
Export list for 10.1.1.31:
/data/web 10.1.1.0/24
# mkdir /tmp/point
# mount.nfs 10.1.1.31:/data/web /tmp/point
# df -h
	......
	10.1.1.31:/data/web       17G  1.5G   16G    9% /tmp/point
	...
# ls /tmp/point
	index.html

4、测试验证

在cli1 操作:
	[root@cli1 point]# mkdir file{1..2}cli1
在cli2 查看:
	[root@cli2 point]# ll
		总用量 4
		drwxr-xr-x 2 nfsnobody nfsnobody  6 10月 16 20:13 file1cli1
		drwxr-xr-x 2 nfsnobody nfsnobody  6 10月 16 20:13 file2cli1
		-rw-r--r-- 1 root      root      12 10月 16 19:56 index.html
在cli2 操作:
	[root@cli2 point]# touch test{1..2}-cli2
在cli1 查看:
	[root@cli1 point]# ls
		file1cli1  file2cli1  index.html  test1-cli2  test2-cli2

测试数据表示NFS文件共享能够实现多点同时挂载写入,权限问题仍旧需要通过配置文件进行限定。

此外,NFS共享不适用于windows.

常见故障:

故障描述:

在客户端df -h的时候系卡住,umount /mnt 卸载时,提示device is busy,并且尝试访问挂载目录、ctrl+c也不能强行退出。

故障原因:

造成这种现象的原因是 nfs服务端的网络有问题,但是NFS客户端还存在。nfs客户端挂载默认采用 hard-mount 选项,而不是 soft-mount。

  • hard-mount当客户端加载NFS不成功时,一直重试,直到NFS服务器有响应。所以就会出现客户端卡死问题,系统默认值。
  • soft-mount当客户端加载NFS不成功时,重试指定的次数,如果都不成功,则放弃此操作,返回错误信息 “Connect time out”

解决方法:

mount -t nfs -o soft -o intr -o retry=5 10.1.1.2:/share/nfs /mnt
mount  [选项]  需要挂载的设备    挂载点
mount -o 挂载选项(挂载方式)

其中:
-o soft:使用软挂载的方式挂载系统,若Client的请求得不到回应,则重新请求并传回错误信息。
-o hard:使用硬挂载的方式挂载系统,该值是默认值,重复请求直到NFS服务器回应。
-o intr:允许NFS中断文件操作和向调用它的程序返回值,默认不允许文件操作被中断。
-o retry:在放弃后台mount操作之前可以尝试的次数

你可能感兴趣的:(运维)