NFS介绍

官方文档

NFS(Network File System)即网络文件系统,它最大的功能就是通过TCP/IP网络共享资源。在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样。

NFS客户端一般是应用服务器(比如web,负载均衡等),可以通过挂载的方式将NFS服务器端共享的目录挂载到NFS客户端本地的目录下。

因为NFS支持的功能相当的多,而不同的功能都会使用不同的程序来启动,每启动一个功能就会启用一些端口来传输数据,因此,NFS的功能所对应的端口才没有固定住,而是随机取用一些未被使用的小于1024的端口来作为传输之用。但如此一来又造成了客户端想要连上服务器时的困扰,因为客户端得要知道服务器端的相关端口才能够进行连接。

因此就需要远程过程调用(RPC)的服务,RPC最主要的功能就是在指定每个NFS功能所对应的port number,并且回报给客户端,让客户端可以连接正确的端口上去。那RPC又是如何知道每个NFS的端口呢?这是因为当服务器在启动NFS时会随机取用数个端口,并主动的想RPC注册,因此RPC可以知道每个端口对应的NFS功能,然后RPC又是固定使用port 111来监听客户端的需求并回报给客户端正确的端口,所以当然可以让NFS的启动更为轻松愉快了。

NFS在文件传送过程中依赖与RPC(远程过程调用)协议。NFS本身是没有提供信息传送的协议和功能的,但是能够用过网络进行图片,视频,附件等分享功能。只要用到NFS的地方都需要启动RPC服务,不论是NFS的服务端还是客户端。

NFSRPC的关系:可以理解为NFS是一个网络文件系统(比喻为租房的房主),而RPC是负责信息的传输(中介),客户端(相当于租房的租客)。

NFS网络文件系统存在的意义

实现数据共享,数据保持一致。如图所示:

NFS网络文件系统工作方式

1、在nfs服务器端创建共享目录
2、通过mount网络挂载,将NFS服务端共享目录挂载到NFS客户端本地目录
3、NFS客户端在挂载目录上创建、删除、查看数据等操作,等价于在服务端进行的创建、删除、查看数据等操作。

如上图所示,在NFS服务器端设置一个共享目录/web后,其他有权限访问NFS服务器端的客户端都可以将这个共享目录/web挂载到客户端本地的某个挂载点(其实就是一个目录,这个挂载点可以自己随意指定),不同的客户端的挂载点可以不相同。

客户端正确挂载完毕后,就可以通过NFS客户端的挂载点所在的/opt/www目录查看到NFS服务端/web共享出来的目录下的所有数据。在客户端查看时,NFS服务端的/web目录就相当于客户端本地的磁盘分区或目录,几乎感觉不到使用上的区别,根据NFS服务器端授予的NFS共享权限以及共享目录的本地系统权限,只要在指定的NFS客户端操作挂载的/opt/www目录,就可以将数据轻松的存取到NFS服务器端上的/web目录中了。

NFS工作流程

RPC服务工作原理

NFS部署示例

操作系统 角色 IP HOST
CentOS release 7.4 NFS Server 192.168.1.31 nfs-server.com
CentOS release 7.4 NFS Client1 (web server1) 192.168.1.32 nfs-client1.com
CentOS release 7.4 NFS Client2 (web server2) 192.168.1.33 nfs-client2.com

说明:

这里NFS客户端是web服务器,站点目录挂载NFS服务端。
实验环境关闭防火墙、selinux、时间同步等

具体操作步骤

服务端安装配置

1)检查是否安装NFS、RPC服务

[root@nfs-server ~]# rpm -aq |egrep "nfs-utils|rpcbind"
rpcbind-0.2.-.el7.x86_64
nfs-utils-1.3.-0.48.el7.x86_64 # 如果没有安装则进行安装
# yum -y install nfs-utils rpcbind

2)启动rpcnfs服务

[root@nfs-server ~]# systemctl start rpcbind
[root@nfs-server ~]# systemctl enable rpcbind
[root@nfs-server ~]# systemctl start nfs

3)可以通过rpcinfo -p localhost可以查看到绑定了nfs

[root@nfs-server ~]# rpcinfo -p localhost
program vers proto port service
tcp portmapper
tcp portmapper
tcp portmapper
udp portmapper
udp portmapper
udp portmapper
udp mountd
tcp mountd
udp mountd
tcp mountd
udp mountd
tcp mountd
udp status
tcp status
tcp nfs
tcp nfs
tcp nfs_acl
udp nfs
udp nfs
udp nfs_acl
udp nlockmgr
udp nlockmgr
udp nlockmgr
tcp nlockmgr
tcp nlockmgr
tcp nlockmgr

4)配置共享目录并重启nfs

[root@nfs-server ~]# mkdir /web
[root@nfs-server ~]# vim /etc/exports
/web 192.168.1.0/(rw,sync,no_root_squash) #不压制root(当client端使用root挂载时,也有root权限)
[root@nfs-server ~]# systemctl restart nfs
[root@nfs-server ~]# exportfs -v
/web 192.168.1.0/(sync,wdelay,hide,no_subtree_check,sec=sys,rw,secure,no_root_squash,no_all_squash)

