• NFS服务


    1、NFS服务:文件共享
      NFS(Network File System)网络文件系统,一种分散式文件系统的协定,功能是通过网络让不同的机器、不同的操作系统能够彼此分享个别的数据,让应用程序在客户端通过网络访问位与服务器磁盘中的数据,是类Unix系统间实现磁盘文件共享的一种方法。
      NFS服务器可以允许NFS客户端将远端NFS服务端的共享目录挂载到本地的NFS客户端中,在本地的NFS客户端的机器看来,NFS服务器端共享的目录就好像自己的磁盘分区和目录一样,一般客服端挂载到本地目录的名字可以随便,但为方便管理,我们要和服务器端一样比较好。
    NFS一般用来共享视频,图片等静态数据。

    2、NFS挂载原理
      NFS是通过网络来进行服务端和客户端之间的数据传输。两者之间要想传输数据就要有对应的网络端口来进行传输。NFS服务器端随机选择端口来进行数据传输。NFS客户端又是如何知道NFS服务器端到底使用的是哪个端口呢?其实NFS服务器时通过远程过程调用(remote procedure call 简称RPC)协议/服务来实现的。也就是说RPC服务会统一管理NFS的端口,客户端和服务端通过RPC来先沟通NFS使用了哪些端口,之后再利用这些端口(小于1024)来进行数据的传输。
      也就是RPC管理服务端的NFS端口分配,客户端要传数据,那客户端的RPC会先跟服务端的RPC去要服务器的端口,要到端口后再建立连接,然后传输数据。
    那RPC和NPS之间又是如何之间相互通讯的?。

    3、RPC和NFS之间的通讯过程
      首先当NFS启动后,就会随机的使用一些端口,然后NFS就会向RPC去注册这些端口。RPC就会记录下这些端口。并且RPC会开启111端口,等待客户端RPC的请求,如果客户端有请求,那服务器端的RPC就会将记录的NFS端口信息告知客户端。

    4、RPC和NFS的启动顺序
      在启动NFS server之前,首先要启动RPC服务,否则NFS server就无法向RPC服务区注册,另外,如果RPC服务重新启动,原来已经注册好的NFS端口数据就会全部丢失。因此此时RPC服务管理的NFS程序也要重新启动以重新向RPC注册。特别注意:一般修改NFS配置文件后,是不需要重启NFS的,直接在命令执行/etc/init.d/nfs reload

    总结:
      1>首先服务器启动RPC服务,并且开启111端口
      2>启动NFS服务,并向RPC注册端口信息
      3>客户端启动RPC,向服务端的RPC服务请求服务端的NFS端口
      4>服务器的RPC服务反馈NFS端口信息给客户端
      5>客户端通过获取的NFS端口来建立和服务端的NFS连接并进行数据的传输。

     5、NFS相关协议及软件安装管理
      1>协议:
        RPC(Remote Procedure Call Protocol)远程过程调用协议
      2>软件:
        nfs-utils*:包括NFS命令与监控程序
        rpcbind*:支持NFS RPC服务的连接
        注:通常情况下,是作为系统的默认包安装,CentOS6.*之前rpcbind叫portmap

      使用 rpm -q nfs、rpm -q rpcbind 命令来查看是否安装,如果默认没有安装则执行以下安装命令(centos7环境):

    [root@centos7 ~]# yum install nfs-utils* rpcbind* -y    //服务器端
    [root@centos7 ~]# yum install nfs-utils* rpcbind* -y //客户端

    6、NFS系统守护进程
      nfs:它是基本的NFS守护进程,主要功能是管理客户端是否能够登陆服务器
      rpcbind:主要功能是进行端口映射工作,当客户端尝试连接并使用RPC服务器提供的服务(如NFS服务)时,rpcbind会将所管理的与服务器对应的端口提供给客户端,从而使客户端可以通过该端口向服务器请求服务。

    7、NFS服务器的配置
      NFS服务器的配置相对比较简单,只需要在相应的配置文件中进行设置,然后启动NFS服务器即可。
      NFS服务的配置文件为/etc/exports,这个文件是NFS的主要配置文件,不过系统并没有默认值,所以这个文件不一定会存在,可能要使用vim手动建立,然后在文件里面写入配置内容。
      /etc/ exports文件内容格式:

    共享目录 客户端1(访问权限,用户映射,其他) 客户端2(访问权限,用户映射,其他)
      共享目录:共享目录是指NFS服务器共享给客户机使用的目录
      
      客户端:客户端是指网络中可以访问这个NPS共享目录的计算机   客户端常用的指定方式:     指定ip地址的主机:
    192.168.100.20     指定子网中的所有主机:192.168.100. 0     指定域名的主机:www.pc.com     指定域中的所有主机:*.pc.com     所有主机:*
      
      设置输出目录的访问权限、用户映射等
        1>访问权限选项:
          设置输出目录只读:ro
          设置输出目录读写:rw
        2>用户映射选项
        root_squash:将root用户的访问映射为匿名 (nfsnobody) 用户uid和gid;(默认生效)
        no_root_squash:保留管理员权限,以服务器管理员的权限管理;
        all_squash:将远程访问的用户及所属组都映射为指定uid、gid的匿名用户;
        anonuid=xxx:将远程访问的所有用户都映射为指定uid的匿名用户;
        anongid=xxx:将远程访问的所有用户组都映射为指定gid匿名组账户;
        其它选项:
        sync:将数据同步写入内存缓冲区与磁盘中,效率低,但可以保证数据的一致性(同步);
        async:将数据先保存在内存缓冲区中,必要时才写入磁盘(异步);

    8、客户端挂载nfs服务器共享目录

    语法:mount nfs服务器ip:共享目录 本地挂载点目录
    # mount -o vers=3 共享 本地    //指定挂载使用nfs V3版本(避免同步延迟)

    9、nfs共享权限和访问控制
      1>客户端root用户
        使用客户端的root身份在nfs服务器上创建文件,文件的所有者和所属组是nfsnobody。
      2>客户端普通用户
        使用客户端的普通用户身份在nfs服务器上创建文件,所有者和所属组是nobody或普通用户;
        如果明确设定了普通用户的映射用户身份,那么此时客户端用户的身份转换为指定映射用户;
        如果nfs server上面有同名用户,那么此时客户端登录账户的身份转换为nfs server 上面的同名用户。

    10、nfs服务器实战

      1>环境构建:centos7
        192.168.100.101  nfs-server
        192.168.100.20    nfs-client

      2>服务器、客户机先查看是否安装rpcbind、nfs,若没有安装则进行安装

    nfs-server:
    [root@nfs-server ~]# rpm -q rpcbind
    package rpcbind is not installed
    [root@nfs-server ~]# rpm -q nfs
    package nfs is not installed
    [root@nfs-server ~]# yum install nfs-utils* rpcbind* -y
    
    nfs-client:
    [root@nfs-client ~]# rpm -q rpcbind
    package rpcbind is not installed
    [root@nfs-client ~]# rpm -q nfs
    package nfs is not installed
    [root@nfs-client ~]# yum install nfs-utils* rpcbind* -y

      3>启动NPS服务器,设为开机自启动
      为了使NFS服务器能正常工作,需要启动rpcbind和nfs两个服务,并且rpcbind一定要先于nfs启动

    nfs-server:
    [root@nfs-server ~]# systemctl start rpcbind
    [root@nfs-server ~]# systemctl enable rpcbind
    [root@nfs-server ~]# systemctl start nfs
    [root@nfs-server ~]# systemctl enable nfs
    Created symlink from /etc/systemd/system/multi-user.target.wants/nfs-server.service to /usr/lib/systemd/system/nfs-server.service.
    
    nfs-client:
    [root@nfs-client ~]# systemctl start rpcbind
    [root@nfs-client ~]# systemctl enable rpcbind
    [root@nfs-client ~]# systemctl start nfs
    [root@nfs-client ~]# systemctl enable nfs
    Created symlink from /etc/systemd/system/multi-user.target.wants/nfs-server.service to /usr/lib/systemd/system/nfs-server.service.

      4>查询NPS服务器状态:

    [root@nfs-server ~]# systemctl status rpcbind
    [root@nfs-server ~]# systemctl status nfs

      5>查看RPC服务器端口、共享状态

    [root@nfs-server ~]# exportfs    //查看nfs共享有没有生效
    # showmount -e 本机ip    //服务器查看nfs共享状态
    # showmount -e nfs服务器ip    //客户端查看nfs共享状态

      6>创建共享目录,并配置nfs服务器、nfs客户端

    nfs-server端:
    [root@nfs-server ~]# mkdir /share //创建共享目录
    [root@nfs-server ~]# chmod o+w /share //设定权限,允许其他人写操作
    [root@nfs-server ~]# ll -d /share/
    drwxr-xrwx 2 root root 6 Mar 13 15:07 /share/
    [root@nfs-server ~]# vim /etc/exports //编辑配置文件 /share/ 192.168.100.20(rw) #允许192.168.100.20主机对共享目录,进行读写操作
    [root@nfs-server ~]# systemctl reload nfs //重新加载配置文件
    nfs-client端:
    [root@nfs-client ~]# mkdir /share //创建共享目录,建议和nfs-server共享目录保持一致,方便管理
    [root@nfs-client ~]# chmod o+w /share //设定权限,允许其他人写操作
    [root@nfs-client ~]# ll -d /share/
    drwxr-xrwx 2 root root 6 Mar 13 15:12 /share/
    [root@nfs-client ~]# mount -o vers=3 192.168.100.101:/share/ /share //mount -o vers=3 指定挂载使用nfs V3版本(避免同步延迟)

      7>测试

    client端创建:
    [root@nfs-client ~]# cd /share/
    [root@nfs-client share]# touch f1
    [root@nfs-client share]# ls
    f1
    
    server端查看:
    [root@nfs-server ~]# cd /share/
    [root@nfs-server share]# ls
    f1

      使用client端的root身份在nfs服务器上创建文件,文件的所有者和所属组是nfsnobody

    [root@nfs-client share]# ll
    总用量 0
    -rw-r--r-- 1 nfsnobody nfsnobody 0 3月  13 14:27 f1

      更改nfs-server端配置文件,使客户端所创建的文件所有者所属组为root

    nfs-server端:
    [root@nfs-server ~]# vim /etc/exports
    /share/ 192.168.100.20(rw,no_root_squash)    #客户端所创建的文件所有者所属组为root
    [root@nfs-server ~]# systemctl reload nfs
    
    nfs-client端测试创建:
    [root@nfs-client share]# touch f2
    [root@nfs-client share]# ll
    总用量 0
    -rw-r--r-- 1 nfsnobody nfsnobody 0 3月  13 14:27 f1
    -rw-r--r-- 1 root      root      0 3月  13 14:34 f2
    
    nfs-server端查看:
    [root@nfs-server share]#ll
    总用量 0
    -rw-r--r--. 1 nfsnobody nfsnobody 0 3月  13 14:27 f1
    -rw-r--r--. 1 root      root      0 3月  13 14:34 f2

      更改nfs-server配置文件,设置映射用户

    nfs-server创建测试映射用户nfstest,编辑nfs-server配置文件
    [root@nfs-server share]# useradd nfstest
    [root@nfs-server share]# id nfstest
    uid=1000(nfstest) gid=1000(nfstest) 组=1000(nfstest)
    [root@nfs-server share]# vim /etc/exports
    /share/ 192.168.100.20(rw,all_squash,anonuid=1000,anongid=1000)
    [root@nfs-server share]#  systemctl reload nfs

    nfs-client端创建文件,服务端查看验证
    [root@nfs-client share]# touch f3
    [root@nfs-client share]# ll
    总用量 0
    -rw-r--r-- 1 nfsnobody nfsnobody 0 3月  13 14:27 f1
    -rw-r--r-- 1 root      root      0 3月  13 14:34 f2
    -rw-r--r-- 1      1000      1000 0 3月  13 14:40 f3

    nfs-server端查看验证
    [root@nfs-server share]#ll
    总用量 0
    -rw-r--r--. 1 nfsnobody nfsnobody 0 3月  13 14:27 f1
    -rw-r--r--. 1 root      root      0 3月  13 14:34 f2
    -rw-r--r--. 1 nfstest   nfstest   0 3月  13 14:40 f3

    11、卸载和自动挂载
      1>卸载:
        (1)卸载客户端的挂载目录(客户端主动卸载)
          umount 挂载点
        (2)停止服务器端的共享(服务器端主动卸载)
          exportfs -au
      2>自动挂载:/etc/fstab
        # 192.168.100.101:/share /share nfs defaults 0 0

    12、相关命令

    1>exportfs命令
      如果我们在启动了NFS之后又修改了/etc/ exports,是不是还要重新启动nfs呢?这个时候我们就可以用exportfs命令来使改动立刻生效,该命令格式如下:
      格式: exportfs [-aruv]
        -a全部挂载或卸载/etc/exports中的内容
        -r重新读取/etc/exports 中的信息,并同步更新/etc/exports、 /var/lib/nfs/xtab
        -u卸载单一目录(和-a一起使用为卸载所有/etc/exports文件中的目录)
        -v在export的时候,将详细的信息输出到屏幕上
      例:
        # exportfs -au卸载所有共享目录
        # exportfs -ra重新共享所有目录并输出详细信息
    2>rpcinfo命令
      利用rpcinfo -p可以查看出RPC开启的端口所提供的程序有哪些,其中nfs开启的是2049端口,portmapper (rpcbind)开启的是111,其余则是rpc开启的

  • 相关阅读:
    Git_学习_05_ 解决冲突
    Git_学习_04_ 多人协作开发的过程
    PostgreSQL与Oracle对应的函数
    Mysql学习_02_mysql数据导入导出
    【SPOJ】1812. Longest Common Substring II(后缀自动机)
    【BZOJ】2555: SubString(后缀自动机)
    【BZOJ】3172: [Tjoi2013]单词(后缀自动机)
    【SPOJ】8222. Substrings(后缀自动机)
    【wikioi】3160 最长公共子串(后缀自动机)
    【BZOJ】1079: [SCOI2008]着色方案(dp+特殊的技巧)
  • 原文地址:https://www.cnblogs.com/zyybky/p/12466307.html
Copyright © 2020-2023  润新知