一.NFS简介
NFS(Network File System)即网络文件系统,它允许网络中的计算机之间通过网络共享资源。将NFS主机分享的目录,挂载到本地客户端当中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,在客户端端看起来,就像访问本地文件一样。
RPC,基于C/S模型。程序可以使用这个协议请求网络中另一台计算机上某程序的服务而不需知道网络细节,甚至可以请求对方的系统调用。
对于Linux而言,文件系统是在内核空间实现的,即文件系统比如ext3、ext4等是在Kernel启动时,以内核模块的身份加载运行的。
二.NFS原理
NFS本身的服务并没有提供数据传递的协议,而是通过使用RPC(远程过程调用 Remote Procedure Call)来实现。当NFS启动后,会随机的使用一些端口,NFS就会向RPC去注册这些端口。RPC就会记录下这些端口,RPC会开启111端口。通过client端和sever端端口的连接来进行数据的传输。在启动nfs之前,首先要确保rpc服务启动。
原理如下:
-
本地用户要访问nfs服务器中文件,先向内核发起请求,内核处理调用nfs模块及rpc client
-
rpc client向rpc server发起连接
-
在连接之前,NFS服务除了启动nfsd本身监听的端口2049/tcp和2049/udp,还会启动其它进程(如mountd,statd,rquotad等)以完成文件共享,这些进程的端口是不固定的;是每次NFS服务启动时向RPC服务注册的,RPC服务会随机分配未使用的端口
-
完成连接,接受访问请求
-
nfs应用程序向内核发起请求
-
内核调用文件系统
然后client端通过获取的NFS端口来建立和server端的NFS连接并进行数据的传输。
以下为启动各服务的作用
rpc:远程过程调用协议,是实现本地调用远程主机实现系统调用的协议。(中介)
portmapper:负责分配rpc server的端口,并在client端请求时,负责响应目的rpc server端口返回给client端,工作在tcp与udp的111端口上。
mountd:是nfs服务的认证服务的守护进程,client在收到返回的真正端口时,就会去连接mountd,认证取得令牌。
nfsd:nfs的守护进程,负责接收到用户的调用请求后与内核发出请求并得到调用结果响应给用户,工作在tcp和udp的2049端口。
idmapd:是NFS的一个程序,用来负责远程client端创建文件后的权限问题。
quotad:用用于实现磁盘配额,当client端挂载nfs后可以限制磁盘空间的大小。
三.NFS安装与部署—服务端
a.安装软件程序
I:安装NFS和rpc
yum install -y rpc-bind nfs-utils
【安装nfs服务】
II:安装rpcbind
yum install -y rpcbind
【安装rpc服务】
#### 练习题 ####
/data01/w 10.0.0.41主机挂载(可读可写,数据同步,所有用户都要进行身份转换)
/data01/r 172.16.1.0/24网段主机挂载(只读权限,数据异步传输,所有用户不要进行转换)
b.编写配置文件:/etc/exports
I:格式:[共享的目录] [主机名或IP(参数,参数)]
当将同一目录共享给多个客户机,但对每个客户机提供的权限不同时,可以这样:
[共享的目录] [主机名1或IP1(参数1,参数2)] [主机名2或IP2(参数3,参数4)]
II:配置说明
第一列,可以共享的目录,共享到网络的文件系统
第二列,可访问主机
172.16.1.7 ----指定IP地址的主机
nfsclient.test.com------指定域名的主机
172.16.1.0/24-------指定网段中的所有主机
* ----------代表所有主机
III:配置文件常用共享参数
ro 只读访问
rw 读写访问
sync 所有数据在请求时写入共享
async NFS在写入数据前可以相应请求
secure NFS通过1024以下的安全TCP/IP端口发送
insecure NFS通过1024以上的端口发送
wdelay 如果多个用户要写入NFS目录,则归组写入(默认)
no_wdelay 如果多个用户要写入NFS目录,则立即写入,当使用async时,无需此设置。
Hide 在NFS共享目录中不共享其子目录
no_hide 共享NFS目录的子目录
subtree_check 如果共享/usr/bin之类的子目录时,强制NFS检查父目录的权限(默认)
no_subtree_check 和上面相对,不检查父目录权限
all_squash 共享文件的UID和GID映射匿名用户anonymous,适合公用目录。
no_all_squash 保留共享文件的UID和GID(默认)
root_squash root用户的所有请求映射成如anonymous用户一样的权限(默认)
no_root_squas root用户具有根目录的完全管理访问权限
anonuid=xxx 指定NFS服务器/etc/passwd文件中匿名用户的UID
vi:编写配置文件
/data01/w 10.0.0.41(rw,sync,all_squash) /data01/r 172.16.1.0/24/(ro,async,no_all_squash)
c.创建存储目录
mkdir /data01/{r,w} -p ; chown nfsnobody.nfsnobody /data01/{r,w}
d.启动服务程序
注意:先启动rpc服务,再启动nfs服务。
systemctl start rpcbind
systemctl start nfs
systemctl reload nfs --- 平滑重启
相同点:二者都是使配置文件重新生效
不同点:
reload (重新加载),reload会重新加载配置文件,服务不会中断。而且reload时会测试conf语法等,如果出错会rollback用上一次正确配置文件保持正常运行。也叫平滑重启,不会对已经连接的服务造成影响。
restart (重启)(先stop后start),会重启服务。这个重启会造成服务一瞬间的中断,如果配置文件出错会导致服务启动失败,那就是更长时间的服务中断了。
注意:修改配置文件前一定要先备份!为了保证线上服务高可用,推荐使用reload
四.nfs安装与部署—客户端
a.软件部署
I:安装nfs服务
yum install nfs-utils -y
b.存储设备挂载
backup服务器(10.0.0.41) mkdir /w -p mount -t nfs 10.0.0.31:/data01/w /w web01服务器(172.16.1.7) mkdir /r -p mount -t nfs 172.16.1.31:/data01/r /r
五.nfs挂载操作
如何进行挂载操作
a.方法一: 编写/etc/rc.local
I:把mount 的命令放到/etc/rc.d/rc.local 里面去,vi /etc/rc.d/rc.local ,然后把mount -t nfs 172.16.1.31:data01/r /r 这个命令塞进去。保存退出就好了
b.方法二:编写/etc/fstab
I:172.16.1.31:/data01 /mnt nfs defaults 0 0
网络自动挂载原理:
第一个历程: 系统启动开机自检
第二个历程: 加载系统挂载文件 /etc/fstab 无法实现网络挂载
第三个历程: 启动系统服务程序 network remote-fs.target(centos7) netfs(centos6)
第四个历程: 特殊服务重新加载 /etc/fstab 实现网络挂载
mount挂载参数信息:
-a:把/etc/fstab中列出的路径全部挂载。
-t:需要mount的类型,如nfs等。
-r:将mount的路径定为read only
-v mount:过程的每一个操作都有message传回到屏幕上
rsize=n:(读取内存空间大小)在NFS服务器读取文件时NFS使用的字节数,默认值是1 024个字节。
wsize=n:(设置存储空间大小)向NFS服务器写文件时NFS使用的字节数,默认值是1 024个字节。
timeo=n:从超时后到第1次重新传送占用的1/7秒的数目,默认值是7/7秒
hard:使用硬挂载的方式挂载系统,该值是默认值,重复请求直到NFS服务器回应。
intr:允许NFS中断文件操作和向调用它的程序返回值,默认不允许文件操作被中断。
如何卸载umount:
umount -lf /mnt --- 强制卸载
-l Lazy unmount --- 懒惰卸载
-f force --- 强制卸载
存储服务挂载相关参数命令:
rpcinfo --- 查看nfs服务是否进行注册
rpcinfo -p localhost/172.16.1.31
showmount --- 查看nfs服务存在哪些可以挂载目录
showmount -e localhost/172.16.1.31
exportfs --- 临时创建存储目录/ nfs服务平滑重启
exportfs -rv
exportfs -o rw,sync,all_squash 172.16.1.0/24:/data100
/var/lib/nfs/etab --- 存储服务默认配置记录文件(日志文件)
/etc/exports --- 存储服务配置文件
/proc/mounts --- 存储客户端默认挂载参数信息
存储权限问题和什么有关
存储服务配置文件参数
存储服务目录权限有关 755
存储服务目录权限继承
存储客户端挂载参数