NFS服务搭建

一、NFS简介

  NFS是网络文件系统的意思,他的主要功能是通过网络(一般是局域网)让不同的主机系统之间可以共享文件或者目录,NFS客户端,(一般为应用服务器,例如web)可以通过挂载(mount)的方式将NFS服务端共享的数据目录挂载到NFS客户端本地系统中,(就是在某一个挂载点下,),从客户端来看,NFS服务端共享的目录就好像是客户端自己的磁盘分区或者目录一样,而实际上却是远端NFS服务器的目录,

二、NFS配置步骤

  1、下载NFS服务

//下载NFS以及rpcbind
[root@localhost ~]# yum install nfs-utils rcpbind -y
[root@localhost ~]# rpm -qa | egrep "nfs|rpcbind"
nfs-utils-1.3.0-0.54.el7.x86_64
rpcbind-0.2.0-44.el7.x86_64
//下载完成之后会多一个nfsnobody的用户
[root@localhost ~]# id nfsnobody
uid=65534(nfsnobody) gid=65534(nfsnobody) groups=65534(nfsnobody)
//rpc的主端口是111
//nfs的主端口是2049
//为什么需要rpc:因为NFS支持的功能相当多,而不同的功能都会使用不同的程序来启动,每启动一个功能就会启用一些端口来传输数据,因此,NFS的功能所对应的端口无法固定,它会随机取用一些未被使用的端口来作为传输之用,用户需要 通过rpc来获取端口访问。

  2、启动NFS服务。

//需要先启动rpc,然后再启动nfs
[root@localhost ~]# systemctl start rpcbind
[root@localhost ~]# lsof -i:111
COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
rpcbind 11434  rpc    6u  IPv4  29471      0t0  UDP *:sunrpc 
rpcbind 11434  rpc    8u  IPv4  29473      0t0  TCP *:sunrpc (LISTEN)
rpcbind 11434  rpc    9u  IPv6  29474      0t0  UDP *:sunrpc 
rpcbind 11434  rpc   11u  IPv6  29476      0t0  TCP *:sunrpc (LISTEN)
//查看rpc对应的服务
[root@localhost ~]# 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@localhost ~]# systemctl start nfs
//查看rpc对应的服务
[root@localhost ~]# 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
    100024    1   udp  41580  status
    100024    1   tcp  41087  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  37240  nlockmgr
    100021    3   udp  37240  nlockmgr
    100021    4   udp  37240  nlockmgr
    100021    1   tcp  44041  nlockmgr
    100021    3   tcp  44041  nlockmgr
    100021    4   tcp  44041  nlockmgr

  3、配置NFS配置文件,

  NFS语法如下:NFS共享的目录 NFS客户端地址(参1 参2)

  NFS共享的目录:为NFS服务端要共享的实际目录,要用绝对路径如/data,注意共享目录的本地权限,如果需要读写共享,一定要让本地目录可以被NFS客户端用户 (nfsnobody)可以读写

  NFS客户端地址:为NFS服务端授权的可访问共享目录的NFS客户端地址,可以为单独的ip地址或者主机名,域名等,也可以为整个网段地址,还可以用 “*”来匹配所有客户端服务器,这里所谓的客户端一般来说是指前端的业务服务器,例如:web服务器,

  权限参数集: 对授权的NFS客户端的访问权限设置,

  NFS配置参数:

    rw 表示可读写权限

    ro 表示只读权限

    sync 请求或写入数据时,数据同步写入NFS server的硬盘才返回,优点:数据安全不会丢,缺点:性能比不启动该参数要查,

    async 写入时数据会先写到内存缓冲区,直到硬盘有空档才会再写入磁盘,这样可以提升写入效率,风险为若服务器宕机或者不正常关机,会损失缓冲区中未写入磁盘的数据,(解决办法:服务器主板电池或加 ups不间断电源,)

    all_squash 不管访问NFS server共享目录的用户身份如何,他的权限都将被压缩成匿名用户,同时它的UID和GID都会变成 nfsnobody 账户身份,在早期多个NFS客户端同时读写NFS server 数据时,这个参数很有用。

//需要注意的是,要将服务端的防火墙和selinux关闭
[root@localhost ~]# systemctl stop firewalld.service
[root@localhost ~]# systemctl disable firewalld.service
[root@localhost ~]# setenforce 0
//创建一个用于共享的目录
[root@localhost ~]# mkdir /data
[root@localhost ~]# chown -R nfsnobody.nfsnobody /data
//编辑nfs的配置文件
[root@localhost ~]# vim /etc/exports
/data 192.168.80.0/24(rw,sync)    //写入共享的内容
[root@localhost ~]# systemctl reload nfs          //平滑重启nfs服务
[root@localhost ~]# showmount -e 192.168.80.131    //自查,显示如下结果即表示nfs服务端已经配置完成
Export list for 192.168.80.131:
/data 192.168.80.0/24   

  服务端配置nfs配置完成之后需要配置一下客户端的内容。

[root@localhost backup]# yum install rpcbind nfs-utils -y
[root@localhost backup]# systemctl start rpcbind
[root@localhost backup]# lsof -i:111
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
rpcbind 3738  rpc    6u  IPv4  30074      0t0  UDP *:sunrpc 
rpcbind 3738  rpc    8u  IPv4  30076      0t0  TCP *:sunrpc (LISTEN)
rpcbind 3738  rpc    9u  IPv6  30077      0t0  UDP *:sunrpc 
rpcbind 3738  rpc   11u  IPv6  30079      0t0  TCP *:sunrpc (LISTEN)
[root@localhost /]# showmount -e 192.168.80.131
Export list for 192.168.80.131:
/data 192.168.80.0/24
[root@localhost /]# mount -t nfs 192.168.80.131:/data/ /data/
[root@localhost /]# 
[root@localhost /]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/cl-root    17G  1.1G   16G   7% /
devtmpfs              478M     0  478M   0% /dev
tmpfs                 489M     0  489M   0% /dev/shm
tmpfs                 489M  6.7M  482M   2% /run
tmpfs                 489M     0  489M   0% /sys/fs/cgroup
/dev/sda1            1014M  139M  876M  14% /boot
tmpfs                  98M     0   98M   0% /run/user/0
192.168.80.131:/data   17G  1.1G   16G   7% /data
//验证,在客户端往/data目录中写文件,在服务端查看,

  

  

  

原文地址:https://www.cnblogs.com/pandj/p/9396425.html