大家好呀!这里是码农后端。今天来简单聊一聊NFS服务。NFS(Network FileSystem,网络文件系统),是一个比较轻量级的服务,如果想要搭建一个大容量的存储平台,那么使用NFS既简单又快速。

一、NFS服务概述

1、背景引入

为了提高用户的访问效率,现需要将原有web服务器上的静态资源文件分离出来,单独保存到一台文件服务器上。

1)搭建NFS服务器(用于静态资源的存储如图片、视频、附件)

2)使用mount指定对NFS服务器进行挂载,挂载到Web服务器中

2、环境准备

由模版机CentOS7.6(通过恢复到快照还原为系统初始状态)在关机情况下使用完整克隆,克隆出3台一模一样的机器,分别为Web、NFS和Backup。

编号 主机名称FQDN IP地址 作用
1 web.itweb.cn 10.1.1.11 Web服务器
2 nfs.itweb.cn 10.1.1.12 NFS服务器
3 backup.itweb.cn 10.1.1.13 Backup服务器

FQDN(Fully Qualified Domain Name),是一种网络标识符,用于唯一地标识互联网上的主机。是一个包含主机名和域名的完整字符串。

1)设置主机名称

1
2
3
4
5
6
7
8
# Web服务器
hostnamectl set-hostname web.itweb.cn
# NFS服务器
hostnamectl set-hostname nfs.itweb.cn
# 备份服务器
hostnamectl set-hostname backup.itweb.cn
# 切换生效
su

2)设置IP地址

1
2
3
4
5
6
7
8
9
10
# 打开网卡文件
vim /etc/sysconfig/network-scripts/ifcfg-ens33
# 编辑
BOOTPROTO=none
IPADDR=10.1.1.11
# 其余两台:10.1.1.12、10.1.1.13
NETMASK=255.255.255.0
GATEWAY=10.1.1.2
DNS1=119.29.29.29
DNS2=114.114.114.114

注:UUID必须是唯一的,所以要么删除,要么更改UUID的值(更改后3位)


设置完成后,重启网络使其生效

1
systemctl restart network

3台机器都分别做如上设置。需要更改的是IPADDR和UUID(改后3位)

3)关闭防火墙与SELinux

1
2
3
4
5
6
7
8
9
10
# 关闭防火墙
systemctl stop firewalld
# 禁止开机启动
systemctl disable firewalld

# 关闭SELinux
setenforce 0

vim /etc/selinux/config
SELINUX=disabled

4)配置YUM源

如果有网络,可不配置,如果无网络则需要配置YUM源。

1
2
3
4
# 清除所有缓存
yum clean all
# 重新给本地仓库建立缓存
yum makecache

3、NFS概述

  • NFS(Network File System)网络文件系统,主要用于Linux系统上实现文件共享的一种协议,其客户端主要是Linux

  • 没有用户认证机制,且数据在网络上传送的时候是明文传送,一般只能在局域网内网环境中使用

  • 支持多节点同时挂载及并发写入

  • 企业应用:为集群中的web server提供后端存储(做静态资源服务器)

4、NFS组成

1)rpcbind : 负责NFS的数据传输,远程过程调用 tcp/udp协议,端口111

2)nfs-utils :控制共享哪些文件,权限管理

RPC(Remote Procedure Call Protocol),远程过程调用协议。是一种通过网络从远程计算机程序上请求服务,不需要了解底层网络技术的协议。

5、与NFS相关的软件包

1
2
3
nfs-utils-1.2.3-26.el6.x86_64 		nfs服务的一个脚本控制工具(服务端与客户端)
nfs4-acl-tools-0.3.3-6.el6.x86_64 acl 工具包
nfs-utils-lib-1.1.5-4.el6.x86_64 nfs 库文件

6、安装NFS软件

1
2
3
4
5
# 安装软件(系统默认已经安装好了)
yum install rpcbind nfs-utils -y
# 查询软件
rpm -q rpcbind
rpm -aq|grep ^nfs

7、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
# 打开配置文件
vim /etc/exports

#共享目录 共享选项
/share *(ro,sync)
/public *(ro,sync)

