1、NFS简介
NFS 是 Network File System 的缩写,即网络文件系统。一种使用于分散式文件系统的协定,由 Sun 公司开发,于 1984 年向外公布。功能是通过网络让不同的机器、不同的操作系统能够彼此分享个别的数据,让应用程序在客户端。通过网络访问位于服务器磁盘中的数据,是在类 Unix 系统间实现磁盘文件共享的一种方法。
它的主要功能是通过网络让不同的机器系统之间可以彼此共享文件和目录。NFS 服务器可以允许 NFS 客户端将远端 NFS 服务器端的共享目录挂载到本地的 NFS 客户端中。在本地的 NFS 客户端的机器看来,NFS 服务器端共享的目录,就好像自己的磁盘分区和目录一样。一般客户端挂载到本地目录的名字可以随便,但为方便管理,我们要和服务器端一样比较好。
NFS 一般用来存储共享视频,图片等静态数据。主要是因为如果存储一些动态变化的数据(例如txt文档),就会有及时性同步的问题,因此一般都存储一些静态不频繁修改的数据。
SAMBA与NFS传输协议上的对比:
SAMBA
- smb/cifs
- 跨平台的
NFS
- nfs
- unix、类unix
2、NFS挂载原理
NFS 服务器到底使用什么网络端口来传输数据的,NFS 服务器端其实是随机选择端口来进行数据传输。那 NFS 客户端又是如何知道NFS服务器端到底使用的是哪个端口呢?其实NFS服务器时通过远程过程调用(remote procedure call 简称 RPC)协议/服务来实现的。也就是说 RPC 服务会统一管理 NFS 的端口,客户端和服务端通过 RPC 来先沟通 NFS 使用了哪些端口,之后再利用这些端口(小于 1024)来进行数据的传输。
也就是 RPC 管理服务端的 NFS 端口分配,客户端要传数据,那客户端的 RPC 会先跟服务端的 RPC 去要服务器的端口,要到端口后再建立连接,然后传输数据。
那 RPC 和 NFS 之间又是如何相互通讯的?
- 首先当 NFS 启动后,就会随机的使用一些端口,然后 NFS 就会向 RPC 去注册这些端口。RPC 就会记录下这些端口。并且 RPC 会开启 111 端口,等待客户端 RPC 的请求,如果客户端有请求,那服务端的 RPC 就会将记录的 NFS 端口信息告知客户端。
RPC 和 NFS 的启动顺序是怎样的?
- 在启动 NFS SERVER 之前,首先要启动 RPC 服务(即 portmap 服务,下同)否则 NFS SERVER 就无法向 RPC 服务区注册,另外,如果 RPC 服务重新启动,原来已经注册好的 NFS 端口数据就会全部丢失。因此此时 RPC 服务管理的 NFS 程序也要重新启动以重新向 RPC 注册。特别注意:一般修改 NFS 配置文档后,是不需要重启 NFS 的,直接在命令执行/etc/init.d/nfs reload。
客户端 NFS 和服务端 NFS 通讯过程
- 1)首先服务器端启动 RPC 服务,并开启 111 端口
- 2)启动 NFS 服务,并向 RPC 注册端口信息
- 3)客户端启动 RPC(portmap 服务),向服务端的 RPC(portmap)服务请求服务端的 NFS 端口
- 4)服务端的 RPC(portmap)服务反馈 NFS 端口信息给客户端。
- 5)客户端通过获取的 NFS 端口来建立和服务端的 NFS 连接并进行数据的传输。
3、NFS相关协议以及软件安装管理
协议:
- RPC(Remote Procedure Call Protocol)——远程过程调用协议
软件:
- nfs-utils-* :包括 NFS 命令与监控程序;
- rpcbind-* :支持安全 NFS RPC 服务的连接;
注:通常情况下,是作为系统的默认包安装的,CentOS 6.*之前 rpcbind 叫 portmap。
NFS系统守护进程:
- nfs:它是基本的 NFS 守护进程,主要功能是管理客户端是否能够登录服务器;
- rpcbind:主要功能是进行端口映射工作。当客户端尝试连接并使用 RPC 服务器提供的服务(如 NFS 服务)时,rpcbind会将所管理的与服务对应的端口提供给客户端,从而使客户可以通过该端口向服务器请求服务;
4、NFS服务器的配置
NFS 服务器的配置相对比较简单,只需要在相应的配置文件中进行设置,然后启动 NFS 服务器即可。NFS 服务的配置文件为 /etc/exports,这个文件是 NFS 的主要配置文件,不过系统并没有默认值,所以这个文件不一定会存在,可能要使用 vim 手动建立,然后在文件里面写入配置内容。
/etc/exports 文件内容格式:
- 共享目录 客户端 1(访问权限,用户映射,其他) 客户端 2(访问权限,用户映射,其他)
a. 共享目录:共享目录是指 NFS 服务器共享给客户机使用的目录;
b. 客户端:客户端是指网络中可以访问这个 NFS 共享目录的计算机;
客户端常用的指定方式:
- 指定 ip 地址的主机:192.168.0.200
- 指定子网中的所有主机:192.168.88.0
- 指定域名的主机:www.atguigu.com
- 指定域中的所有主机:*.atguigu.com
- 所有主机:*
c. 设置输出目录的访问权限、用户映射等;
访问权限选项:
- 设置输出目录只读:ro
- 设置输出目录读写:rw
d. 用户 映射 选项;
- root_squash:将 root 用户的访问映射为匿名(nfsnobody)用户 uid 和 gid;(默认生效)
- no_root_squash:保留管理员权限,以服务器管理员的权限管理;
- all_squash:将远程访问的用户及所属组都映射为指定 uid、gid 的匿名用户;
- anonuid=xxx:将远程访问的所有用户都映射为指定 uid 的匿名用户;
- anongid=xxx:将远程访问的所有用户组都映射为指定 gid 匿名组账户;
e. 其它选项 ;
- sync: 将数据同步写入内存缓冲区与磁盘中,效率低,但可以保证数据的一致性(同步);
- async:将数据先保存在内存缓冲区中,必要时才写入磁盘(异步);