1、什么是NFS?
全称 network file system 网络文件系统
通过网络存储和组织文件的一种方法或机制。
什么是文件系统?
2、为什么要用共享存储?
前端所有的应用服务器接收到用户上传的图片、文件、视频,都会统一
的放到后端的存储上。
为什么要共享?所有节点服务器都需要将内容存到存储上,取的统一来取。
3、RPC与NFS如何通讯
  因为NFS支持的功能相当多,而不同的功能都会使用不同的程序来启动,每启动一个功能就会启用一些端口来传输数据,因此NFS的功能对应的端口并不固定,客户端要知道NFS服务器端的相关端口才能建立连接进行数据传输,而RPC就是用来统一管理NFS端口的服务,并且统一对外的端口是111,RPC会记录NFS端口的信息,如此我们就能够通过RPC实现服务端和客户端沟通端口信息。PRC最主要的功能就是指定每个NFS功能所对应的port number,并且通知客户端,记客户端可以连接到正常端口上去。
  那么RPC又是如何知道每个NFS功能的端口呢?
  首先当NFS启动后,就会随机的使用一些端口,然后NFS就会向RPC去注册这些端口,RPC就会记录下这些端口,并且RPC会开启111端口,等待客户端RPC的请求,如果客户端有请求,那么服务器端的RPC就会将之前记录的NFS端口信息告知客户端。如此客户端就会获取NFS服务器端的端口信息,就会以实际端口进行数据的传输了。
提示:在启动NFS SERVER之前,首先要启动RPC服务(即portmap服务,下同)否则NFS SERVER就无法向RPC服务区注册,另外,如果RPC服务重新启动,原来已经注册好的NFS端口数据就会全部丢失。因此此时RPC服务管理的NFS程序也要重新启动以重新向RPC注册。特别注意:一般修改NFS配置文档后,是不需要重启NFS的,直接在命令执行/etc/init.d/nfs  reload或exportfs –rv即可使修改的/etc/exports生效。
4、NFS客户端和NFS服务端通讯过程
1)首先服务器端启动RPC服务,并开启111端口
2)服务器端启动NFS服务,并向RPC注册端口信息
3)客户端启动RPC(portmap服务),向服务端的RPC(portmap)服务请求服务端的NFS端口
4)服务端的RPC(portmap)服务反馈NFS端口信息给客户端。
5)客户端通过获取的NFS端口来建立和服务端的NFS连接并进行数据的传输。
NFS部署
1.0、NFS软件安装
要部署NFS服务,必须安装下面两个软件包:nfs-utils:NFS主程序,rpcbind:PRC主程序; 
NFS服务器端和Client端都需要这安装这两个软件。
注意:NFS的RPC服务器,Centos5下名字为portmap,CentOS6和CentOS7下名称为rcpbind
NFS软件包
nfs-utils:NFS主程序,包含rpc.nfsd  rpc.mount两个deamons
rpcbind:RPC主程序
1、查看NFS软件包
       [root@server7 ~]# rpm -qa | egrep "nfs|rpcbind"
      [root@server7 ~]#
我的CentOS release 7.3.1611是最小化安装,默认没有安装nfs和rpcbind
Yum搜寻下安装包是否存在
[root@server7 ~]# yum search nfs-utils  rpcbind
2、安装NFS和RPC服务
       [root@server7 ~]# yum install nfs-utils  rpcbind
       [root@server7 ~]# rpm -qa  | egrep "nfs|rpcbind"
  rpcbind-0.2.0-38.el7_3.1.i686
  nfs-utils-1.3.0-0.33.el7_3.i686
  libnfsidmap-0.25-15.el7.i686
 
查看这两个软件包在电脑里都安装了什么文件;
[root@server7 ~]# rpm -ql nfs-utils
3、启动NFS服务
3.1、启动NFS服务之前先启动rpcbind服务
查看rcpbind状态
[root@server7 ~]# systemctl status rpcbind
注:rpcbind安装成功后默认已经开启,并且为开机自动启动。如果没有启动的话,我们来重新启动rcpbind服务
[root@server7 ~]# systemctl restart  rpcbind
查看PRC端口
[root@server7 ~]# netstat -tlunp |grep rpcbind
未启动NFS之前查看NFS服务向PRC注册的端口信息
[root@server7 ~]# rpcinfo -p localhost
3.2、RPC服务启动后再启动NFS服务
查看状态
[root@server7 ~]# systemctl status  nfs
默认未启动,系统开机重启后不启动,启动nfs服务,将设置为开机启动。
[root@server7 ~]# systemctl start nfs
[root@server7 ~]# systemctl enable nfs
启动NFS后我们再次查看rpc注册的端口信息
[root@server7 ~]# rpcinfo -p localhost
在确认启动没用问题后我们看一看NFS到底开了哪些端口
[root@server7 ~]# netstat -tulnp |grep -E '(rpc|nfs)'
4、NFS常见进程详解
[root@server7 ~]# ps -ef |egrep "rpc|nfs“
  • nfsd
  最主要的NFS服务提供程序,这个daemon主要的功能就是管理客户端是否能够使用服务器文件系统挂载信息,其中还包含判断这个登录用户的ID。
  • rpc.mountd
  这个daemon主要功能则是管理NFS的文件系统。当client端顺利通过rpc.nfsd登入主机后,在它可以使用NFS服务器提供规定文件之前,还会经过文件使用权限的认证程序。它会去读取NFS的配置  文件/etc/exports来对比客户端的权限,当通过这一关之后,client端也就取得使用NFS文件的权限。
  • rpc.lockd (非必要)
  这个daemon用于管理文件的锁定方面,当多个客户端同时尝试写入某个文件时就可以对该文件造成一些问题。rpc.lockd则可以用来克服这此问题。但rpc.lockd必须要同时在客户端和服务器端都开  启才行。
  • rpc.statd(非必要)
  这个daemon可以用来检查文件的一致性,若发生因为客户端同时使用同一个文件造成文件损坏时,rpc.statd可以用来检测并尝试恢复该文件
