NFS网络文件系统服务

1、NFS网络文件系统简介

    1)NFS概念描述:

    什么是nfs?nfs是Network File system的缩写,它的主要功能是通过网络让不同的主机系统之间可以彼此共享文件或目录。NFS客户端(一般为应用服务器,如web)可以通过挂载(mount)的方式将NFS服务器端共享的数据文件目录挂载到NFS客户端本地系统中(就是某一个挂载点)。从NFS客户端查看本地的挂载目录,就是访问NFS服务器端的共享目录。

    NFS网络文件系统的使用很像Windows系统的网络共享、安全功能、网络驱动器映射,这也和Linux的Samba服务类似。

    2)NFS在企业中的应用场景:

    在企业集群架构的工作场景中,NFS网络文件系统一般被用来存储共享视频、图片、附件等静态资源文件(一般把网站用户上传的文件都放在NFS共享里),NFS是当前互联网系统架构中最常用的数据存储服务之一,特别是中小型网站公司应用频率很高。大公司或门户除了使用NFS外,还可能会使用MFS、GFS、FASTFS、TFS等分布式文件系统。

    3)网络文件系统类型:

    NFS:适用于中小企业;

    MFS:用于存放图片文件,分布式文件系统;

    GFS:一般用于云计算,做后端存储的大文件。

2、NFS服务器端环境

[root@localhost /]# cat /etc/redhat-release 
Red Hat Enterprise Linux Server release 7.1 (Maipo)     #RedHat7.1操作系统
[root@localhost /]# uname -r
3.10.0-229.el7.x86_64.debug
[root@localhost /]# ifconfig|sed -n '2,2p'|awk '{print $2}'
192.168.26.11                            #服务器IP地址

3、安装NFS服务

    1)yum安装nfs服务软件包

    ① rpcbind:这个软件包是rpc的主程序,客户端和服务端都需要安装;

    ② nfs-utils:这个软件包是NFS服务的主程序,客户端和服务端都需要安装。

[root@localhost /]# rpm -qa nfs-utils rpcbind   #检查软件包是否安装
[root@localhost /]# yum -y ×××tall nfs-utils rpcbind    #安装软件包
[root@localhost /]# rpm -qa rpcbind nfs-utils     #检查软件包是否安装
rpcbind-0.2.0-26.el7.x86_64
nfs-utils-1.3.0-0.8.el7.x86_64

    2)安装软件包时报错以及解决方法

    ① 安装rpcbind报错信息

[root@nfs-client /]# yum -y ×××tall rpcbind

Failed to set locale, defaulting to C

Loaded plug×××: fastestmirror

Loading mirror speeds from cached hostfile

 * base: mirrors.163.com

 * extras: mirrors.163.com

 * updates: mirrors.163.com

***********************省略部分内容***************

error: %pre(rpcbind-0.2.0-44.el7.x86_64) scriptlet failed, exit status 6

Error in PREIN scriptlet in rpm package rpcbind-0.2.0-44.el7.x86_64

  Verifying  : rpcbind-0.2.0-44.el7.x86_64                                         1/1

Failed:

  rpcbind.x86_64 0:0.2.0-44.el7                                                       

Complete!

    ② 解决方法

错误提示安装软件的时候执行什么脚本出现了错误,经百度之后知道在安装rpm软件包的时候,会先执行rpm包中的预处理脚本,应该是执行这个脚本的时候出现了错误,所以我尝试查看这个脚本都执行了什么内容;

那么如何获取到这个脚本呢?

取对应的rpm
yum ×××tall xxxxpackage  --downloadonly --downloaddir=/root
取得rpm对应的安装预处理脚本
rpm --scripts -qp xxxxpackage  > x-scripts.log

发现该脚本中有用到useradd/userdel命令来添加rpc的用户,由此想起之前使用chattr +i /etc/passwdpasswd文件做了加锁处理,所以会造成useradd/userdel命令不能正常执行,这应该就是造成预处理脚本不能正常执行的原因了吧,使用chattr -i /etc/passwd解锁之后软件可以正常安装。

