• 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
  • 相关阅读:
    [React] Use the React Context API to Globally Manage State
    [Docker] Push container to Docker hub
    [Docker] Create a Node.js Non-root Image
    时序数据库DolphinDB与Druid的对比测试
    麻省理工学院的牛人解说数学体系,你到哪个层次了?
    Python的7种性能测试工具:timeit、profile、cProfile、line_profiler、memory_profiler、PyCharm图形化性能测试工具、objgraph
    2020年度盘点:顶流坐镇的普林斯顿理科书单请收藏
    万字Matplotlib实操总结,几行代码实现数据绘图
    形意拳-五行拳之劈拳功法奥秘
    Top 10 Python Packages For Finance And Financial Modeling
  • 原文地址:https://www.cnblogs.com/sandshell/p/12624520.html
Copyright © 2020-2023  润新知