nfs install

NFS 简介

1
2
3
4
5
6
7
NFS是Network File System的缩写,即网络文件系统

NFS是一种使用于分散式文件系统的协定,功能是通过网络让不同的机器,不同的操作系统能够彼此分享个别的数据,让应用程序在客户端通过网络访问位于服务器磁盘中的数据,是在类Unix系统间实现磁盘文件共享的一种方法.

NFS的基本原则是"允许不同的客户端及服务端通过一组RPC分享相同的文件系统",它是独立于操作系统,允许不同硬件及操作系统的系统共同进行文件的分享.

NFS在文件传送或信息传送过程中依赖于RPC协议.RPC,远程过程调用(Remote Procedure Call)是能使客户端执行其他系统中程序的一种机制.NFS本身是没有提供信息传输的协议和功能的,但NFS却能让我们通过网络进行资料的分享,这是因为NFS使用了一些其它的传输协议.而这些传输协议用到这个RPC功能的.可以说NFS本身就是使用RPC的一个程序.或者说NFS也是一个RPC SERVER.所以只要用到NFS的地方都要启动RPC服务,不论是NFS SERVER或者NFS CLIENT.这样SERVER和CLIENT才能通过RPC来实现PROGRAM PORT的对应.可以这么理解RPC和NFS的关系:NFS是一个文件系统,而RPC是负责负责信息的传输

NFS 安装

  1. NFS 安装

    1
    2
    // NFS 服务端 和 客户端
    [root@10 ~]# yum -y install nfs-utils rpcbind
    1
    2
    3
    * nfs-utils  Nfs-utils软件包提供了rpc.nfsd和rpc.mountd两个RPC守护进程
    * rpcbind 远程过程调用服务
    * nfs-ganesha* NFS-Ganesha是一个基于NFSv3\v4\v4.1的文件服务器,运行在大多数Linux发行版的用户模态下,同时也支持9p.2000L协议.它支持的运行平台包括Linux,BSD variants和POSIX-compliant Unixes
  2. NFS 常用文件或目录

    1
    2
    3
    4
    5
    * /etc/exports           NFS服务的主要配置文件
    * /usr/sbin/exportfs NFS服务的管理命令
    * /usr/sbin/showmount 客户端的查看命令
    * /var/lib/nfs/etab 记录NFS分享出来的目录的完整权限设定值
    * /var/lib/nfs/xtab 记录曾经登录过的客户端信息

