天将降大任于是人也,必先苦其心志,劳其筋骨,饿其体肤,空乏其身,行拂乱其所为,所以动心忍性,曾益其所不能。

时间在流逝,在不正经就晚咯

NFS存储服务

一、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 什么环境使用

  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配置文件
[root@nfs129 ~]# vim /etc/exports
[root@nfs129 ~]# 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)

  5.7:客户端实现开机自动挂载

开机自动挂载
两种方式:
1、把挂载的命令放到/etc/rc.local中 最好的方式
2、直接在/etc/fstab 中可能会有问题 原因是因为你NFS还没启动就挂载fstab会比NFS先启动 (解决方法:开机自启动netfs服务)

六、NFS 扩展(与rsync实时同步)

  6.1:nfs+inotify+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是提供挂载的主程序,如果出现故障,那么挂载本服务器的共享的客户端均会出现故障。主程序都出错了,结果可想而知嘛。就像车子发动机都不动了,还怎么开。

网络故障

网络故障:网络是提供网络服务的最基础条件,如果出现故障,那么基于网络以上的服务都会出现故障。
posted @ 2018-09-03 10:56  一本正经的搞事情  阅读(6191)  评论(0编辑  收藏  举报