4、启动NFS服务(服务器端)

    1)启动rpcbind服务

[root@localhost /]# systemctl start rpcbind       #启动rpcbind
[root@localhost /]# systemctl enable rpcbind      #查看rpc是否启动
[root@localhost /]# systemctl is-active rpcbind   #设置rpcbind开机自启动
active
[root@localhost /]# systemctl is-enabled rpcbind  #查看rpcbind是否开机自启动
enabled

    2)启动nfs服务

[root@localhost /]# systemctl start nfs       #启动nfs
[root@localhost /]# systemctl is-active nfs   #查看nfs是否启动
active
[root@localhost /]# systemctl enable nfs-server.service     #设置nfs开机自启动
ln -s '/usr/lib/systemd/system/nfs-server.service' '/etc/systemd/system/multi-user.target.wants/nfs-server.service'
[root@localhost /]# echo $?
0
[root@localhost /]# systemctl is-enabled nfs-server     #查看nfs开机是否自启动
enabled

    3)查看rpc进程

[root@localhost /]# ps -ef|grep -v grep|grep rpc
rpc       22647      1  0 15:31 ?        00:00:00 /sbin/rpcbind -w
root      22676      2  0 15:33 ?        00:00:00 [rpciod]
rpcuser   22686      1  0 15:33 ?        00:00:00 /usr/sbin/rpc.statd --no-notify
root      22691      1  0 15:33 ?        00:00:00 /usr/sbin/rpc.idmapd
root      22692      1  0 15:33 ?        00:00:00 /usr/sbin/rpc.mountd

    4)查看rpc状态

[root@localhost /]# systemctl status rpcbind
###########省略部分内容###########
   Active: active (running) since 五 2019-06-14 15:31:56 CST; 8min ago
###########省略部分内容###########

    5)查看rpc有没有注册端口(111是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  44701  status
    100024    1   tcp  55897  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  48795  nlockmgr
    100021    3   udp  48795  nlockmgr
    100021    4   udp  48795  nlockmgr
    100021    1   tcp  59460  nlockmgr
    100021    3   tcp  59460  nlockmgr
    100021    4   tcp  59460  nlockmgr

5、NFS客户端启动(只启动rpc服务即可)

    1)nfs客户端环境

[root@vms002 /]# cat /etc/redhat-release 
Red Hat Enterprise Linux Server release 7.1 (Maipo)        #操作系统
[root@vms002 /]# uname -r
3.10.0-229.el7.x86_64
[root@vms002 /]# ifconfig|sed -n '2,2p'|awk '{print $2}'
192.168.26.102                                             #nfs客户端IP地址

    2)安装rpcbind    

[root@vms002 /]# yum -y ×××tall rpcbind

    3)启动rpcbind服务

[root@vms002 /]# systemctl start rpcbind
[root@vms002 /]# systemctl is-active rpcbind
active

    4)查看rpc有没有注册端口

[root@vms002 /]# 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
    100005    1   udp  20048  mountd
    100005    1   tcp  20048  mountd
    100024    1   udp  57887  status
    100024    1   tcp  36792  status
    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  51830  nlockmgr
    100021    3   udp  51830  nlockmgr
    100021    4   udp  51830  nlockmgr
    100021    1   tcp  46841  nlockmgr
    100021    3   tcp  46841  nlockmgr
    100021    4   tcp  46841  nlockmgr

6、配置及测试

    1)服务端配置

    ① 创建一个你要共享的目录

[root@localhost /]# ifconfig|sed -n '2,2p'|awk '{print $2}'
192.168.26.11
[root@localhost /]# mkdir /data

    ② 配置NFS配置文件(默认配置文件是空的)

[root@localhost /]# vim /etc/exports