#共享主机:
* :代表所有主机
192.168.0.0/24:代表共享给某个网段192.168.0.1 ~ 192.168.0.254
192.168.0.0/24(rw) 192.168.1.0/24(ro) :代表共享给不同网段
192.168.0.254:共享给某个IP
*.itweb.cn:代表共享给某个域下的所有主机

#共享选项:
ro:只读
rw:读写
sync:实时同步,直接写入磁盘(安全性最高)
async:异步,先缓存数据在内存然后再同步磁盘(效率最高,但是有丢失文件风险)
anonuid:设置访问nfs服务的用户的uid,uid需要在/etc/passwd中存在
anongid:设置访问nfs服务的用户的gid
root_squash :默认选项 root用户创建的文件的属主和属组都变成nfsnobody,其他人nfs-server端是它自己,client端是nobody。(访问NFS服务器时,映射为匿名账号)
no_root_squash:root用户创建的文件属主和属组还是root,其他人server端是它自己uid,client端是nobody。(访问NFS服务器时,映射为root管理员账号)
all_squash: 不管是root还是其他普通用户创建的文件的属主和属组都是nfsnobody

注:anonuid和anongid参数和all_squash一起使用。all_squash表示不管是root还是其他普通用户从客户端所创建的文件在服务器端的拥有者和所属组都是nfsnobody;服务端为了对文件做相应管理,可以设置anonuid和anongid进而指定文件的拥有者和所属组

二、NFS服务搭建

1、搭建NFS服务器

1)安装软件

1
yum install rpcbind nfs-utils -y

2)创建一个共享目录,如/share

1
mkdir /share

2、编写NFS主配置文件

1
2
3
4
5
6
# 打开配置文件
vim /etc/exports

#编辑如下
#共享目录 共享选项
/share 10.1.1.0/24(rw,sync)

需要写,使用rw,否则ro;并发量小,选择sync,否则选async

3、启动相关的NFS服务

1
2
3
4
systemctl start rpcbind
systemctl start nfs

ss -naltp |grep 111 111端口

4、搭建Web服务器

1
2
3
4
# 安装软件
yum install httpd -y
# 启动httpd服务
systemctl start httpd

当Apache软件启动完毕后,会自动占用计算机的80端口。

80端口指向Web服务器的目录 => /var/www/html

所以项目源代码都可以直接存放于/var/www/html目录下

1
echo "NFS实战演练" > /var/www/html/index.html

浏览器中访问10.1.1.11,如下

5、在Web服务器中挂载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
mkdir /var/www/html/media

# 挂载nfs
mount -t nfs 10.1.1.12:/share /var/www/html/media
# 或
mount.nfs 10.1.1.12:/share /var/www/html/media

# 查询,显示文件系统的使用情况
df -h

Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 17G 5.1G 12G 30% /
devtmpfs 894M 0 894M 0% /dev
tmpfs 910M 0 910M 0% /dev/shm
tmpfs 910M 11M 900M 2% /run
tmpfs 910M 0 910M 0% /sys/fs/cgroup
/dev/sda1 1014M 179M 836M 18% /boot
tmpfs 182M 28K 182M 1% /run/user/1000
/dev/sr0 4.3G 4.3G 0 100% /run/media/itheima/CentOS 7 x86_64
tmpfs 182M 0 182M 0% /run/user/0
10.1.1.12:/share 17G 5.1G 12G 30% /var/www/html/media

# 如果客户端没有安装nfs工具可能导致挂载失败:
yum -y install nfs-utils nfs-utils-lib nfs4-acl-tools

6、上传aws.mp4视频到NFS服务器的/share

1)使用MX上传aws.mp4到/share目录(NFS服务器)

2)在Web服务器中,ll /var/www/html/media

1
2
3
4
# 显示/var/www/html/media目录下的文件和文件夹的详细信息
ll /var/www/html/media

aws.mp4

7、在html网页中调用aws.mp4文件

1
2
3
4
5
6
# 新建index.html文件
vim /var/www/html/index.html
# 编写代码
<video width="800" height="450" controls>
<source src="media/aws.mp4">
</video>