5、配置NFS服务
  NFS软件很简单,主要配置文件:/etc/exports,默认这个里面内容是空的,如果没有这个文件,可以使用vim主动建立这个文件。至于NFS服务器的搭建也很简单,只要编辑好主要配置文件/etc/exports之后,先启动rpcbind(若已经启动了,就不要重新启动),然后再启动nfs,NFS就成功了。
     那么/etc/exports应该如何设置?
[root@server7 etc]# vi /etc/exports
/tmp/data      192.168.1.0/24(ro)          client-A.ctos.zu(rw,sync)
#[共享目录]   [客户端地址1(权限)]        [客户端地址2(权限)]
以上是一个简单案例配置,每一行最前面是要共享出来的目录,注意是以目录为单位的
共享目录:存在于我们本机上的目录,我们想共享给网络上的其他主机使用。如我要共享/tmp/data目录,那么此选项可以就直接写/tmp/data目录,这个目录可以依照不同的权限共享给不同的主机。
客户端地址1(参数1,参数2):客户端地址能够设置一个网络,也可以设置单个主机。
参数:如读写权限rw,同步更新sync,压缩来访账号all_squash,压缩后的匿名账号anonuid=uid,anongid=gid等等;
客户端地址的设置主要有以下几种方式:
1)、 可以使用完整的IP或者是网络号,例如192.168.100.100 或 192.168.8.0/24
2)、 可以使用主机名,但这个主机名必须要在/etc/hosts内,或可以使用DNS找到该名称才行,反正重点是可找到IP就行,如果是主机名的话,还可以支持通配符,例如‘*’或‘?’均可接受;例如:host[1-8].ctos.zu,server?.test.com
NFS权限设置
NFS配置权限设置,即/etc/exports文件配置格式中小括号()里的参数集;
参数命令
参数用途
rw
表示可读写
ro
Read-only表示只能读权限
Sync
请求或者写入数据时,数据同步写入到NFS server的硬盘中后才会返回
no_root_squas
访问nfs server共享目录的用户如果是root的话,它对该目录具有root权限。这个配置原本为无盘用户准备的。用户应避免使用!
root_squash
对于访问NFS server共享目录的用户,如果是root的话会被压缩成为nobody用户身份。
all_squash
不管访问nfs server共享目录的用户身份如何包括root,它的权限都将被压缩成为匿名用户,同时他们的udi和gid都会变成nobody或nfsnobody账户的uid,gid。在多个nfs客户端同时读写nfs server数据时,这个参数很有用可以确保大家写入的数据的权限是一样的。
但不同系统有可能匿名用户的uid,gid不同。因为此处我们需要服务端和客户端之间的用户是一样的。比如说:服务端指定匿名用户的UID为2000,那么客户端也一定要存在2000这个账号才可以
anonuid
anonuid就是匿名的uid和gid。说明客户端以什么权限来访问服务端,在默认情况下是nfsnobody。Uid65534.
anongid
同anongid,就是把uid换成gid而已
 async 写入数据时,只写入到缓冲区
配置实例:
/home/test  192.168.1.0/24(rw,sync,all_squash,anonuid=2000,anongid=2000)
###注意红色部分不能有空格!!生产环境中常用的一种配置,适合多客户端共享一个NFS目录。All_squash 也就是说不管客户端是以什么样的身份来进行访问的,都会被压缩成为all_squash后面所接的用户和群组身份。这边用anonuid、anongid编号来标示。=
NFS默认用户nfsnobody
[root@nfs01 ~]# grep nfsno /etc/passwd
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
[root@nfs01 ~]# chown -R nfsnobody.nfsnobody /data
[root@nfs01 ~]# ls -ld /data
drwxr-xr-x 2 nfsnobody nfsnobody 51 4月 16 10:24 /data
重启NFS
[root@nfs01 ~]# systemctl reload nfs #《==生产场景必须要实现平滑重启。
[root@nfs01 ~]# exportfs -r
上述二者等价,选一个即可。
客户端以什么身份来访问?
客户端访问服务端默认是使用nfsnobody这个用户来进行访问的。uid和gid为65534。服务器默认共享时,也是加上了all_squash这个参数。并制定anonuid为65534(也就是nfsnobayd用户)。当然如果系统中nfsnobody是其他的uid,那么就有可能造成访问权限出现问题。所以最好我们可以通过一设置一个用户来访问,统一UID、GID。