###############
/data 192.168.26.0/24(rw,sync)         #/data是共享目录;192.168.26.0/24是允许网络访问地址段;(rw,sync)是权限

    ③ 重新加载nfs服务(尽量不要重启服务)

[root@localhost /]# systemctl reload nfs

    ④ 检查nfs共享配置是否成功

[root@localhost /]# showmount -e localhost
Export list for localhost:
/data 192.168.26.0/24

    ⑤ 向第一步创建的共享目录里面存放或创建文件数据,等下与客户端对比是否一样

[root@localhost /]# cd /data/
[root@localhost data]# touch aa{1..3}
[root@localhost data]# touch oldboy-{5..8}
[root@localhost data]# ls
aa1  aa2  aa3  oldboy-5  oldboy-6  oldboy-7  oldboy-8

    ⑥ 把共享目录的属主和属组设置为NFS用户

[root@localhost data]# chown -R nfsnobody:nfsnobody /data/
[root@localhost data]# ls -ld /data
drwxr-xr-x. 2 nfsnobody nfsnobody 96 6月  14 16:24 /data

    2)客户端配置及测试

    ① 检查服务端NFS是否OK

[root@vms002 /]# ifconfig|sed -n '2,2p'|awk '{print $2}'
192.168.26.102
[root@vms002 /]# showmount -e 192.168.26.11
Export list for 192.168.26.11:
/data 192.168.26.0/24

    ② 客户端上创建一个挂载目录nfs-data,挂载nfs

[root@vms002 /]# mkdir /nfs-data     #创建挂载目录
[root@vms002 /]# mount -t nfs 192.168.26.11:/data /nfs-data/     #挂载nfs共享目录
[root@vms002 /]# df -hT     #查看已挂载的nfs共享目录
文件系统            类型      容量  已用  可用 已用% 挂载点
/dev/sda1           xfs        40G  3.2G   37G    8% /
192.168.26.11:/data nfs4       18G  4.1G   14G   24% /nfs-data         #nfs共享目录

    ③ 查看nfs-data目录是否是NFS服务端共享的数据,并创建文件,看nfs的写权限是否成功。

[root@vms002 /]# cd /nfs-data/
[root@vms002 nfs-data]# ls
aa1  aa2  aa3  oldboy-5  oldboy-6  oldboy-7  oldboy-8
[root@vms002 nfs-data]# touch www{1..5}
[root@vms002 nfs-data]# ls
aa1  aa3       oldboy-6  oldboy-8  www2  www4
aa2  oldboy-5  oldboy-7  www1      www3  www5

    ④ 设置开机自动挂载

[root@vms002 /]# vim /etc/fstab 
192.168.26.11:/data  /nfs-data  nfs  defaults  0 0
[root@vms002 /]# umount /nfs-data/
[root@vms002 /]# df -hT
文件系统       类型      容量  已用  可用 已用% 挂载点
/dev/sda1      xfs        40G  3.2G   37G    8% /
devtmpfs       devtmpfs  2.0G     0  2.0G    0% /dev
tmpfs          tmpfs     2.0G  148K  2.0G    1% /dev/shm
tmpfs          tmpfs     2.0G   17M  2.0G    1% /run
tmpfs          tmpfs     2.0G     0  2.0G    0% /sys/fs/cgroup
/dev/sr0       iso9660   3.7G  3.7G     0  100% /run/media/jerry/RHEL-7.1 Server.x86_64
[root@vms002 /]# mount -a
[root@vms002 /]# df -hT
文件系统            类型      容量  已用  可用 已用% 挂载点
/dev/sda1           xfs        40G  3.2G   37G    8% /
devtmpfs            devtmpfs  2.0G     0  2.0G    0% /dev
tmpfs               tmpfs     2.0G  148K  2.0G    1% /dev/shm
tmpfs               tmpfs     2.0G   17M  2.0G    1% /run
tmpfs               tmpfs     2.0G     0  2.0G    0% /sys/fs/cgroup
/dev/sr0            iso9660   3.7G  3.7G     0  100% /run/media/jerry/RHEL-7.1 Server.x86_64
192.168.26.11:/data nfs4       18G  4.1G   14G   24% /nfs-data

    3)客户端报错案例:

    ① 检测服务端的NFS服务失败,报错信息

