1.NFS应用场景

NFS是Network File System的缩写及网络文件系统。
主要功能是通过局域网络让不同的主机系统之间可以共享文件或目录。
NFS系统和Windows网络共享、网络驱动器类似, 只不过windows用于局域网,NFS用于企业集群架构中, 如果是大型网站, 会用到更复杂的分布式

小文件存储系统:(Moosefs,FastDFS)
大文件存储系统:(glusterfs,HDFS)

如果使用NFS客户端挂载的方式将NFS服务器端共享的数据目录挂载至NFS客户端本地系统中。从NFS客户端来看,NFS服务器端共享的目录就好像是客户端自己的磁盘分区或者目录一样,但实际上却是远端NFS服务端的目录。

下面我将通过图解给大家展示集群需要共享存储服务的理由。
A用户传图片到WEB1服务器,然后让B用户访问这张图片,结果B用户访问的请求分发到了WEB2,因为WEB2上没有这张图片,结果无法看到A用户传的图片。

如果有共享存储的情况, A用户上传图片无论分发到WEB1还是WEB2, 最终都存储至共享存储,此时B用户访问图片时,无论分发到WEB1还是WEB2上,最终也都会去共享存储上访问,这样就可以访问到资源了

共享存储的位置可以通过开源软件或商业硬件实现,通常互联网中小型集群架构会使用NFS网络文件系统实现,
中小型互联网企业一般不会买硬件存储, 主要因为过于昂贵,
大型公司如果业务发展很快, 可能考虑购买硬件存储,但当网站并发继续加大时,硬件存储的扩展相对会比较费劲。

NFS存储优点

1.NFS文件系统简单易用、方便部署、数据可靠、服务稳定、满足中小企业需求。
2.NFS文件系统内数据是在文件系统之上的,所有数据都是能看得见。

NFS存储局限

1.存在单点故障, 维护麻烦
2.高并发场景性能有一定局限(日pv千万)
3.NFS数据明文, 并不对数据做任何校验
4.客户端挂载无需账户密码, 安全性一般(内网使用)

应用建议

1.生产场景应将数据尽可能往前端推, 减少后端数据库和存储压力
2.将存储里的静态资源通过CDN缓存(jpg\css\js)
3.如果没有缓存或架构本身历史遗留问题, 在多存储也无用
4.NFS是中小企业集群架构中最常见的一种(日PV千万)

2.NFS实现原理

3.NFS服务实践

1.环境准备:

2.不要忘记关闭防火墙, 以免默认的防火墙策略禁止正常的NFS共享服务

//关闭Firewalld防火墙
[root@liyanzhao ~]# systemctl disable firewalld
[root@liyanzhao ~]# systemctl stop firewalld
//关闭selinux防火墙
[root@liyanzhao ~]# sed -ri '#^SELINUX=#cSELINUX=Disabled' /etc/selinux/config
[root@liyanzhao ~]# setenforce 0

2.安装NFS-Server

//  安装nfs服务主程序
[root@nfs-server ~]# yum -y install nfs-utils rpcbind

3.NFS服务程序的配置文件为/etc/exports默认里面没有任何内容。

我们可以按照共享目录的路径 允许访问的NFS客户端(共享权限参数)格式,定义要共享的目录与相应的权限。

如果想要把/data目录共享给192.168.56.0/24网段内的所有主机
1.主机都拥有读写权限
2.在将数据写入到NFS服务器的硬盘中后才会结束操作,最大限度保证数据不丢失
3.将所有用户映射为本地的匿名用户

//注意: NFS客户端地址与权限之间没有空格
[root@nfs-server ~]# vim /etc/exports
/data   192.168.56.0/24(rw,sync,all_squash)
//在NFS服务器上建立用于NFS文件共享的目录,并设置对应权限
[root@nfs-server ~]# mkdir /data
[root@nfs-server ~]# chown -R nfsnobody.nfsnobody /data
//NFS共享目录会记录至/var/lib/nfs/etab,如果该目录不存在共享信息,请检查配置

