nfs服务

一、nfs服务介绍

1.什么是nfs

共享存储,文件服务器

2.基本概述

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

3.为什么使用NFS

1.实现多态服务器之间数据共享
2.实现多态服务器之间数据一致

二、NFS应用

1.没有NFS时

1.A用户上传图片经过负载均衡,负载均衡将上传请求调度至WEB1服务器上。
2.B用户访问A用户上传的图片,此时B用户被负载均衡调度至WEB2上,因为WEB2上没有这张图片,所以B用户无法看到A用户传的图片。

 

2.如果有NFS

1.A用户上传图片无论被负载均衡调度至WEB1还是WEB2, 最终数据都被写入至共享存储
2.B用户访问A用户上传图片时,无论调度至WEB1还是WEB2,最终都会上共享存储访问对应的文件,这样就可以访问到资源了

03 架构——文件存储NFS_服务端

 

3.NFS原理

vim /etc/exports
/data 172.16.1.0/24(rw,sync,all_squash)

 

 

03 架构——文件存储NFS_html_02

 

1.用户访问NFS客户端,将请求转化为函数
2.NFS通过TCP/IP连接服务端
3.NFS服务端接收请求,会先调用portmap进程进行端口映射
4.Rpc.nfsd进程用于判断NFS客户端能否连接服务端;
5.Rpc.mount进程用于判断客户端对服务端的操作权限
6.如果通过权限验证,可以对服务端进行操作,修改或读取

三、NFS实践——部署NFS服务

1.环境准备

主机        ip         角色
web01 172.16.1.7 NFS客户端
nfs 172.16.1.31 NFS服务端

2.部署NFS服务

服务端:
1.安装nfs服务
rpcbind是为nfs提供网络,为了连接服务端的进程
nfs-utils 是为了使用showmount命令
[root@nfs ~]# yum install nfs-utils rpcbind -y
2.关闭防火墙和SELINUX
[root@nfs ~]# setenforce 0
[root@nfs ~]# systemctl stop firewalld
3.创建一个目录,用于存放文件的仓库
[root@nfs ~]# mkdir /data
4.创建一个系统用户,用于验证权限(权限验证时真正验证的是UID)
[root@nfs ~]# useradd www -r -M -s /sbin/nologin -u 996
5.修改NFS的配置文件(作用是指定NFS的仓库及权限)
NFS的配置文件:/etc/exports
[root@nfs ~]# vi /etc/exports
/data 172.16.1.0/20(rw,all_squash,sync)
[仓库地址][可以访问的ip段](权限)

[root@nfs data]# vim /etc/exports
[root@nfs data]# cat /etc/exports
/data 172.16.1.0/20(rw,all_squash,sync)

控制NFS读写权限
rw 读写权限 (常用)
ro 只读权限 (不常用)

控制访问NFS时,NFS基于的权限

root_squash 当NFS客户端以root管理员访问时,映射为NFS服务器的匿名用户 (不常用)
no_root_squash 当NFS客户端以root管理员访问时,映射为NFS服务器的root管理员 (不常用)
all_squash 无论NFS客户端使用什么账户访问,均映射为NFS服务器的匿名用户 (常用)
no_all_squash 无论NFS客户端使用什么账户访问,都不进行压缩 (不常用)

控制NFS同步方式
sync 同时将数据写入到内存与硬盘中,保证不丢失数据 (常用),但是会产生延时
async 优先将数据保存到内存,然后再写入硬盘;这样效率更高,但可能会丢失数据 (不常用)

控制默认的用户(非必须)
anonuid 配置all_squash使用,指定NFS的用户UID,必须存在系统 (常用)
anongid 配置all_squash使用,指定NFS的用户UID,必须存在系统 (常用)

6.启动NFS服务
[root@nfs data]# systemctl start nfs-server rpcbind
7.查看NFS的挂载点是否设置成功
# 查看指定服务器的挂载点
[root@nfs data]# showmount -e 172.16.1.31
Export list for 172.16.1.31:
/data 172.16.1.0/20

# 查看本机的挂载点
[root@nfs data]# showmount -e
Export list for nfs:
/data 172.16.1.0/20

8.给服务端设置权限
[root@nfs data]# chown nfsnobody.nfsnobody /data/