[root@vms002 /]# showmount -e 192.168.26.11
clnt_create: RPC: Port mapper failure - Unable to receive: errno 113 (No route to host)

    ② 解决方法:

    #根据上面的报错信息,nfs server服务器端可能被firewalld(防火墙)拦截了,关闭NFS服务端的防火墙或允许通过

[root@localhost data]# systemctl stop firewalld

    #nfs client客户端再次检查是否可以连接到nfs服务端

[root@vms002 nfs-data]# showmount -e 192.168.26.11
Export list for 192.168.26.11:
/data 192.168.26.0/24

7、总结

    1)NFS服务端

    ① 检查并安装nfs服务

[root@localhost /]# rpm -qa rpcbind nfs-utils
[root@localhost /]# yum -y ×××tall rpcbind nfs-utils

    ② 启动rpc和nfs服务以及设置开机自启动并检查

[root@localhost /]# systemctl start rpcbind
[root@localhost /]# systemctl enable rpcbind
[root@localhost /]# systemctl start nfs-server
[root@localhost /]# systemctl enable nfs-server
[root@localhost /]# systemctl is-active rpcbind
active
[root@localhost /]# systemctl is-enabled rpcbind
enabled
[root@localhost /]# systemctl is-active nfs-server
active
[root@localhost /]# systemctl is-enabled nfs-server
enabled

    ③ 配置共享/data目录

[root@localhost /]# vim /etc/exports
###############注释################
/data 192.168.26.0/24(rw,sync)

    ④ 重新加载NFS服务(尽量不要重启)

[root@localhost /]# systemctl reload nfs

    ⑤ 检查nfs服务配置是否成功

[root@localhost /]# showmount -e localhost
Export list for localhost:
/data 192.168.26.0/24

    ⑥ 设置共享目录的权限(把共享目录的属主和属组设置为nfs用户)

[root@localhost data]# chown -R nfsnobody:nfsnobody /data/
[root@localhost data]# ls -ld /data
drwxr-xr-x. 2 nfsnobody nfsnobody 96 6月  14 16:24 /data

    2)客户端(客户端只启动rpc服务即可)

    ① 安装nfs和rpc软件

[root@localhost /]# rpm -qa rpcbind nfs-utils
[root@localhost /]# yum -y ×××tall rpcbind nfs-utils

    ② 启动rpc服务以及设置开机自启动,并检查

[root@vms002 /]# systemctl start rpcbind
[root@vms002 /]# systemctl enable rpcbind
[root@vms002 /]# systemctl is-active rpcbind
active
[root@vms002 /]# systemctl is-enabled rpcbind
enabled

    ③ 检查服务端NFS是否OK

[root@vms002 /]# showmount -e 192.168.26.11
Export list for 192.168.26.11:
/data 192.168.26.0/24

    ④ 挂载并测试

[root@vms002 /]# mount -t nfs 192.168.26.11:/data /nfs-data/
[root@vms002 /]# cd /nfs-data/
[root@vms002 nfs-data]# ls
aa1  aa2  aa3  oldboy-5  oldboy-6  oldboy-7  oldboy-8
[root@vms002 nfs-data]# touch www{1..5}
[root@vms002 nfs-data]# ls
aa1  aa3       oldboy-6  oldboy-8  www2  www4
aa2  oldboy-5  oldboy-7  www1      www3  www5

    ⑤ 设置开机自动挂载

[root@vms002 /]# vim /etc/fstab 
192.168.26.11:/data  /nfs-data  nfs  defaults  0 0


猜你喜欢

转载自blog.51cto.com/13716812/2409230