文章目录
- 1.NFS
- 1.1 NFS简介
- 1.2 RPC简介
- 1.3 NFS网络文件系统
- 1.4 NFS应用场景
- 1.5 NFS通讯原理
- 2.NFS配置
1.NFS
1.1 NFS简介
-
NFS(Network File System)即网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间通过TCP/IP网络共享资源。在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样。
-
它的主要功能是通过网络让不同的机器系统之间可以彼此共享文件和目录。NFS服务器可以允许NFS客户端将远端NFS服务器端的共享目录挂载到本地的NFS客户端中。在本地的NFS客户端的机器看来,NFS服务器端共享的目录就好像自己的磁盘分区和目录一样。一般客户端挂载到本地目录的名字可以随便,但为方便管理,我们要和服务器端一样比较好。其就相当于windows里面共享文件,然后其他主机把这个共享文件映射成了本地盘使用一样。
-
NFS一般用来存储共享视频,图片等静态数据。
1.2 RPC简介
-
因为NFS支持的功能相当多,而不同的功能都会使用不同的程序来启动,每启动一个功能就会启用一些端口来传输数据。,因此,NFS的功能所对应的端口无法固定,它会随机取用一些未被使用的端口来作为传输,其中CentOS 5.x的随机端口都小于1024,而CentOS 6.x的随机端口都比较大。
-
因为端口不固定,就会造成NFS客户端与NFS服务端的通信障碍。因为NFS客户端必须要知道NFS服务端的数据传输端口才能进行通信,才能交互数据。
-
要解决上面的困扰,就需要通过远程过程调用RPC服务来帮忙,NFS的RPC服务最主要的功能就是记录每个NFS功能所对应的端口号,并且在NFS客户端请求时将该端口和功能对应的信息传递给请求数据的NFS客户端,从而确保客户端可以连接到正确的NFS端口上去,达到实现数据传输交互数据目的。这个RPC服务类似NFS服务端和NFS客户端之间的一个中介。
知识拓展部分:RPC服务使用固定的111端口来监听NFS客户端;
就拿房屋中介打个比喻:
假设我们要找房子,这里的我们就相当于NFS客户端,中介介绍房子,中介就相当于RPC服务,房子所有者房东就相当于NFS服务,租房的人找房子,就要找中介,中介要预先存有房子主人房东的信息,才能将房源信息告诉租房的人。
那么RPC服务又是如何知道每个NFS的端口呢?
这是因为,当NFS服务端启动服务时会随机取用若干端口,并主动向RPC服务注册取用的相关端口及功能信息。如此一来,RPC服务就知道NFS每个端口对应的NFS功能了,然后RPC服务使用固定的111端口来监听NFS客户端提交的请求,并将正确的NFS端口信息回复给请求的NFS客户端,这样一来,NFS客户端就可以与NFS服务端进行数据传输了。
在启动NFS服务之前,首先要启动RPC服务(CentOS 5.x下为portmap服务,CentOS=6.x下为rpcbind服务,下同),否则NFS服务就无法向RPC服务注册使用的端口及对应的功能信息。另外,如果RPC服务重新启动,原来已经注册好的NFS端口数据就会丢失,因此,此时RPC服务管理的NFS程序也需要重新启动以重新向RPC注册。要特别注意的是,一般修改NFS配置文件后,是不需要重启NFS的,直接在命令行执行/etc/init.d/nfs reload或exportfs -arv即可使修改的/etc/exports生效。
1.3 NFS网络文件系统
依赖RPC(Remote Process Call,远端过程调用)机制,以完成远程到本地的映射过程。
需要安装nfs-utils、rpcbind软件包来提供NFS共享服务。
系统服务:nfs(端口号2049)、rpcbind(端口号111),前者用于NFS共享发布和访问,后者用于RPC支持。
共享配置文件:/etc/exports(文件为空,要自己添加需要发布共享以及客户端需要连接和访问的网段)
1.4 NFS应用场景
-
多台web服务器的图片和视频数据都保存在NFS服务器上
-
多台服务器的备份数据都保存在NFS服务器上
1.5 NFS通讯原理
1.服务端启动后将自己的端口信息注册到rpcbind
2.NFS客户端通过TCP/IP的方式连接NFS服务端的rpcbind并获得真实的端口信息
3.NFS客户端获得真实的端口后,将自己需要的操作函数通过⽹络发送给NFS服务端对应的端口
4.NFS服务端接收到请求后,由rpc.nfsd进程判断NFS客户端是否拥有连接权限
5.NFS服务端的rpc.mount进程判断客户端是否有对应的操作权限
6.最后NFS服务端会将对应请求的函数转换为本地能识别的命令,传递至内核,由内核驱动硬件
注意:
rpc 是⼀个远程过程调用,那么使用 nfs 必须有 rpc 服务
2.NFS配置
(1)安装软件,启动服务
服务端安装并启动nfs-utils、rpcbind软件包;
yum -y install nfs-utils rpcbind
###优先启动rpcbind,否则客户端NFS服务可能会找不到服务端的NFS
systemctl start rpcbind
systemctl start nfs
###开机自动启动该服务
systemctl enable rpcbind
systemctl enable nfs
###关闭防火墙和selinux
systemctl stop firewalld
setenforce 0
[root@clr ~]#yum -y install nfs-utils rpcbind
[root@clr ~]#systemctl start rpcbind #切记一定要先启动rpcbind服务,再启动nfs服务
[root@clr ~]#systemctl start nfs
[root@clr ~]#systemctl enable rpcbind #将rpcbind服务和nfs服务设为开机启动
[root@clr ~]#systemctl enable nfs
(2)准备共享目录
修设配置文件,设置共享目录;
先准备硬盘/LVM/RAID,格式化后挂载到需要共享的目录(比如/share),并设置相应的权限
###如果无需客户端写入文件则省略
chmod 777 /share
vim /etc/exports
共享目录 客户端地址/网段(共享参数选项,...)
.....
###共享参数选项用“,”相隔,可有多条共享目录
/data 172.16.1.0/24(rw,sync,all_squash,anonuid=1000,anongid=1000)
共享目录 允许客户端访问的IP(共享参数)
解释:NFS共享目录路径 允许NFS客户端访问的IP地址(参数)
注意:访问地址和参数之间没有空格
[root@clr ~]#mkdir -p /opt/www/root
[root@clr ~]#vim /etc/export
/opt/www/root 192.168.154.0/24(rw,sync,no_root_squahs)
配置文件参数解释如下:
执行 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,必须存在系统
NFS服务的默认配置文件路径为:/etc/exports,并且默认是空的;
[root@clr ~]# vim /etc/exports
##### 编辑如下 #####
/opt/mygirl 192.168.80.0/24(rw,sync)
#表示/opt/mygirl目录可以被192.168.80这个网段所有人去连接,rw是表示有读写权限,sync表示要立即进行同步
showmount -e查看nfs服务端是否已经成功将指定目录共享出来,不写ip地址默认是在nfs服务端本地进行查看,添加ip地址,代表是在客户端查看nfs服务端的共享目录;
[root@clr ~]# showmount -e 192.168.80.20
Export list for 192.168.80.20:
/opt/mygirl 192.168.80.0/24
在客户端创建指定挂载目录,并将192.168.80.20:/opt/mygirl挂载到客户端的/opt/mydata目录下;
[root@clr ~]# mkdir /opt/mydata
[root@clr ~]# mount 192.168.80.20:/opt/mygirl /opt/mydata #将192.168.80.20:/opt/mygirl
###共享目录挂载到客户端的/opt/mydata目录下
(3)发布共享目录
###对NFS配置文件做了修改后,可用以下两条命令重新刷新配置
systemctl restart nfs
###如果客户端正在挂载nfs共享存储目录,重启nfs服务可能会不生效,有延迟,甚至卡死,可用下面的命令发布新的nfs配置(共享目录)
exportfs -avr
(4)客户端挂载使用
###在服务端和客户端查看有哪些共享目录发布
showmount -e 服务端IP
###客户端临时挂载nfs共享目录
mount [-t nfs] 服务端IP:共享目录 本地挂载点
###客户端永久挂载nfs共享目录
vim /etc/fstab
{服务端IP:共享目录 本地挂载点 nfs defaults,_netdev 0 0}
###如果客户端正在挂载中,服务端突然发生事故,nfs服务宕机了,客户端挂载目录会出现卡死现象,可使用命令强制解除挂载
umount -lf
每次更改/etc/exports配置文件中的参数时,都需要客户端先解挂,再重启服务端的nfs服务,最后客户端在进行挂载nfs服务端的共享文件,进行验证测试。