zoukankan      html  css  js  c++  java
  • NFS存储服务及部署

    1 NFS简介

    1.1 什么是NFS

    NFS=Network File System=网络文件系统。
    主要功能是通过网络(一般是局域网)让不同的主机系统之间可以共享文件或目录。
    NFS客户端(一般为应用服务器,例如web)可以通过挂载(mount)的方式将NFS服务器端共享的数据目录挂载到NFS客户端本地系统中(就是某一个挂载点下)。从客户端本地看,NFS服务器端共享的目录就好像是客户端自己的磁盘分区或者目录一样,而实际上却是远端的NFS服务器的目录。
    分布式文件系统:Moosefs(mfs)、GlusterFS、FastDFS(推荐)
    NFS属于本地文件存储服务。
    NFS主要用于存储web服务器上用户上传的数据信息,图片 附件 头像 视频 音频。

    1.2 NFS存储服务价值

    (1)可以实现数据统一共享存储
    (2)节省架构服务运营成本

    1.3 NFS存储服务的优缺点

    优点:配置 安装简单
    缺点:没有认证功能        分布式存储/ftp/samba
             无法支持高并发存储  日PV 2000万
       无法实现高可用      分布式存储/keepalived

    1.4 实现Windows与linux文件数据共享

    (1)FTP服务部署
    (2)samba服务部署(可以让Windows与linux同时访问)

    1.5 NFS网络文件共享系统由来

    111.png
    可以实现数据共享,数据统一一致,节省架构服务运营成本

    1.6 NFS网络文件系统工作方式(存储原理)

    (1)在nfs服务端创建共享目录
    (2)通过mount 网络挂载,将NFS服务端共享目录挂载到NFS客户端本地目录上。
    (3)NFS客户端挂载目录上创建、删除、查看数据操作,等价于在服务端进行创建、删除、查看数据操作。
    1.png

    1.7 NFS存储文件系统中两个重要服务

    1 RPC服务    2 NFS服务

    1.7.1 RPC服务工作原理

    nfs1.pngnfs2.png

    因为NFS的各项功能都需要向RPC服务(rpcbind服务)注册,所以只有RPC服务才能获取到NFS服务的各项功能对应的端口号(port number)、PID、NFS在主机所监听的IP等信息,而NFS客户端也只能通过向RPC服务询问才能找到正确的端□。也就是说,NFS需要有RPC服务的协助才能成功对外提供服务。

    1.7.2 NFS工作流程

    NFS流程图.jpg

    1.7.3 NFS详细访问流程


    当访问程序通过NFS客户端向NFS服务器存取文件时,其请求数据流程大致如下:
    (1)首先用户访间网站程序,由程序在NFS客户端上发出存取NFS文件的请求,这时NFS客户端(即执行程序的服务器)的RPC服务(rpcbind服务)就会通过网络向NFS服务器端的RPC服务(rpcbind服务)的111端口发出NFS文件存取功能的询间请求.
    (2)NFS服务器端的RPC服务(rpcbind服务)找到对应的已注册的NFS端口后,通知NFS客户端的RPC服务。l
    (3)此时NFS客户端获取到正确的端口,并与NFS daemon联机存取数据
    (4)NFS客户端把数据存取成功后,返回给前端访间程序,告知用户存取结果,作为网站用户,就完成了一次存取操作。

    2 NFS存储服务部署

    RPC 远程过程调用程序。先启动PRC服务,然后在启动NFS。

    2.1 服务端部署

    2.1.1 安装软件程序

    yum install -y nfs-utils rpcbind
    rpm -qa nfs-utils 
    rpm -qa rpcbind
    

    2.1.2 编写配置文件

    vim /etc/exports	#进入配置文件
    /data 172.16.1.0/24(rw,sync)	#写入命令
    # /data 可以进行共享存储目录
    # 172.16.1.0/24(rw,sync)	允许存储数据网段信息(存储目录权限配置 存储数据方式配置)
    

    sync=同步方式存储数据:用户有数据存储  ----  存储服务器(磁盘中)           存储安全性高
    async=异步方式存储数据:用户有数据存储  ----  内存 --- 存储服务器(磁盘中)  存储效率高

    2.1.3 创建目录,对目录进行授权

    mkdir /data
    chown nfsnobody.nfsnobody /data
    

    2.1.4 启动服务程序

    systemctl start rpcbind
    systemctl reload rpcbind	#重启rpcbind	平滑重启
    systemctl enable rpcbind
    systemctl start nfs
    systemctl reload nfs			#重启nfs
    systemctl enable nfs
    ###	restart:将所有连接会话都会直接断开
    ###	reload:  只会将没有数据传输链接断开,重新建立连接,让用户访问感受更好
    

    2.2 客户端部署

    2.2.1 安装相关软件

    yum install -y nfs-utils
    

    2.2.2 进行存储目录挂载

    mount -t nfs  172.16.1.31:/data  /mnt
    

    2.2.3 进行测试

    客户端创建文件:
    [root@web01 mnt]#ls
    [root@web01 mnt]#touch test.txt
    [root@web01 mnt]#ls
    test.txt
    服务端同步文件:
    [root@nfs01 data]#ls
    [root@nfs01 data]#ls
    test.txt
    服务端与客户端文件同步,则测试成功。
    

    3 存储服务配置文件编写格式

    3.1 配置文件exports参数

    ro只读配置,使存储目录权限位只读,使开发人员只能看 
    rw 读写权限  
    sync 同步存储数据  
    async 异步存储数据  
    all_squash 不论什么用户包括root,都映射为指定nfsnobody用户  
    no_all_squash 对普通用户不做映射,无权限。root用户映射为nfsnobody  
    root_squash 将root用户映射为指定nfsnobody用户,普通用户无权限  
    no_root_squash 将root用户不做映射,普通用户无权限  
    anonuid 指定uid,指定映射成什么用户  
    anongid 指定gid,指定映射成什么用户  

    在企业中,一般选用no_all_squash,root_squash。

    3.1.1 all_squash映射实践

    第一步:服务端修改服务配置文件

    vim /etc/exports
    /data  172.16.1.0/24(rw,sync,all_squash)
    systemctl reload nfs 
    

    第二步:客户端上传数据测试

    [root@web01 mnt]#touch test.txt
    [root@web01 mnt]#ll test.txt
    -rw-r--r-- 1 nfsnobody nfsnobody 0 Jul 16 20:57 test.txt
    

    3.1.2 no_all_squash映射实践

    第一步:服务端修改服务配置文件

    vim /etc/exports
    /data  172.16.1.0/24(rw,sync,no_all_squash)
    systemctl reload nfs 
    

    第二步:客户端上传数据测试

    [root@web01 mnt]# touch aaa.txt
    [root@web01 mnt]# ll
    -rw-rw-r-- 1     1017     1017  0 Jul 16 12:08 aaa.txt
    ### 用户传输数据身份没有变化,看用户uid信息
    

    3.1.3 root_squash映射实践

    第一步:服务端修改服务配置文件

    vim /etc/exports
    /data  172.16.1.0/24(rw,sync,root_squash)
    systemctl reload nfs 
    

    第二步:客户端上传数据测试

    [root@web01 mnt]# touch bbb.txt
    [root@web01 mnt]# ll
    -rw-r--r-- 1 nfsnobody nfsnobody  0 Jul 16 12:19 bbb.txt
    ### root用户会映射为指定的nfsnobody用户
    

    3.1.4 no_root_squash映射实践

    第一步:服务端修改服务配置文件

    vim /etc/exports
    /data  172.16.1.0/24(rw,sync,no_root_squash)
    systemctl reload nfs 
    

    第二步:客户端上传数据测试

    [root@web01 mnt]# touch ccc.txt
    [root@web01 mnt]# ll
    -rw-r--r-- 1 root      root       0 Jul 16 12:22 ccc.txt
    ###	将root用户不做映射
    

    3.2 NFS客户端映射原理图

    3_看图王.png

    3.2.1 映射原理练习题

    要求服务端:
    /data/w   可读可写权限,所有用户都做映射,  采用同步传输数据
    /data/r   只能读取数据,只有root用户组映射,采用异步传输数据
    要求客户端:
    backup   /data/w  --挂载点 /data/w   可以存储数据  
    web01    /data/r  --挂载点 /data/r   不能存储数据
    解决服务端:
    (1)编写配置文件

    vi /etc/exports
    /data/w  172.16.1.0/24(rw,sync,all_squash)
    /data/r  172.16.1.0/24(ro,async,root_squash)
    

    (2)创建共享存储目录

    web01:
    mkdir /data/r
    chown nfsnobody.nfsnobody /data/r
    backup:
    mkdir /data/w
    chown nfsnobody.nfsnobody /data/w
    

    (3)重启存储服务

    systemctl reload nfs
    

    解决客户端:
    (1)创建挂载点目录

    web01:mkdir /data/r
    backup:mkdir /data/w
    

    (2)进行挂载

    web01
    mount -t nfs 172.16.1.31:/data/r  /data/r
    backup
    mount -t nfs 172.16.1.31:/data/w  /data/w
    

    (3)验证成功

    [root@web01 r]#touch hh.txt
    touch: cannot touch ‘hh.txt’: Read-only file system	### 只读权限,所以出现这种情况才是正常
    [root@backup w]#touch kk.txt		### 读写权限,所以能创建
    [root@backup w]#ls
    kk.txt
    
    

    3.3 影响NFS服务存储权限原因

    (1)服务端配置文件参数    exports文件里ro/rw参数
    (2)服务端本身目录权限  
    (3)服务端共享目录权限存在继承关系    例如:/data,/data/r
       PS:建议设置共享目录时,不要存在父级与子级关系
    (4)客户端挂载参数是否为 ro

    4 NFS挂载常见问题

    4.1 异常问题一

    ls: cannot open directory .: Stale file handle  (文件句柄错误)
    出现原因: 当父级和子级目录同时进行挂载时,一旦父级目录取消共享,但是客户端还是处于挂载状态
    问题解决: 将和父级目录有关的所有挂载点全部卸载,重新挂载

    4.2 异常问题二

    Cannot register service: RPC: Unable to receive;
    出现原因: 服务启动顺序不正确
    问题解决: 关闭所有服务,按顺序进行启动

    4.3 异常问题三

    出现挂载卡死情况
    clnt_create: RPC: Port mapper failure - Unable to receive: errno 113 (No route to host)
    出现原因: 服务端开启防火墙,阻止客户端访问
    问题解决: 关闭防火墙

    4.4 异常问题四

    服务端采用restart情况,会有一个90s延迟;造成客户端挂载好共享目录,90s内无法存储数据
    出现原因:
    cat /etc/sysconfig/nfs|grep 90
    #NFSD_V4_GRACE=90
    #NFSD_V4_LEASE=90

    4.5 NFS存储排错原理

    4.5.1 检查服务端服务是否启动

    4.5.2 检查NFS服务是否向RPC服务注册

    未注册情况

    [root@nfs01 ~]# 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
    

    已经进行注册

    [root@nfs01 ~]# rpcinfo -p localhost
    program vers proto   port  service     
    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
    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
    100003    4   udp   2049  nfs
    100227    3   udp   2049  nfs_acl
    服务关闭在开启,有些端口会发生改变
    100021    1   udp  60318  nlockmgr
    100021    3   udp  60318  nlockmgr
    100021    4   udp  60318  nlockmgr
    100021    1   tcp  32828  nlockmgr
    100021    3   tcp  32828  nlockmgr
    100021    4   tcp  32828  nlockmgr
    

    4.5.3 检查NFS服务是否存在共享目录

    命令:showmount -e  172.16.1.31    NFS没有安装,不能使用showmount

    [root@nfs01 data]#showmount -e  172.16.1.31
    Export list for 172.16.1.31:
    /data/r 172.16.1.0/24
    /data/w 172.16.1.0/24
    

    4.6 NFS服务相关重要文件命令

    /etc/exports	#配置文件
    /var/lib/nfs/etab	#记录nfs服务默认配置参数信息
    rpcinfo -p 172.16.1.31	#检查nfs是否向rpc注册
    showmount -e 172.16.1.31	#检查nfs服务是否存在共享目录
    /usr/sbin/exportfs	#可以平滑重启nfs服务,可以临时设置共享存储目录
    平滑重启服务:exportfs -rv
    临时创建目录:exportfs -o rw,sync  192.168.232.0/24:/data01
    

    4.7 NFS服务客户端挂载

    4.7.1 如何进行挂载

    mount -t nfs 172.16.1.31:/data  /mnt
    

    4.7.2 如何开机挂载

    方法一:vi /etc/rc.local 
    mount -t nfs 172.16.1.31:/data  /mnt
    方法二:vi /etc/fstab文件
    172.16.1.31:/data   /mnt    nfs  defaults   0 0
    

    centos6  
    启动系统 -- 加载fstab -- 启动network网络服务 -- netfs(在系统启动完毕之后,再次加载fstab)
    centos7
    启动系统 -- 加载fstab -- 启动network网络服务 -- remote-fs.target(在系统启动完毕之后,再次加载fstab)

    4.7.3 启动nfs服务客户端很慢

    出现原因:在客户端上配置自动nfs服务挂载   --- 耦合度太高
    解决问题:
    (1)取消自动挂载
    (2)启动顺序 先开启后端服务(nfs mysql backup 缓存服务)  在开启前端服务(web服务 负载均衡服务)

    4.7.4 挂载参数说明

    rw让挂载点目录具有可读可写权限   相反ro 
    suid=setuid 让挂载点目录中的文件特殊权限位生效    相反nosuid  安全  
    dev 让挂载点目录存储设备文件保持属性不变  
    exec 让挂载点目录中的执行文件可以执行   相反noexec  
    auto(mount -a) 让挂载点目录实现快速自动挂载  相反noauto  
    nouser 让普通用户是否可以卸载和挂载目录   相反user  
    async 数据异步存储概念,相反sync同步存储  
    noatime 访问文件时不更新文件的inode时间戳,高并发环境下,推荐显示应用该选项,可以提高系统I/O性能。性能优化  
    nodiratime 不更新文件系统上的directory inode时间戳,高并发环境,推荐显式应用该选项,可以提高系统I/O性能。性能优化  
    remount 在不进行卸载挂载点时,直接重新挂载修改挂载参数
    文件系统只读:mount -o remount,rw / 解决
     
    rsize=262144 设置一个缓存区 262144字节  设置大小和内存有关  
    用户 (读取) --- web01 /data  2M --- nfs /data 10M 压力大
     
    wsize=262144 设置一个缓冲区 262144字节
    用户(存储)  --- web01 /data 10M --- nfs /data 10M 压力大
     
    hard 当服务端处于关闭状态,客户端会处于一直挂载  
    soft 当服务端处于关闭状态,不会一直挂载  
    proto=tcp 挂载协议  

    客户端重要文件:/proc/mounts  --- 查看到mount挂载命令默认参数信息
    强行进行卸载:umount -lf

    4 补充:下载软件出现异常

    (1)更新yum源
    (2)利用rpm安装软件 获得rpcbind软件包

    vim /etc/yum.conf  
    cachedir=/var/cache/yum/$basearch/$releasever   --- 下载软件保存路径
    keepcache=1                                     --- 下载软件保留下来,不要被删除
    rpm -ivh  rpcbind-0.2.0-47.el7.x86_64.rpm.rpm		---	安装rpcbind
  • 相关阅读:
    面向接口程序设计思想实践
    Block Chain Learning Notes
    ECMAScript 6.0
    Etcd Learning Notes
    Travis CI Build Continuous Integration
    Markdown Learning Notes
    SPRING MICROSERVICES IN ACTION
    Java Interview Questions Summary
    Node.js Learning Notes
    Apache Thrift Learning Notes
  • 原文地址:https://www.cnblogs.com/sandshell/p/12624520.html
Copyright © 2011-2022 走看看