4.在使用NFS服务进行文件共享之前,需要使用RPC(Remote Procedure Call远程过程调用, 服务将NFS服务器的IP地址和端口号信息发送给客户端。
因此,在启动NFS服务之前,需要先重启并启用rpcbind服务程序,同时都加入开机自启动

[root@nfs-server ~]# systemctl restart rpcbind
[root@nfs-server ~]# systemctl enable rpcbind
[root@nfs-server ~]# systemctl restart nfs-server
[root@nfs-server ~]# systemctl enable nfs-server

4.NFS客户端挂载

NFS客户端的配置步骤也十分简单。先使用showmount命令,查询NFS服务器的远程共享信息,其输出格式为“共享的目录名称 允许使用客户端地址”。

1.安装客户端工具,仅启动rpcbind服务

[root@nfs-client ~]# yum -y install nfs-utils rpcbind
[root@nfs-client ~]# systemctl restart rpcbind
[root@nfs-client ~]# systemctl enable rpcbind

2.客户端查看远程服务器提供可挂载信息

[root@nfs-client ~]# showmount -e 192.168.56.11
Export list for 192.168.56.11:
/data 192.168.56.0/24

3.在NFS客户端创建一个挂载目录, 使用mount命令并结合-t参数, 指定要挂载的文件系统的类型, 并在命令后面写上服务器的IP地址, 以及服务器上的共享目录, 最后需要写上要挂载到本地系统(客户端)的目录。

[root@nfs-client ~]# mkdir /nfsdir
[root@nfs-client ~]# mount -t nfs 192.168.56.11:/data /nfsdir
//查看挂载信息(mount也可以查看)
[root@nfs-client ~]# df –h
Filesystem           Size  Used Avail Use% Mounted on
/dev/sda3             62G  845M   58G   2% /
tmpfs                244M     0  244M   0% /dev/shm
/dev/sda1            190M   26M  155M  14% /boot
192.168.56.11:/data   62G  880M   58G   2% /nfsdir

4.挂载成功后可以进行增删改操作

//使用客户端往nfs存储写入
[root@nfs-client ~]# echo "nfs-client" >> /mnt/test.txt 
//检查nfs服务端是否存在客户端创建的新文件
[root@nfs-client ~]# cat /data/test.txt
nfs-client

5.如果希望NFS文件共享服务能一直有效,则需要将其写入到fstab文件中

[root@nfs-client ~]# vim /etc/fstab
192.168.56.11:/data /nfsdir nfs defaults 0 0

6.如果不希望使用NFS共享, 可进行卸载

[root@nfs-client ~]# umount /nfsdir
注意:卸载的时候如果提示”umount.nfs: /nfsdir: device is busy”

1.切换至其他目录, 然后在进行卸载。
2.NFS Server宕机, 强制卸载umount -lf /nfsdir

5.AutoFS自动挂载

无论是Samba服务还是NFS服务, 都要把挂载信息写入到/etc/fstab中, 这样远程共享资源就会自动随服务器开机而进行挂载。
1.虽然很方便,但挂载资源过多会造成网络带宽以及服务器硬件资源带来很大的负载
2.如果在资源挂载后长期不使用,也会造成服务器硬件资源的浪费。
3.每次使用之前执行mount手动挂载,这是个不错的选择, 但每次都需要先挂载在使用, 会非常的麻烦

那么autofs自动挂载服务可以帮我们解决这一问题。autofs服务程序是一种守护进程, 当检测到用户试图访问一个尚未挂载的文件系统时,将自动挂载该文件系统。

autofs服务程序是在用户需要使用该文件系统时才去动态挂载, 从而节约了网络资源和服务器的硬件资源

autofs自动挂载服务, 有两种挂载方式:

直接:direct /- 子配置文件必须写本地绝对路径
间接: indirect /path 子配置文件写相对于/path的子目录

1.客户端安装autofs自动挂载

[root@nfs-client ~]# yum install autofs -y
[root@nfs-client ~]# systemctl enable autofs
[root@nfs-client ~]# systemctl start autofs

2.不要将设备挂载信息都写入到autofs服务的主配置/etc/auto.master文件中,会让主配置文件臃肿不堪,不利于服务执行效率,也不利于日后修改里面的配置内容

//可以将文件写入/etc/auto.master.d目录下, 该目录已被主配置文件包含
[root@http-server ~]# grep "dir" /etc/auto.master
+dir:/etc/auto.master.d

3.直接挂载方式: 本地的挂载点是绝对路径

//名称后缀必须是autofs,/-代表这是一个直接挂载定义,根据/etc/auto.nfs_direct进行挂载
[root@nfs-client ~]# vim /etc/auto.master.d/nfs.autofs
/-      /etc/auto.nfs_direct
//子配置文件中,照“挂载目录 挂载文件类型及权限 :设备名称”的格式进行填写。
[root@nfs-client ~]# vim /etc/auto.nfs_direct
/nfsdir  -fstype=nfs,rw,sync,soft,nosuid,nodev  192.168.56.11:/data
//重启autofs服务
[root@nfs-client ~]# systemctl restart autofs
间接挂载: 本地路径和服务端的路径都没有直接写绝对路径
//名称后缀必须是autofs,访问本地对应目录自动远端nfs
[root@nfs-client ~]# vim /etc/auto.master.d/nfs.autofs
#/-      /etc/auto.nfs_direct
/nfsdir /etc/auth.nfs_share
[root@nfs-client ~]# vim /etc/auth.nfs_share
*       -rw,sync,soft,nosuid,nodev,'sec=krb5p' 192.168.56.11:/data/&
//重启autofs服务
[root@nfs-client ~]# systemctl restart autofs
注意:如果有kerberos验证则需要启动nfs-secure,并加入开机自启动
使用df命令无法查看具体挂载内容, 使用mount命令可以

6.NFS共享系统实践

准备3台虚拟机服务器(VM)NFS服务端(A)、NFS客户端(B)、NFS客户端(C)并且请按照要求搭建配置NFS服务。
1.在NFS服务端A上共享/data/w_share及/data/r_share两个文件目录,允许NFS客户端B、C上分别挂载共享目录后可实现从B、C上对/data/r_share目录只读权限、对/data/w_share拥有可写权限。
2.NFS客户端(B)挂载NFS至本地站点对应的目录 /data/b_w(写)、/data/b_r(读)
3.NFS客户端(C)挂载NFS至本地站点对应的目录/data/w_liyanzhao、/data/r_xuliangwei
环境准备:

规划图如下:

文档更新时间: 2019-07-11 13:17   作者:李延召