客户端:
9、挂载使用(客户端必须安装nfs-utils)
[root@web01 ~]# yum install nfs-utils -y
[root@web01 ~]# mount -t nfs 172.16.1.31:/data /opt

挂载不上:
1、selinux没关闭
2、防火墙没有关闭
3、nfs客户端未安装
[root@web01 ~]# yum install nfs-utils -y

没权限:
nfs服务端是root权限
[root@nfs data]# chown nfsnobody.nfsnobody /data/

 03 架构——文件存储NFS_客户端_03

 

03 架构——文件存储NFS_php_04

 

 

3.NFS挂载与卸载

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

NFS挂载:客户端的目录仅仅是服务端共享目录的一个入口,可以简单理解为软连接,真正的数据全都是存储在服务端的目录,客户端写入的数据也是在服务端存储的

注意事项:
1.挂载目录后,原来文件下的内容不会丢失,仅仅是被遮盖住,取消挂载后仍然存在
2.取消挂载时不要在挂载的目录下面操作,否则会提示忙碌,切换到其他目录再进行卸载
3.挂载时如果在挂载的目录下,还是可以看到挂载前目录下的文件,需要重新进入目录才会显示挂载后目录的内容

 

03 架构——文件存储NFS_服务端_05

 

03 架构——文件存储NFS_客户端_06

 

03 架构——文件存储NFS_服务器_07

 

4.NFS服务的组成

NFS类似于磁盘的方式,挂载到客户端的目录上

5.NFS案列—php案列

1.安装web服务软件
[root@web01 ~]# yum install -y httpd php

2.上传代码
[root@web01 ~]# cd /var/www/html
[root@web01 html]# vi index.php
<?php
phpinfo();

3.开启web服务
[root@web01 html]# systemctl start httpd

4.输入192.168.15.7即可访问php页面

6.NFS案例——将nfs中的图片,共享到web01上来访问

			1、将图片上传至NFS服务器(rz直接拉到nfs)
[root@nfs data]# ll
-rw-r--r-- 1 root root 105736 Oct 20 16:58 123.jpg


2、将NFS挂载到web网站对应目录

[root@web01 html]mkdir img
[root@web01 html]# mount -t nfs 172.16.1.31:/data /var/www/html/img

3、上传代码

[root@web01 html]# vim index.html
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<img src="./img/123.png" alt="">
</body>
</html>

4、浏览器访问192.168.15.7

7.考试文件上传(注意:关闭selinux setenforce 0)

 

1.准备服务器

 

    安装web服务软件

     [root@web02 ~]# yum install httpd php -y

 

03 架构——文件存储NFS_php_08

 

2.代码上传

直接解压——新建文件传输拖动解压之后的文件夹kaoshi
[root@web02 kaoshi]# cd kaoshi/
[root@web02 kaoshi]# ll
total 52
-rw-r--r-- 1 root root 38772 Oct 20 17:45 bg.jpg
-rw-r--r-- 1 root root 2633 Oct 20 17:45 index.html
-rw-r--r-- 1 root root 52 Oct 20 17:45 info.php
-rw-r--r-- 1 root root 1192 Oct 20 17:45 upload_file.php

3.将代码复制到网站根目录(/var/www/html)

[root@web02 kaoshi]# cp -r ./*  /var/www/html/

4.开启web服务

[root@web02 html]# systemctl start httpd

5.统一用户

ps -ef |grep httpd   #查看用户是否是www
1.[root@web02 html]# useradd www -r -M -s /sbin/nologin -u 996
2.修改httpd的启动用户(rpm -qc httpd 可以查看配置文件)
[root@web02 ~]# vi /etc/httpd/conf/httpd.conf
User www
Group www
3.重启WEB服务软件
[root@web02 ~]# systemctl restart httpd
4.修改站点目录的用户
[root@web02 ~]# chown -R www.www /var/www/html
5.关闭selinux
setenforce 0
6.上传的文件共享到web01中
[root@web02 html]# yum install nfs-utils -y
[root@web02 html]# mount -t nfs 172.16.1.31:/data /var/www/html/upload
7.上传测试

 


 

03 架构——文件存储NFS_服务器_09