NFS 配置

  1. 服务端:创建存放数据目录

    1
    2
    [root@10 ~]# mkdir -p /mnt/data/nfs/elasticsearch
    [root@10 ~]# chmod 777 /mnt/data/nfs/elasticsearch
  2. 服务端:修改配置文件/etc/exports

    1
    2
    [root@10 ~]# vim /etc/exports
    /mnt/data/nfs/elasticsearch 10.0.3.0/24(rw,sync,no_root_squash,no_all_squash)
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    /etc/exports文件内容格式:
    <输出目录> [客户端1 选项(访问权限,用户映射,其他)] [客户端2 选项(访问权限,用户映射,其他)]

    * 输出目录 共享目录位置
    * 客户端IP:
    1.指定ip地址:1.1.1.1
    2.指定网段:1.1.1.0/24,1.1.1.0/255.255.255.0
    3.指定主机域名:a.b.com
    4.指定部分主机域名:*.b.com
    5.所有主机:*
    * 客户端选项:选项用来设置输出目录的访问权限,用户映射
    1.访问权限:
    * ro 只读访问
    * rw 读写访问
    2.用户映射选项:
    * all_squash 将远程访问的所有普通用户及所属组都映射为匿名用户或用户组(nfsnobody)
    * no_all_squash 与all_squash取反(默认设置)
    * root_squash 将root用户及所属组都映射为匿名用户或用户组(默认设置)
    * no_root_squash 与rootsquash取反
    * anonuid=xxx 将远程访问的所有用户都映射为匿名用户,并指定该用户为本地用户(UID=xxx)
    * anongid=xxx 将远程访问的所有用户组都映射为匿名用户组账户,并指定该匿名用户组账户为本地用户组账户(GID=xxx)
    3.其它选项
    * secure 限制客户端只能从小于1024的tcp/ip端口连接nfs服务器(默认设置)
    * insecure 允许客户端从大于1024的tcp/ip端口连接服务器
    * sync 将数据同步写入内存缓冲区与磁盘中,效率低,但可以保证数据的一致性
    * async 将数据先保存在内存缓冲区中,必要时才写入磁盘
    * wdelay 检查是否有相关的写操作,如果有则将这些写操作一起执行,这样可以提高效率(默认设置)
    * no_wdelay 若有写操作则立即执行,应与sync配合使用
    * subtree 若输出目录是一个子目录,则nfs服务器将检查其父目录的权限(默认设置)
    * no_subtree 即使输出目录是一个子目录,nfs服务器也不检查其父目录的权限,这样可以提高效率
  3. 服务端:启动服务和开机自启动

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    //重启(修改完配置文件后)
    [root@10 ~]# systemctl restart rpcbind
    [root@10 ~]# systemctl restart nfs
    或者:
    //重新加载配置文件
    [root@10 ~]# exportfs -r


    //启动
    [root@10 ~]# systemctl start rpcbind
    [root@10 ~]# systemctl start nfs

    //开机启动项
    [root@10 ~]# systemctl enable rpcbind
    [root@10 ~]# systemctl enable nfs
  4. 服务端:检查NFS是否启动成功

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    [root@10 ~]# rpcinfo -p
    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 53483 status
    100024 1 tcp 50192 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
    100003 4 udp 2049 nfs
    100227 3 udp 2049 nfs_acl
    100021 1 udp 38395 nlockmgr
    100021 3 udp 38395 nlockmgr
    100021 4 udp 38395 nlockmgr
    100021 1 tcp 53778 nlockmgr
    100021 3 tcp 53778 nlockmgr
    100021 4 tcp 53778 nlockmgr
    1
    2
    3
    4
    5
    6
    7
    注意:
    我们只输入了一条启动NFS服务的命令,它额外的启动了3个服务:quotas,daemon,mountd(启动portmap服务)又是怎么回事?

    首先,NFS文件系统要提供服务单靠本身的NFS服务是不够的,还需要调用其它服务,这个其它服务就是RPC(remote procedure call,远程过程调用)服务和portmap服务.由于NFS服务本身不提供文件传输功能,我们要远程使用NFS文件系统就需要RPC服务的支持,而portmap服务用来为RPC服务进行动态端口分配和映射,所以portmap服务也是NFS服务所必须的.正是因为NFS的运行必须要使用RPC服务,所以一般把NFS服务看作RPC服务的一种,开启NFS服务其实就是在开启RPC服务.REDHAT安全指南在讲portmap服务时就说:"portmap服务是用于RPC服务(如NIS和NFS)的动态端口分配守护进程",明显把NFS和NIS(network information service)看成了RPC服务的其中两个应用.

    NFS使用了RPC的哪些服务呢? rpc.nfsd服务 和 rpc.mountd服务
    明白了这点,我们就明白为什么在开启nfs服务时,系统除了开启NFS services还开启了rpc.nfsd和rpc.mountd,而至于NFS quotas是用来管理目录配额的,它并不是必需的.这也就明白了安装NFS服务时所需要的两个软件包nfs-utils和portmap: Nfs-utils软件包提供了rpc.nfsd和rpc.mountd两个RPC的daemon(守护进程)程序,而portmap软件包提供了portmap程序
  5. 客户端:检查共享目录列表

    1
    2
    3
    [root@10 ~]# showmount -e 10.0.2.115
    Export list for 10.0.2.115:
    /mnt/data/nfs/elasticsearch 10.0.3.0/24
  6. 客户端:创建挂载点

    1
    2
    [root@10 ~]# mkdir -p /mnt/ops/elasticsearch
    [root@10 ~]# chmod 777 /mnt/ops/elasticsearch
  7. 客户端:挂在共享目录

    1
    2
    3
    4
    5
    6
    //显示指定NFS服务器的客户端以及服务器端在客户端的挂载点
    showmount –a IP
    //显示指定NFS服务器在客户端的挂载点
    showmount –d IP

    rpcinfo -p 10.10.209.148
  8. 客户端挂载目录

    1
    [root@10 ~]# mount.nfs -t nfs 10.0.2.115:/mnt/data/nfs/elasticsearch /mnt/ops/elasticsearch -o proto=tcp -o nolock