客户端挂载测试

1)创建挂载目录并进行挂载

[root@nfs-client1 ~]# mkdir /opt/www
[root@nfs-client1 ~]# showmount -e 192.168.1.31 #查看服务器共享目录
Export list for 192.168.1.31:
/web 192.168.1.0/
[root@nfs-client1 ~]# mount -t nfs 192.168.1.31:/web /opt/www/
[root@nfs-client1 ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root 20G .6G 16G % /
devtmpfs 473M 473M % /dev
tmpfs 489M 489M % /dev/shm
tmpfs 489M 14M 475M % /run
tmpfs 489M 489M % /sys/fs/cgroup
/dev/sda1 497M 154M 344M % /boot
tmpfs 98M 98M % /run/user/
192.168.1.31:/web 20G .6G 16G % /opt/www
[root@nfs-client1 ~]#
[root@nfs-client1 ~]# vim /etc/fstab #开机自动挂载
192.168.1.31:/web /opt/www nfs defaults

2)在client1上的/opt/www创建一个测试文件

[root@nfs-client1 ~]# echo "client1 create test file" >> /opt/www/client1.txt

3)回到nfs上进行查看

[root@nfs-server ~]# ll /web/
总用量
-rw-r--r-- root root 8月 : client1.txt

4)安装nginx并配置站点目录为/opt/www

