• 什么是nfs?
    nfs是网络文件系统主要功能是通过网络(一般是局域网)让不同主机系统之间可以共享文件或目录
    主要存储用户上传的视屏,音频,图片这些。
    NFS网络文件系统使用于处理量级小的业务
    用于中小企业网站集群机构后端常用nfs进行数据共享

说明:nfs服务只能用于在linux系统之上,如果windows系统和 linux系统共存的情况下用ftp服务、sambe服务均支持linux和windows

  • NFS网络文件的意义
    nfs是一个共享存储服务,为什么要有共享存储?
    1>实现数据信息的共享
    2>实现数据信息的一致

  • NFS的系统原理
    1>在nfs服务端创建共享目录(服务端提供被挂载的磁盘空间)
    2>通过mount网络挂载,将nfs客户端本地目录挂载到nfs服务端共享目录上
    3>nfs客户端挂载目录上创建、删除、查看数据操作,等价于在服务端进行的创建、删除、查看操作

说明:mount -t (指定挂载的文件系统的类型) 挂在类型 源 目标
mount -t nfs10.0.0.7:/data /mnt

  • nfs工作流程:
    1>先启动RPC服务
    2>启动nfs服务
    3>客户端请求nfs服务
    4>rpc服务返回端口到客户端
    5>客户端用地址端口请求传输数据

  • NFS的服务端部署流程
    1.检查服务器上是否已经安装了rpcbind和nfs-utils软件。
    命令:
    rpm -qa rpcbind nfs-utils
    或rpm -qa |egrep “rpcbind|nfs-utils”

2.安装nfs和rpcbind
yum install -y rpcbind nfs-utils

3.编写NFS服务配置文件
NFS服务默认的配置文件为/etc/exports,并且里面初始没有内容,是个空文件,需要用户自行配置。
可以使用vim命令来编辑此文件,在其内添加如下内容:
格式:
#共享目录 允许连接的网段(参数)----中间加一个空格做分隔符
/data/ 172.16.1.0/24(rw,sync)
也可以使用echo或cat命令来实现:

echo ‘/data/ 172.16.1.0/24(rw,sync)’ /etc/exports
或
cat > /etc/exports << EOF
##########config NFS server start by wang 2018-05-21##########
/data/ 172.16.1.0/24(rw,sync)
##########config NFS server end by wang 2018-05-21##########
EOF

4.创建服务端共享目录
服务端共享目录一定要确保存在,不存在的话务必要事先创建,否则在应用时会出错。
命令:
mkdir -p /data/

5.设置服务端共享目录的属主和属组
NFS服务默认使用的用户和用户组是nfsnobody,所以需要将本地同步目录属主和属组为相应的用户。
命令:

grep NFS /etc/passwd   ####----在/etc/passwd中查看NFS的用户和用户组
chown -R nfsnobody.nfsnobody /data/

6.启动及检查rpcbind服务
因为NFS及其辅助程序都是基于RPC协议的(端口为111),所以首先要确保系统中运行了rpcbind服务。
命令:
/etc/init.d/rpcbind start
检查端口:
lsof -i:111
检查rpcbind服务状态:
/etc/init.d/rpcbind status

7.启动及检查nfs服务
注意,一定要确保rpcbind服务已经启动正常,再启动nfs服务。
命令:
/etc/init.d/nfs start
检查nfs服务状态:
/etc/init.d/nfs status
查看nfs服务向rpc服务注册的端口信息的命令:

rpcinfo -p localhost
或rpcinfo -p 127.0.0.1

8.重启nfs服务
如果修改了nfs的配置文件/etc/exports的话,需要重启服务才能使修改生效。
为了提供比较友好的用户体验,建议使用nfs服务平滑重启的参数reload,而不是直接使用restart参数。
命令:
/etc/init.d/nfs reload===== exportfs -r

9.检查NFS服务端共享目录信息
可以使用showmount命令检查NFS服务端共享目录的信息。
命令:

showmount -e localhost
或showmount -e 127.0.0.1
或showmount -e 172.16.1.31

10.服务端设置开机自启动rpcbind和nfs
想要让rpcbind和nfs服务开机自启动,可以使用chkconfig命令来实现。
命令:

chkconfig rpcbind on
chkconfig nfs on

检查:

chkconfig --list | egrep -i “rpcbind|nfs”

11.服务端查看NFS默认自带的参数
配置并启动好NFS服务后,通过cat /var/lib/nfs/etab命令可以看到NFS配置的参数及默认自带的参数。
命令:
cat /var/lib/nfs/etab

  • NFS客户端部署流程
    NFS所有客户端需要做的准备工作都是一样的。客户端需要安装rpcbind和nfs-utils,但只需要启动rpcbind即可,不需要启动nfs。

1.服务器环境检查
无论做什么操作,都应该养成一个好的习惯,那就是先进行检查,再上手操作。
所以第一步应该先检查服务器上是否已经安装了rpcbind和nfs-utils软件。

命令:

rpm -qa rpcbind nfs-utils
或
rpm -qa |egrep “rpcbind|nfs-utils”

2.安装NFS和rpcbind
命令:
yum install -y rpcbind nfs-utils

3.启动及检查rpcbind服务
因为NFS及其辅助程序都是基于RPC协议的(端口为111),所以首先要确保系统中运行了rpcbind服务。

命令:
/etc/init.d/rpcbind start
检查端口:
lsof -i:111
检查rpcbind服务状态:
/etc/init.d/rpcbind status

4.客户端设置开机自启动rpcbind
想要让rpcbind服务开机自启动,可以使用chkconfig命令来实现。

命令:
chkconfig rpcbind on
检查:
chkconfig --list | egrep -i rpcbind

5.创建客户端本地挂载目录
想要挂载NFS服务端的共享目录,在客户端必须要有一个用于挂载的目录。

创建一个目录的命令:
mkdir -p /nfs_dir

6.客户端挂载NFS服务端共享目录
以上步骤全部操作完毕后,就可以在客户端挂载NFS服务端的共享目录了。

挂载命令:
mount -t nfs 172.16.1.31:/data/ /nfs_dir/

可以使用df或mount命令结合grep来检查是否挂载成功。
命令:

df -h | grep '172.16.1.31'
或mount | grep '172.16.1.31'

7.客户端设置开机自动挂载NFS服务端的共享目录
如果需要让客户端开机自动挂载NFS服务端的共享目录,有两种方法。

方法一:将挂载命令放在/etc/rc.local文件里。
缺点:可能会出现偶尔开机挂载不上的情况,工作中如果使用这种方法,除了开启自启动的配置以外,还有对是否挂载成功做监控。
配置/etc/rc.local文件的命令:

echo ‘# mount NFS server by wang 2018-05-21 #’ >> /etc/rc.local
echo ‘mount -t nfs 172.16.1.31:/data/ /video/’ >> /etc/rc.local

方法二:将挂载信息放在/etc/fstab文件里。
这种方法有一个需要特殊注意的地方:fstab会优于网络被linux系统加载。
网络没启动时执行fstab里配置的远程挂载会导致连接不上NFS服务端,无法实现开机正常挂载NFS远程共享目录。
但是,这个问题是可以被解决的,解决方法就是,在客户端启动netfs服务,并且让这个服务开机自启动。
即:/etc/init.d/netfs start;chkconfig netfs on
配置/etc/fstab文件的命令:
echo ’172.16.1.31:/data/ /nfs_dir nfs default 0 0’ >> /etc/fstab

8.客户端查看mount挂载NFS的参数
NFS客户端挂载好服务端的共享目录后,通过grep '172.16.1.31' /proc/mounts命令可以看到mount的详细参数。
命令:
grep '172.16.11' /proc/mounts