zoukankan      html  css  js  c++  java
  • 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是提供挂载的主程序,如果出现故障,那么挂载本服务器的共享的客户端均会出现故障。主程序都出错了,结果可想而知嘛。就像车子发动机都不动了,还怎么开。
    
    网络故障
    
    网络故障:网络是提供网络服务的最基础条件,如果出现故障,那么基于网络以上的服务都会出现故障。
    作者:朱敬志

    -------------------------------------------

    个性签名:在逆境中要看到生活的美,在希望中别忘记不断奋斗

    如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,博主在此感谢!

    万水千山总是情,打赏一分行不行,所以如果你心情还比较高兴,也是可以扫码打赏博主,哈哈哈(っ•̀ω•́)っ✎⁾⁾!

    支付宝 微信

    也可以关注我的微信公众号,不定时更新技术文章(kubernetes,Devops,Python)等

    微信公众号
  • 相关阅读:
    python之os模块
    python之字符串
    python之爬虫(beautifulsoup)
    python之常见算法
    python之装饰器(类装饰器,函数装饰器)
    python之mock使用,基于unittest
    python之定时器
    python基础语法随记
    redis基础
    移动端页面开发(二)
  • 原文地址:https://www.cnblogs.com/zhujingzhi/p/9574813.html
Copyright © 2011-2022 走看看