一、NFS 原理图
二、NFS 原理描述
2.1:什么是NFS
NFS中文名字:网络共享存储,就是通过网络共享目录,让网络上的其他服务器能够挂载访问共享目录的数据(NFS一般都是用来存放视频、附件、图片等静态数据的).
NFS是通过网络来进行服务端和客户端数据传输的,那么只要是通过网络的就一定会有端口,那NFS的端口是什么呢?很失望的是NFS的端口是随机的,每次重启服务端口都会改变.
那么客户端是怎样知道服务端的端口的呢?其实NFS服务器是通过远程过程调用(RPC)协议/服务来实现的,也就是说RPC服务会统一管理NFS的端口,客户端和服务端通过RPC来确定端口,进行数据传输.
PS:(哦,原来是RPC管理服务端的NFS端口分配,客户端要传数据,那客户端的RPC会先跟服务端的RPC去要服务器的端口,要到端口后再建立连接,然后传输数据)。
2.2:什么是RPC
RPC(Remote Procedure Call)—远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。
RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间携带信息数据。在OSI网络通信模型中,RPC跨越了 传输层和应用层。RPC使得开发包括网络分布式多程序在内的应用程序更加容易。
RPC采用客户机/服务器模式。请求程序就是一个客户机,而服务提供程序就是一个服务器。
首先,客户机调用进程发送一个有进程参数的调用信息到服务进程,然后等待应答信息。在服务器端,进程保持睡眠状态直到调用信息到达为止。
当一个调用信息到达,服务器获得进程参数,计算结果,发送答复信息,然后等待下一个调用信息,最后,客户端调用进程接收答复信息,获得进程结果,然后调用执行继续进行。
=================================上面说了这么多,其实就是百度百科上面的解释,只要理解了也是对的===================================
PS:在NFS中RPC就是来管理NFS注册的端口的RPC的端口是111
2.3:RPC和NFS之间的关系
NFS服务端需要先启动RPC,在启动NFS,这样NFS才能到RPC注册端口信息,客户端的RPC可以通过向服务端的RPC请求获取服务端的NFS端口信息,获取到端口后,就可以以获取到的实际端口来进行数据传输了
2.4:RPC和NFS启动顺序
① 先启动RPC服务
② 在启动NFS服务
③ 客户端只启动RPC服务就OK
2.5:NFS客户端和NFS服务端的通讯原理
① 首先服务端会启动RPC服务,并开启111端口
② 服务端启动NFS服务,并向RPC注册端口
③ 客户端启动RPC服务,向服务端的RPC服务请求获取NFS端口
④ 服务端的RPC服务反馈端口给客户端的
⑤ 客户端通过服务端的RPC反馈回来的端口和服务端进行数据传输
三、NFS 优缺点
3.1:优点
① 简单容易掌握
② 方便快速的部署维护简单
③ 从软件层面上来看,数据的可靠性高
④ 某一方面来讲节省了本地的磁盘空间
3.2:缺点
① 单点故障 维护麻烦,nfs挂了,也就表示所有的客户端就没法连接了(也是可以通过NFS集群解决这个问题的,也可以考虑Moosefs(mfs)、GlusterFS(大文件存储)、FastDFS分布式文件系统)
② 高并发场合,效率低(2000万pv网站不是瓶颈,除非网站的架构性能很渣)
③ 服务端共享文件客户端认证基于IP和主机名的,安全性一般般(但是一般用NFS都是通过内网来做共享)
④ NFS的数据是明文的,对数据的完整性不做验证(内网用,问题不大)
四、NFS 什么环境使用
① 建议在中小型网站(2000万pv以下)的线上应用
② 访问量小的网站,可以用来做视频、附件、图片的存储
③ 多台服务器同时使用一台服务器的目录
五、NFS 搭建部署
5.1:语法及常用的参数
配置文件语法规则 NFS要共享的目录 NFS客户端地址1(参数1,参数2) 客户端地址2(参数1,参数2) 或者 NFS要共享的目录 NFS客户端地址/网段(参数1,参数2) NFS共享目录:为NFS服务端要共享的实际目录,要用绝对路径,此目录必须要有本地的权限 NFS客户端地址: 为NFS服务端授权的可访问共享目录的NFS客户端地址,可以是一个单独的IP也可以是个网段 权限参数集:rw:可读可写 sync:直接写到磁盘 async:异步写入磁盘(大并发) 常用参数 rw 可读写 ro 可读 sync 请求写入数据时,数据同步到磁盘才返回 async 请求写入数据时,数据先写到缓冲区,只有在磁盘有空的时候写到磁盘,前提是要确保服务器不间断运行,不然会丢数据 all_squash 不管访问NFS Server共享目录的用户身份如何,权限都将会被压缩成匿名用户 目的就是让所有的客户端都能互相管理 anonuid 指定用户UID anongid 指定用户GID 部署完NFS以后会有些命令 /etc/exports 主配置文件 /usr/sbin/exportfs 管理命令 /usr/sbin/showmount 查看NFS的挂载情况 /proc/mounts 查看客户端挂载参数 /var/lib/nfs/rmtab 客户端访问服务器的exports的信息列表 NFS支持平滑重启reload /etc/init.d/nfs reload 或者 /usr/sbin/exportfs -rv 自我检查:showmount -e 192.168.163.129(配置NFS服务端的内网地址)
5.2:在服务端安装NFS和RPC软件
yum安装NFS和RPC 在yum源中有nfs是不存在的,所以要先安装epel源 yum -y install epel-release yum -y install nfs-utils rpcbind
5.3:编辑NFS配置文件
编辑NFS配置文件 [[email protected] ~]# vim /etc/exports [[email protected] ~]# cat /etc/exports # /home/shared by root for web1 server /home/shared 192.168.163.0/24(rw,sync)
5.4:启动NFS并检查启动状态
现在是服务端一定要遵循启动的顺序,先RPC服务在NFS服务 # 启动RPC systemctl start rpcbind.service # 启动NFS systemctl start nfs.service # 查看NFS有没有注册到RPC rpcinfo -p localhost program vers proto port service 100000 4 tcp 111 portmapper 100000 3 tcp 111 portmapper 100000 2 tcp 111 portmapper 100000 4 udp 111 portmapper 100000 3 udp 111 portmapper 100000 2 udp 111 portmapper 100024 1 udp 11064 status 100024 1 tcp 7423 status 100005 1 udp 20048 mountd 100005 1 tcp 20048 mountd 100005 2 udp 20048 mountd 100005 2 tcp 20048 mountd 100005 3 udp 20048 mountd 100005 3 tcp 20048 mountd 100003 3 tcp 2049 nfs 100003 4 tcp 2049 nfs 100227 3 tcp 2049 nfs_acl 100003 3 udp 2049 nfs 100227 3 udp 2049 nfs_acl 100021 1 udp 17683 nlockmgr 100021 3 udp 17683 nlockmgr 100021 4 udp 17683 nlockmgr 100021 1 tcp 2911 nlockmgr 100021 3 tcp 2911 nlockmgr 100021 4 tcp 2911 nlockmgr # 服务端检查 showmount -e 192.168.163.129 出现下面结果成功 Export list for 192.168.163.129: /home/shared 192.168.163.0/24
5.5:客户端安装RPC服务软件
客户端只需要启动RPC服务就好了,一开始感觉可能只安装rpcbind软件就好了,但是最后发现测试的时候没有showmount命令,也就是说明showmount命令是nfs软件带的,所以还是把nfs和RPC都装上比较好 和服务端安装的方式一样 安装epel yum -y install epel-release yum -y install nfs-utils rpcbind # 启动RPC服务 systemctl start rpcbind.service # 客户端检查 showmount -e 192.168.163.129 得到以下结果没问题 Export list for 192.168.163.129: /home/shared 192.168.163.0/24
5.6:客户端挂载测试
挂载命令 mount -t nfs 192.168.163.129:/home/shared/ /mnt/ 检查命令(下面结果成功) df -h | tail -1 192.168.163.129:/home/shared 32G 33M 32G 1% /mnt mount | tail -1 192.168.163.129:/home/shared on /mnt type nfs4 (rw,relatime,vers=4.1,rsize=262144,wsize=262144,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=192.168.163.132,local_lock=none,addr=192.168.163.129)
六、NFS 扩展(与rsync实时同步)
七、NFS 总结
NFS就是网络共享文件系统,就是服务端共享目录,客户端挂载使用,共享文件服务端需要配置/etc/exports文件,添加相应的权限和目录,开启共享目录的本地权限,然后客户端mount挂载,使用默认也行,自己加参数做安全优化也行,服务端的启动顺序一定是先RPC在NFS,在2000万pv的情况下NFS还是一个不错的选择,不管是优点还是缺点,在使用中都能有一个很好的效果(缺点是有办法解决的呦)
八、NFS 错误总结
nfs的三个主程序,知道了对拍错很有帮助的 nfsd这个就是nfs的主程序,如果这个被停了,那就表示nfs完全的瘫掉不能工作,当然就连接不上了 rpc.mountd 这个属于管理共享的挂载机制 rpc.quotad 管理共享配额 ================================================= RPC故障 服务端RPC故障:原有已挂载的不会受到任何影响。所有客户端如果是要挂载本服务器的共享,或者是重新执行已经挂载本服务器的共享的操作(卸载,重新挂载)均会出现错误。因为此时还需要去向RPC去请求端口信息。新的挂载或服务端新的共享均出错。 客户端RPC故障:原有已挂载的不会受到任何影响。本客户端如果要重新挂载,卸载任何服务器的共享均会报错。新的挂载出错. 服务端NFS故障 服务器NFS故障:NFS是提供挂载的主程序,如果出现故障,那么挂载本服务器的共享的客户端均会出现故障。主程序都出错了,结果可想而知嘛。就像车子发动机都不动了,还怎么开。 网络故障 网络故障:网络是提供网络服务的最基础条件,如果出现故障,那么基于网络以上的服务都会出现故障。
原文地址:https://www.cnblogs.com/zhujingzhi/p/9574813.html