1、什么是NFS
共享网络文件存储服务器
2、NFS的原理
1.用户访问NF客户端,将请求转化为函数
2.NFS通过TCP/IP连接服务端
3.NFS服务端接收请求,会先调用portmap进程进行端口映射
4.Rpc.nfsd进程用于判断NFS客户端能否连接服务端
5.Rpc.mount进程用于判断客户端对服务端的操作权限
6.如果通过权限验证(依赖系统用户),可以对服务端进行操作,修改或读取
3、部署NFS服务
1.安装nfs服务
yum install nfs-utils rpcbind -y
注:rpsbind是为nfs提供网络,默认安装nfs-utils 会自动安装rpcbind
2.关闭防火墙和selinux
setenforce 0 临时关闭
setenforce 1 开启服务
cat /etc/selinux/config
SELINUX=disabled s
ystemctl stop firewalld 关闭防火墙
systemctl disable firewalld 关闭开机自启
3.创建一个目录,用于存放文件的仓库
mkdir /data
4.创建一个系统用户,用于权限验证(权限验证时,真正验证的是UID)
useradd www -r -M -s /sbin/nologin -u 996
说明:
-r:创建系统用户
-M:不创建用户的home目录
-s:指定默认登录shell
-u:为账户指定一个唯一的UID
5.修改NFS的配置文件(作用:指定NFS的仓库及权限)
NFS的配置文件路径:
/etc/exports
设置仓库地址:
vi /etc/exports
/data 172.22.1.0/20(rw,all_squash,sync,anonuid=996,anongid=996)
/仓库路径 允许放通IP段/20(rw,all_squash,sync,anonuid=996,anongid=996)
NFS参数详解:
控制NFS读写权限
rw 读写权限(常用)
ro 只读权限(不常用)
控制访问NFS时,NFS基于的权限
root_squash 当NFS客户端以root管理员访问时,映射为NFS服务器的匿名用户(不常用)
no_root_squash 当NFS客户端以root管理员访问时,映射为NFS服务器的root管理员(不常用)
all_squash 无论NFS客户端使用什么账户访问,均映射为NFS服务器的匿名用户(常用)
no_all_squash 无论NFS客户端使用什么账户访问,都不进行压缩(不常用)
控制NFS同步方式
sync 同时将数据写入到内存与硬盘中,保障不丢失数据,但是会产生延时(常用)
async 优先将数据保存到内存,然后在写入硬盘,这样效率较高,但可能会导致数据丢失(不常用)
控制默认的用户(非必须)
anonuid 配置all_squash使用,指定NFS的用户UID,必须存在系统(常用)
anongid 配置all_squash使用,指定NFS的用户GID,必须存在系统(常用)
6.启动NFS服务
systemctl start nfs-server rpcbind
7.查看NFS的挂载点是否设置成功
查看指定服务器的挂载点
showmount -e 172.22.1.66
查看本机的挂载点
showmount -e
8.给服务端设置权限
chown www.www /data/
9.挂载使用(客户端必须安装nfs-utils)
客户端安装:
yum install nfs-utils -y
挂载目录:
mount -t nfs 172.22.1.66:/data /opt
注:需要挂载到本地哪个目录,把/opt 改为需要挂载的就可以,172.22.1.66 为nfs地址,/data 为nfs的挂载目录
注:如挂载失败,排查一下几个原因
selinux没有关闭
防火墙没有关闭
nfs客户端未安装
无权限
NFS服务端是root权限,查看当前目录权限,更改权限:chown www.www /data/
四、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生效。
5、详解NFS的权限参数
6、使用php简单上传实例,进行测试NFS 挂载是否成功
1.在web机器中,安装web服务,并安装NFS服务
yum install htppd php -y nfs-utils
2.上传测试代码
上传地址:/var/www/html/目录下
3.开启web服务
systemctl start httpd
4.修改httpd的启动用户
vi /etc/httpd/conf/httpd.conf
User www
Group www
重启服务
systemctl restart httpd
查看服务运行
ps -ef | grep http
5.修改站点目录的用户
chown -R www.www /var/www/html
6.挂载目录到NFS
mount -t nfs 172.22.1.66:/data /var/www/html/upload #挂载
umount -t nfs 172.22.1.66:/data /var/www/html/upload #卸载
7.配置开启自动挂载、开机自启服务
vi /etc/rc.local tail -1
/etc/rc.local mount -t nfs 172.22.1.66:/data /var/www/html/upload
systemctl enable rpcbind
systemctl enable nfs
rpcinfo -p #查看端口是否生效
注:所有机器需要使用NFS时,都需要安装NFS服务:nfs-utils,并关闭防火墙及selinux,权限必须设置一致。