zoukankan      html  css  js  c++  java
  • NFS

    一、NFS简介


    01 为什么使用NFS

    02 RPC服务知识概念介绍说明,以及RPC服务存在价值

    03 NFS工作原理

    当访问程序通过NFS客户端向NFS服务端存取文件时,其请求数据流程大致如下:

    1) 首先用户访问网站程序,由程序在NFS客户端发出存取NFS文件的请求,这时NFS客户端(即执行程序的服务器)的RPC服务(rpcbind服务)就会通过网络向NFS服务器端RPC服务(rpcbind服务)的111端口发出NFS文件存取功能的询问请求。
    2) NFS服务器端的RPC服务(rpcbind服务)找到对应的已注册的NFS端口后,通知NFS客户端的RPC服务(rpcbind服务)
    3) 此时NFS客户端获取到正确的端口,并与NFS daemon联机存取数据。
    4) NFS客户端把数据存取成功后,返回给前端访问程序,告知给用户存取结果,作为网站用户,就完成了一次存取操作。因为NFS的各项功能都需要向RPC服务(rpcbind服务)注册,所以只有RPC服务(rpcbind服务)才能获取到NFS服务的各项功能对应的端口号(port number)、PID、NFS在主机所监听的IP等信息,而NFS客户端也只能通过向RPC服务(rpcbind服务)询问才能找到正确的端口。

    二、部署

    01 安装

    NFS:全名nfs-utils
    rpcbind

    yum install -y nfs-utils rpcbind

    查看命令属于哪个包

    [root@nfs01 ~]# rpm -qa nfs-utils rpcbind
     rpcbind-0.2.0-12.el6.x86_64
     nfs-utils-1.2.3-70.el6_8.2.x86_64

    02启动服务

     启动服务需要先启动rpcbind然后再启动NFS

     启动rpcbind

    [root@nfs01 ~]# /etc/init.d/rpcbind status
    rpcbind is stopped
    [root@nfs01 ~]# /etc/init.d/rpcbind start
    Starting rpcbind:                                          [  OK  ]
    [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

     启动NFS

    [root@nfs01 ~]# /etc/init.d/nfs start
    Starting NFS services:                                     [  OK  ]
    Starting NFS quotas:                                       [  OK  ]
    Starting NFS mountd:                                       [  OK  ]
    Starting NFS daemon:                                       [  OK  ]
    Starting RPC idmapd:                                       [  OK  ]

    查看rpcbind和nfs对应情况

    [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
        100011    1   udp    875  rquotad
        100011    2   udp    875  rquotad
        100011    1   tcp    875  rquotad
        100011    2   tcp    875  rquotad
        100005    1   udp  57916  mountd
        100005    1   tcp  42966  mountd
        100005    2   udp  61298  mountd
        100005    2   tcp  47732  mountd
        100005    3   udp  51887  mountd
        100005    3   tcp  14717  mountd
        100003    2   tcp   2049  nfs
        100003    3   tcp   2049  nfs
        100003    4   tcp   2049  nfs
        100227    2   tcp   2049  nfs_acl
        100227    3   tcp   2049  nfs_acl
        100003    2   udp   2049  nfs
        100003    3   udp   2049  nfs
        100003    4   udp   2049  nfs
        100227    2   udp   2049  nfs_acl
        100227    3   udp   2049  nfs_acl
        100021    1   udp  46875  nlockmgr
        100021    3   udp  46875  nlockmgr
        100021    4   udp  46875  nlockmgr
        100021    1   tcp  19562  nlockmgr
        100021    3   tcp  19562  nlockmgr
        100021    4   tcp  19562  nlockmgr

    查看状态

    [root@nfs01 ~]# netstat -plunt | grep rpcbind
    tcp        0      0 0.0.0.0:111                 0.0.0.0:*                   LISTEN      25595/rpcbind       
    tcp        0      0 :::111                      :::*                        LISTEN      25595/rpcbind       
    udp        0      0 0.0.0.0:111                 0.0.0.0:*                               25595/rpcbind       
    udp        0      0 0.0.0.0:754                 0.0.0.0:*                               25595/rpcbind       
    udp        0      0 :::111                      :::*                                    25595/rpcbind       
    udp        0      0 :::754                      :::*                                    25595/rpcbind

    开机自启动

    [root@nfs01 ~]# chkconfig |grep 3:on
    crond              0:off    1:off    2:on    3:on    4:on    5:on    6:off
    network            0:off    1:off    2:on    3:on    4:on    5:on    6:off
    nfslock            0:off    1:off    2:off    3:on    4:on    5:on    6:off
    rpcbind            0:off    1:off    2:on    3:on    4:on    5:on    6:off
    rpcgssd            0:off    1:off    2:off    3:on    4:on    5:on    6:off
    rsyslog            0:off    1:off    2:on    3:on    4:on    5:on    6:off
    sshd               0:off    1:off    2:on    3:on    4:on    5:on    6:off
    sysstat            0:off    1:on    2:on    3:on    4:on    5:on    6:off

    03 NFS服务端配置过程
    挂载列表的配置文件/etc/exports
    man exports查看帮助

    参数

    参数名字                                                                                      参数用途
     rw  read-write,表示可读写权限
     ro  read-only,表示只读权限
     async  (异步)写入时数据会先写到内存缓冲区,只到硬盘有空挡才会再写入磁盘,这样可以提升写入效率,风险为若服务器宕机或不正常关机,会损失缓冲区中未写入磁盘的数据(解决办法:服务器主板电池加UPS,AB(双路电源)不间断电源)
     no_root_squash  访问NFSserver共享目录的用户如果是root的话,它对该共享目录具有root权限,这个配置原本是为无盘客户端准备的,用户应避免使用。如果是root则保持root权限
     root_squash  如果访问NFSserver共享目录的用户是root,则它的权限将被压缩成匿名用户,同时它的UID和GID通常会变成nfsnobody账号身份,如果是root压缩为匿名用户。
     all_squash  

    不管访问NFSserver共享目录的用户身份如何,它的权限都将被压缩成匿名用户(nfsnobody),同时它的UID和GID都会便哼nfsnobody账号身份,在早期多个NFS客户端同时读写NFSserver数据时,这个参数是很有用的
    1) 确保所有客户端服务器对NFS共享目录具备相同的用户访问权限
    a. all_squash把所有客户端都压缩成固定的匿名用户(UID相同)
    b. 就是anonuid,anongid指定的UID和GID的用户
    2)所有的客户端和服务端都需要有一个相同的UID和GID的用户,即nfsnobody(UID必须相同)

     anonuid  

    指定的是匿名用户的UID或GID数字
    所有服务器上面,匿名用户(nfsnobody rsync www)uid和gid
    参数以anon*开头即只anonymous匿名用户,这个用户UID设置值通常为nfsnobody的UID值,当然也可以额自行设置这个UID值。但是,UID必须存在于/etc/passwd中,在多NFS Clients时,如多台webserver共享一个NFS目录,通过这个参数可以使得不同的NFSclients写入的数据对所有NFS clients保持同样的用户权限,即为配置的匿名UID对应用户权限,这个参数很有用,一般默认即可

     anongid  同anonuid,却比就是把UID换成GID

    重启生效

    [root@nfs01 ~]# /etc/init.d/nfs reload

    查看是否生效

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

    本地测试

    [root@nfs01 ~]# mount -t nfs 172.16.1.31:/data /mnt
    [root@nfs01 ~]# df -h
    Filesystem         Size  Used Avail Use% Mounted on
    /dev/sda3          6.8G  1.5G  5.0G  23% /
    tmpfs              242M     0  242M   0% /dev/shm
    /dev/sda1          190M   33M  147M  19% /boot
     172.16.1.31:/data  6.8G  1.5G  5.0G  23% /mnt

    授权

    [root@nfs01 ~]# chown -R nfsnobody.nfsnobody /data/
    [root@nfs01 ~]# ll /data/ -d
    drwxr-xr-x. 6 nfsnobody nfsnobody 4096 Mar  9 16:06 /data/

    卸载

    [root@nfs01 ~]# umount /mnt/
     [root@nfs01 ~]# df
     Filesystem     1K-blocks    Used Available Use% Mounted on
     /dev/sda3        7116844 1531056   5217612  23% /
     tmpfs             246972       0    246972   0% /dev/shm
     /dev/sda1         194241   33770    150231  19% /boot

    客户端挂载测试

      [root@backup ~]# mount -t nfs 172.16.1.31:/data /data
      [root@backup ~]# df -h
      Filesystem         Size  Used Avail Use% Mounted on
      /dev/sda3          6.8G  1.5G  5.0G  23% /
      tmpfs              242M     0  242M   0% /dev/shm
      /dev/sda1          190M   33M  147M  19% /boot
      172.16.1.31:/data  6.8G  1.5G  5.0G  23% /data

    开机自启动检查

     [root@nfs01 ~]# chkconfig | awk '$1~/nfs$|rpcbind/'
      nfs                0:off    1:off    2:off    3:off    4:off    5:off    6:off
      rpcbind            0:off    1:off    2:on    3:on    4:on    5:on    6:off

     小结

    rpcbind启动必须在NFS之前
    1  创建刚想目录/data

    mkdir /data

    2 修改配置文件 /etc/exports

     [root@nfs01 ~]# cat /etc/exports
      # share /data
      /data 172.16.1.0/24(rw,sync)

     3 平滑重启NFS(配置文件一改, 就必须重启服务)

    /etc/init.d/nfs reload

    4 服务端自我检查

    showmount -e 172.16.1.31

    5 服务端 挂载测试

    mount -t 172.16.1.31:/data /mnt

    6 加入开机自启动

    chkconfig nfs on
    chkconfig rpcbind on

    三、排查故障
    1、前提,NFS原理及部署过程
    2、先在客户端的排查

     ping server_ip
     telnet server_ip 111
     showmount -e server_ip
     mount

     /proc/mounts 有挂载信息,就强制卸载即可

  • 相关阅读:
    hadoop安装前的准备
    记录一次Qt5程序无法运行的解决过程
    C#里的Thread.Join与Control.Invoke死锁情况
    qbxt7月笔记
    zhxのDP讲
    有n*m的方格图
    最长上升子序列相关问题笔记
    qbxt游记(清北澡堂划水记
    DAZの七下道法(持续更新
    模板
  • 原文地址:https://www.cnblogs.com/augustyang/p/10131920.html
Copyright © 2011-2022 走看看