NFS原理的更多相关文章

  1. NFS原理详解

    NFS原理详解 摘自:http://atong.blog.51cto.com/2393905/1343950 2013-12-23 12:17:31 标签:linux NFS nfs原理详解 nfs搭 ...

  2. 转:NFS原理详解

    原文:http://atong.blog.51cto.com/2393905/1343950 一.NFS介绍 1)什么是NFS 它的主要功能是通过网络让不同的机器系统之间可以彼此共享文件和目录.NFS ...

  3. nfs 原理详解

    一.NFS介绍 1)什么是NFS 它的主要功能是通过网络让不同的机器系统之间可以彼此共享文件和目录.NFS服务器可以允许NFS客户端将远端NFS服务器端的共享目录挂载到本地的NFS客户端中.在本地的N ...

  4. nfs原理及安装配置

    一.简介 二.工作原理 三.安装配置 一.简介 NFS(Network File System)即网络文件系统,它允许网络中的计算机之间通过网络共享资源.将NFS主机分享的目录,挂载到本地客户端当中, ...

  5. 2019.2.4 nfs原理和安装实验

    NFS 访问一个本地文件还是NFS共享文件对于客户端而言都是透明的,当文件打开的瞬间,内核会作出一个决定,如果是本地文件内核会将本地NFS共享文件内核会将NFS共享文件的所有引用传递给——>NF ...

  6. (转)原理到实现 | K8S 存储之 NFS

    转:https://mp.weixin.qq.com/s/Mrr1Rnl_594Gyyn9fHekjw 1NFS介绍 NFS是Network File System的简写,即网络文件系统,NFS是Fr ...

  7. 客户端挂载NFS服务器中的共享目录(用户后台上传图片与前台上传图片放在同一个服务器上)

    服务器端使用showmount命令查询NFS的共享状态 # showmount -e //默认查看自己共享的服务,前提是要DNS能解析自己,不然容易报错 # showmount -a //显示已经与客 ...

  8. Ubuntu 12.04 LTS 及ubuntu14.10 -- NFS安装

    在Linux 服务器上配置好NFS 根文件系统后,在单板侧挂载NFS 文件系统,具体操作如下:ifconfig eth0 hw ether 00:10:85:18:01:84 /*配置MAC地址*/i ...

  9. Linux下的NFS快速配置教程与安全策略

    [51CTO专稿]在Linux下实现文件共享有多种方式,NFS就是其中之一.网络文件系统(NFS)协议是由Sun MicroSystem在20世纪80年代为了提供对共享文件的远程访问而设计和实现的.该 ...

随机推荐

  1. .pkl文件是什么?python

    对于.pkl文件,我是在接触 SMPL模型的时候用到的.SMPL的开源项目包里,有model文件夹,打开有两个.pkl文件.然后,找到了一个说的相对比较详细的网址.https://jingyan.ba ...

  2. 【AMAD】salabim -- Python中进行离散事件模拟

    简介 用法 个人评分 简介 salabim1是用来定义离散事件模拟(DES2),以及转换为动画的一个python库. 用法 请看官方文档3. 个人评分 实用性是基于对平均群众的,大多数人还是接触不到这 ...

  3. OpenStack组件——Neutron网络服务(2)

    1.虚拟机获取 ip 1)用 namspace 隔离 DHCP 服务 Neutron 通过 dnsmasq 提供 DHCP 服务,而 dnsmasq 通过 Linux Network Namespac ...

  4. Linux 操作命令简

    一.Linux命令及获取帮助 1.Linux命令的格式1)了解Linux命令的语法格式:命令 [选项] [参数]2)掌握命令格式中命令.选项.参数的具体含义a)命令:告诉Linux(UNIX)操作系统 ...

  5. logistics多分类

    multiclassification #DATASET: https://archive.ics.uci.edu/ml/datasets/Glass+Identificationimport num ...

  6. webdriervAPI(操作cookie)

    from  selenium  import  webdriver driver  =  webdriver.Chorme() driver.get("http://www.baidu.co ...

  7. 2019中山纪念中学夏令营-Day20[JZOJ] T1旅游详解

    2019中山纪念中学夏令营-Day20[JZOJ] 提高组B组 Team_B组 T1 旅游 Time Limits: 2000 ms  Memory Limits: 262144 KB Descrip ...

  8. jinja2介绍

    jinja2介绍 jinja2是Flask作者开发的一个模板系统,起初是仿django模板的一个模板引擎,为Flask提供模板支持,由于其灵活,快速和安全等优点被广泛使用. jinja2的优点 jin ...

  9. Eclipce远程调试

    1.注意: root权限启动的进程不支持远程调试,也有很多隐患,支持最高权限,应用普通用户启动,又原先安装Tomcat是使用的root权限,普通用户对root安装的软件没有执行权限,可以修改相应权限, ...

  10. ado.net SqlHelp类

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...