[root@nfs-client1 ~]# yum -y install nginx
[root@nfs-client1 ~]# vim /etc/nginx/nginx.conf
server {
listen default_server;
listen [::]: default_server;
server_name _;
root /opt/www;
...
[root@nfs-client1 ~]# systemctl start nginx

上面的步骤同样在client2上面操作。

在nfs服务端创建站点首页,访问client客户端测试

[root@nfs-server ~]# ll /web/
总用量
-rw-r--r-- root root 8月 : client1.txt
-rw-r--r-- root root 8月 : client2.txt [root@nfs-server ~]# echo "<h1>NFS server</h1>" >> /web/index.html #nfs服务端共享目录创建首页文件
[root@nfs-server ~]# curl 192.168.1.32
<h1>NFS server</h1>
[root@nfs-server ~]#
[root@nfs-server ~]# curl 192.168.1.33
<h1>NFS server</h1> [root@nfs-client1 ~]# ll /opt/www/ #nfs客户端1上查看
总用量
-rw-r--r-- root root 8月 : client1.txt
-rw-r--r-- root root 8月 : client2.txt
-rw-r--r-- root root 8月 : index.html [root@nfs-client2 ~]# ll /opt/www/ #nfs客户端2上查看
总用量
-rw-r--r-- root root 8月 : client1.txt
-rw-r--r-- root root 8月 : client2.txt
-rw-r--r-- root root 8月 : index.html

通过测试可以看出,客户端挂载后,就完全相当于自己的一个目录或者文件,在负载均衡架构中一般通过这种方式做共享存储。

NFS配置参数说明

nfs共享参数及作用

通过 man exports可以查看帮助手册

共享参数 作用
rw* 读写权限
ro 只读权限
root_squash 当NFS客户端以root管理员访问时,映射为NFS服务器的匿名用户(不常用)
no_root_squash 当NFS客户端以root管理员访问时,映射为NFS服务器的root管理员(常用)
all_squash 无论NFS客户端使用什么账户访问,均映射为NFS服务器的匿名用户(常用)
no_all_squash 无论NFS客户端使用什么账户访问,都不进行压缩
sync* 同时将数据写入到内存与硬盘中,保证不丢失数据
async 优先将数据保存到内存,然后再写入硬盘;这样效率更高,但可能会丢失数据
anonuid* 配置all_squash使用,指定NFS的用户UID,必须存在系统
anongid* 配置all_squash使用,指定NFS的用户GID,必须存在系统

配置实例说明

[root@nfs-server ~]# cat /etc/exports
#/web 192.168.1.0/(rw,sync,no_root_squash) #不压制root(当client端使用root挂载时,也有root权限)
/web 192.168.1.32(rw,sync,no_root_squash) 192.168.1.33(rw,sync,all_squash,anonuid=,anongid=)
#[共享目录]  [客户端地址1(权限)]  [客户端地址2(权限)]
、共享目录:每一行最前面是共享出来的目录,比如上面我要共享/web目录,那么此选项就可以直接写/web目录,这个目录可以依照不同的权限共享给不同的目录。
、客户端地址:客户端地址能够设置一个网络,也可以是单个主机。参数:如上面的读写权限rw,同步更新sync等待。 、客户端地址可以使用完整的IP或者网络号,例如192.168.1.33或192.168.1./
、同样可以使用主机名,但是这个主机名必须要在/etc/hosts中存在,或者可以通过DNS找到才行。

Linux-存储服务之NFS的更多相关文章

  1. Linux网络服务12——NFS共享服务

    Linux网络服务12--NFS共享服务 一.NFS简介 端口号:TCP.UDP 111端口 NFS(Network File System)网络文件系统,是一种基于TCP/IP传输的网络文件系统协议 ...

  2. Linux文件共享服务之NFS

    NFS(Network File System) 网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间通过TCP/IP网络共享资源.在NFS的应用中,本地NFS的客户端应用可 ...

  3. NFS存储服务

    NFS存储服务笔记======================================================================NFS共享存储是什么: 英文名-Netwo ...

  4. NFS存储服务及部署

    1 NFS简介 1.1 什么是NFS NFS=Network File System=网络文件系统.主要功能是通过网络(一般是局域网)让不同的主机系统之间可以共享文件或目录.NFS客户端(一般为应用服 ...

  5. Linux文件共享服务之Samba

    目录 Samba Samba的配置 Samba Samba是一个能让Linux系统应用Microsoft网络通讯协议的软件,而SMB是Server Message Block的缩写,即为服务器消息块 ...

  6. Linux文件共享服务之Vsftp

    目录 FTP Vsftp服务的搭建 ftp.sftp.vsftp.vsftpd的区别 FTP FTP的工作原理: FTP会话时包含了两个通道,一个叫控制通道,一个叫数据通道.控制通道是和FTP服务器进 ...

  7. Linux NFS存储服务部署

    什么是NFS 中文意思是网络文件系统,主要功能是通过网络(一般是局域网)让不同主机之间可以共享文件或目录 NFS属于本地文件存储服务 缺点1: 1 2 3 4 5 6 7 windows上无法使用   ...

  8. Linux(10):期中架构(2)--- NFS存储服务 & 实时同步

    1. 共享存储服务概念: # NFS是Network File System的缩写,中文意思是网络文件系统, # 它的主要功能是通过网络(一般是局域网)让不同的主机系统之间可以共享文件或目录. 2. ...

  9. 使用URLOS在linux系统中极速部署NFS共享存储服务

    如何在linux系统里搭建NFS服务?其实我们只需要安装一个URLOS面板,然后就能在3分钟内将NFS服务部署完成.近日,URLOS在应用市场中上架了一款NFS应用,它可以让我们的节点主机在3分钟内极 ...

  10. linux服务之nfs

    开发语言:rpc编程环境 服务器端:在linux平台下部署 客户端:一般是cli界面下的mount命令 相关包:rpcbind,nfs-utils 背景 http://nfs.sourceforge. ...

随机推荐

  1. EasyNVR网页摄像机无插件H5、谷歌Chrome直播方案之使用ffmpeg保存快照数据方法与代码

    背景分析 EasyNVR主要功能模块有设备发现与接入.实时直播.摄像机控制.录像与管理.设备快照与状态维护.第三方平台对接,其中设备快照与状态维护主要包括定时检测通道设备的在线状态.定时对通道摄像机进 ...

  2. [转] 2017年PHP开发者大会 鸟哥 (惠新宸@Laruence)精彩问答

    php7.1那个诡异的函数返回类型限定是如何考虑的? 鸟哥:没什么特别考虑,投票投出来的.首先说明一点,我投的是反对票.包括php的命名空间反斜杠我也是非常反对的,但可能由于我并没有对这方面太深的认识 ...

  3. Java的含义

    Java是一种广泛使用的计算机编程语言,拥有跨平台.面向对象.泛型编程的特性,广泛应用于企业级Web应用开发和移动应用开发. Java语言它不是软件,这里给各位初学者们详细解释一下.简单来说计算机语言 ...

  4. Linux基础(02)MakeFile的创建和使用

    makefile是生成文件的脚本 , 把当前文件下的.c文件生成.o文件和可执行程序 SRC = $(wildcard *.c) OBJS = $(patsubst %.c,%.o,$(SRC)) C ...

  5. Golang-使用mysql

    一.安装mysql-driver驱动 go get github.com/go-sql-driver/mysql 二.安装完毕之后,就可以通过go语言操作mysql了 const ( _selectU ...

  6. Vivado关联Notepad++

    Vivado自带的编辑器非常难看,我习惯用Notepad++,这里记录一下二者的关联. 1.打开Vivado,点击 Tools --- Settings --- Text Editor,右侧选择 Cu ...

  7. Java数据结构-ArrayList最细致的解析笔记

    ArrayList是一个类,这个类有一个数组参数elementData,ArrayList集合中的元素正是保存在这个数组中,它继承了数组查询的高性能,参考第3篇.ArrayList还封装了很多方法,便 ...

  8. mongodb常规操作语句

    db.c_user.insertOne({ name: "ljm", pwd: "123456" }); //插入一个 db.c_user.insertMany ...

  9. 自己使用的jquery公用common.js

    /*解决ie8中js数组没有indexOf方法*/ jQuery.extend({ exportResport : function(url, method, params){ var paramCo ...

  10. MPSoc之Hello World学习笔记

    XILINX 新一代 SOC,Zynq UltraScale+ MPSOC 系列性能强悍无比,号称相比ZYNQ 7000系列每瓦性能提升5倍,一直想体验.近期因项目需要,入手了一套米尔的MPSoc开发 ...