NFS(Network File System)即网络文件系统,Sun公司开发,是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间通过TCP/IP网络共享资源。在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样。
简单的说:NFS是Linux之间的一种文件共享系统(Linux与Windows之间的共享使用Samba),NFS配置完成之后,客户端访问这个共享就像访问本地文件一样!(NFS通过软件也可以实现与Windows之间的共享)
RPC,Remote Procedure Call Protocol
远程过程调用协议,是实现本地调用远程主机实现系统调用的协议。
portmapper
:负责分配RPC服务器的端口,并在客户端请求时,负责响应目的RPC服务器端口返回给客户端,工作在tcp与udp的111端口上。
mountd
:是nfs服务的认证服务的守护进程,客户端在收到返回的真正端口时,就会去连接mountd,认证取得令牌。
nfsd
:nfs的守护进程,负责接收到用户的调用请求后与内核发出请求并得到调用结果响应给用户。
idmapd
:是NFS的一个程序,用来负责远程客户端创建文件后的权限问题。
节省本地存储空间,将常用的数据存放在一台NFS服务器上且可以通过网络访问,那么本地终端将可以减少自身存储空间的使用。
用户不需要在网络中的每个机器上都建有Home目录,Home目录可以放在NFS服务器上且可以在网络上被访问使用,而却通过Autofs可以实现目录漫游!(NIS,LDAP)
一些存储设备如软驱、CDROM和Zip(一种高储存密度的磁盘驱动器与磁盘)等都可以在网络上被别的机器使用。这可以减少整个网络上可移动介质设备的数量。
强有力的权限控制
多个机器共享一台CDROM或者其他设备。这对于在多台机器中安装软件来说更加便宜跟方便。
在大型网络中,配置一台中心 NFS 服务器用来放置所有用户的home目录可能会带来便利。这些目录能被输出到网络以便用户不管在哪台工作站上登录,总能得到相同的home目录。家目录漫游
不同客户端可在NFS上观看影视文件,节省本地空间。
在客户端完成的工作数据,可以备份保存到NFS服务器上用户自己的路径下。
NFS是运行在应用层的协议。随着NFS多年的发展和改进,NFS既可以用于局域网也可以用于广域网,且与操作系统和硬件无关,可以在不同的计算机或系统上运行。
控制统一存储,比如集群,这样当我们的访问集群提供的服务,我们拿到的数据怎么都是一致的!
NFS服务nfsd本身监听的端口是2049/tcp和2049/udp,但还会启动其它进程(如mountd,statd,rquotad等)以完成文件共享,这些进程的端口是不固定的;是每次NFS服务启动时向RPC服务注册的,RPC服务会随机分配未使用的端口
安装docker和docker-compose
新建一个部署文件夹,例如nfs-server,然后在文件夹内新建一个docker-compose.yml内容,内容如下:
version: '3'
# https://hub.docker.com/r/itsthenetwork/nfs-server-alpine
services:
nfs-server:
image: https://hub.docker.com/r/itsthenetwork/nfs-server-alpine:12
restart: always
cap_add:
- SYS_ADMIN
- SETPCAP
environment:
- SHARED_DIRECTORY=/nfs-share
- "PERMITTED=${PERMITTED}"
- SYNC=${SYNC}
ports:
- ${PORT}:2049
volumes:
- ${SHARE_PATH}:/nfs-share
新建一个.env文件,内容如下:
SHARE_PATH=/mnt/data
PERMITTED=*
SYNC=true
PORT=2049
变量说明:
在nfs-server文件目录下输入命令 docker-compose up -d,即可部署
开启防火墙2049端口
NFS服务器部署完成之后,需要进行客户端的配置,以下操作在其他Linux服务器上执行
1、首先需要安装挂载所需的软件包(根据不同的系统安装相应的软件包):
1.centos
yum install nfs-utils
2.debain
sudo apt install nfs-client -y
然后进行挂载:
mount -t nfs -o vers=4.2,port=2049 172.16.60.18:/ /mnt
其中172.16.60.18为NFS服务器,/mnt为当前服务器的挂载目录
2、挂载完成之后输入df -h,查看挂载点是否挂载成功
将以上命令写入/etc/rc.local,然后执行chmod +x /etc/rc.local,以实现开机自动挂载。
卸载挂载目录:umount /mnt
服务器A想要访问并使用服务器B的存储空间,操作流程如下:
在服务器B上部署NFS服务,对存储目录进行共享
然后在服务器A通过NFS客户端命令进行挂载,挂载完成后即可访问服务器B的共享目录