第四章 NFS服务相关介绍
一、NFS服务介绍
1.什么是NFS?
是一个共享存储,文件服务器
2.NFS基本概述
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,最终都会上共享存储访问对应的文件,这样就可以访问到资源了
三、NFS原理
1.用户进程访问NFS客户端目录
2.NFS将请求转化成函数
3.NFS客户端与服务端建立TCP\IP连接
4.NFS服务端接收请求,会调用portmap进行端口映射
5.服务端rpc.nfsd进程进行判断NFS客户端是否可以连接
6.如果可以连接,rpc.mount进程会对客户端进行判断允许的操作
7.都通过则可以对服务端磁盘进行操作

四、NFS实践
| 主机 | IP | 角色 |
| nfs | 172.16.1.31 | 服务端 |
| web01 | 172.16.1.7 | 客户端 |
1.服务端
1.关闭防火墙
[root@nfs ~]# systemctl stop firewalld
[root@nfs ~]# systemctl disable firewalld
2.关闭selinux
[root@nfs ~]# setenforce 0
[root@nfs ~]# vim /etc/selinux/config
SELINUX=disabled
3.安装NFS和rpcbind
[root@nfs ~]# yum install -y nfs-utils rpcbind
#如果是centos6需要单独安装rpcbind,centos7可以不单独安装
4.配置
NFS服务程序的配置文件为/etc/exports,需要严格按照共享目录的路径 允许访问的NFS客户端(共享权限参数)格式书写,定义要共享的目录与相应的权限,具体书写方式如下图所示。
[root@nfs ~]# vim /etc/exports
/data 172.16.1.0/24(rw,sync,all_squash)
5.创建数据目录
[root@nfs ~]# mkdir /data
6.启动NFS服务
[root@nfs ~]# systemctl start rpcbind nfs-server
#如果是centos6,启动时必须先启动rpcbind,centos7会自动启动
#验证启动
[root@nfs ~]# ps -ef | grep nfs
7.验证DFS配置
[root@nfs ~]# cat /var/lib/nfs/etab
/data 172.16.1.0/24(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,all_squash,no_subtree_check,secure_locks,acl,no_pnfs,anonuid=65534,anongid=65534,sec=sys,rw,secure,root_squash,all_squash)
2.客户端
1.关闭防火墙
[root@web01 ~]# systemctl stop firewalld
[root@web01~]# systemctl disable firewalld
2.关闭selinux
[root@web01 ~]# setenforce 0
[root@web01 ~]# vim /etc/selinux/config
SELINUX=disabled
3.安装NFS和rpcbind
[root@web01 ~]#yum install -y nfs-utils rpcbind
4.查看挂载点
[root@web01 ~]# showmount -e 172.16.1.31
Export list for 172.16.1.31:
/data 172.16.1.0/24
5.启动rpcbind
[root@web01 ~]# systemctl start rpcbind
6.挂载
[root@web01 ~]# mkdir /data
[root@web01 ~]# mount -t nfs 172.16.1.31:/data /data
#验证
[root@web01 ~]# df -h
172.16.1.31:/data 98G 1.2G 97G 2% /data
7.写入文件测试
[root@web01 ~]# cd /data
[root@web01 /data]# mkdir dir
mkdir: cannot create direct‘dir’: Permission denied
#权限不足,服务端data目录权限是root
#服务端修改权限
[root@nfs ~]# chown -R nfsnobody.nfsnobody /data/
#客户端再次写入数据
[root@web01 /data]# mkdir dir
[root@web01 /data]# ll
total 0
drwxr-xr-x 2 nfsnobody nfsnobody 6 Aug 13 23:43 dir
五、NFS服务的使用
1.NFS服务/etc/exports配置文件
| 语法 | /data | 172.16.1.0/24 | (rw,sync,all_squash) |
| 语法含义 | 共享的目录 | 允许连接的客户端网段 | 允许的操作(参数1,参数2) |
2.挂载
NFS客户端的配置步骤也十分简单。先使用showmount命令,查询NFS服务器的远程共享信息,其输出格式为“共享的目录名称 允许使用客户端地址”。
3.查看挂载点
[root@web01 ~]# showmount -e 172.16.1.31
Export list for 172.16.1.31:
/data 172.16.1.0/24
4.挂载命令
[root@web01 ~]# mount -t nfs 172.16.1.31:/data /data
mount #挂载命令
-t #指定挂载的文件类型
nfs #挂载类型是NFS
172.16.1.31 #远端挂载的主机IP
:/data #远端挂载的主机目录
/data #本地要挂载的目录
5.卸载命令
[root@web01 ~]# umount 172.16.1.31:/data
[root@web01 ~]# umount /data
6.卸载时注意事项
#卸载时,不要在要卸载的目录里面进行卸载
[root@web01 /data]# umount /data
umount.nfs4: /data: device is busy
#强制卸载
[root@web01 /data]# umount -lf /data
#注意
1)卸载时,不要在要卸载的目录里面进行卸载
2)执行挂载目录时,本地要挂载的目录尽量不要有数据,如果有数据,不会丢失只是被盖住,取消挂载后仍然存在
六、NFS配置详解
| nfs共享参数 | 参数作用 |
|---|---|
| rw(常用) | 读写权限 |
| ro(不常用) | 只读权限 |
| root_squash(不常用) | 当NFS客户端以root管理员访问时,映射为NFS服务器的匿名用户 |
| no_root_squash(不常用) | 当NFS客户端以root管理员访问时,映射为NFS服务器的root管理员 |
| all_squash(常用) | 无论NFS客户端使用什么账户访问,均映射为NFS服务器的匿名用户 |
| no_all_squash(不常用) | 无论NFS客户端使用什么账户访问,都不进行压缩 |
| sync(常用) | 同时将数据写入到内存与硬盘中,保证不丢失数据 |
| async(不常用) | 优先将数据保存到内存,然后再写入硬盘;这样效率更高,但可能会丢失数据 |
| anonuid(常用) | 配置all_squash使用,指定NFS的用户UID,必须存在系统 |
| anongid(常用) | 配置all_squash使用,指定NFS的用户UID,必须存在系统 |
七、NFS服务实战(搭建上传作业页面)
1.需求
1.部署NFS客户端和服务端
2.搭建web01和web02的交作业页面
3.实现web01与web02的文件共享
2.准备服务器
| 主机 | 外网IP |
|---|---|
| web01 | 10.0.0.7 |
| web02 | 10.0.0.8 |
| nfs | 10.0.0.31 |
3.web01客户端
1.关闭防火墙
[root@web01 ~]# systemctl stop firewalld
[root@web01 ~]# systemctl disable firewalld
2.关闭selinux
[root@web01 ~]# setenforce 0
[root@web01 ~]# vim /etc/selinux/config
SELINUX=disabled
3.安装http服务和php服务
[root@web01 ~]# yum -y install httpd php
4.上传代码到本地,解压至/var/www/html下
[root@web01 ~]# rz -bye
[root@web01 ~]# ll
-rw-r--r-- 1 root root 26995 Aug 13 16:42 kaoshi.zip
[root@web01 ~]# unzip kaoshi.zip -d /var/www/html/
Archive: kaoshi.zip
inflating: /var/www/html/info.php
inflating: /var/www/html/bg.jpg
inflating: /var/www/html/index.html
inflating: /var/www/html/upload_file.php
5.授权站点目录
[root@web01 ~]# chown -R apache:apache /var/www/html/
6.重启http服务
[root@web01 ~]# systemctl restart httpd
7.验证http服务
[root@web01 ~]# ps aux |grep http
root 8715 0.2 0.5 314580 12132 ? Ss 19:27 0:00 /usr/sbin/httpd -DFOREGROUND
apache 8717 0.0 0.3 314712 6160 ? S 19:27 0:00 /usr/sbin/httpd -DFOREGROUND
apache 8718 0.0 0.3 314712 6160 ? S 19:27 0:00 /usr/sbin/httpd -DFOREGROUND
apache 8719 0.0 0.3 314712 6160 ? S 19:27 0:00 /usr/sbin/httpd -DFOREGROUND
apache 8720 0.0 0.3 314712 6160 ? S 19:27 0:00 /usr/sbin/httpd -DFOREGROUND
apache 8721 0.0 0.3 314712 6160 ? S 19:27 0:00 /usr/sbin/httpd -DFOREGROUND
root 8727 0.0 0.0 112708 976 pts/1 S+ 19:28 0:00 grep --color=auto http
8.通过浏览器访问10.0.0.7出现上传作业界面
4.web02客户端
1.关闭防火墙
[root@web02 ~]# systemctl stop firewalld
[root@web02 ~]# systemctl disable firewalld
2.关闭selinux
[root@web02 ~]# setenforce 0
[root@web02 ~]# vim /etc/selinux/config
SELINUX=disabled
3.安装http服务和php服务
[root@web02 ~]# yum -y install httpd php
4.上传代码到本地,解压至/var/www/html下
[root@web02 ~]# rz -bye
[root@web02 ~]# ll
-rw-r--r-- 1 root root 26995 Aug 13 16:42 kaoshi.zip
[root@web02 ~]# unzip kaoshi.zip -d /var/www/html/
Archive: kaoshi.zip
inflating: /var/www/html/info.php
inflating: /var/www/html/bg.jpg
inflating: /var/www/html/index.html
inflating: /var/www/html/upload_file.php
5.授权站点目录
[root@web02 ~]# chown -R apache:apache /var/www/html/
6.重启http服务
[root@web02 ~]# systemctl restart httpd
7.验证http服务
[root@web02 ~]# ps aux |grep http
root 8755 0.2 0.5 314580 12128 ? Ss 19:34 0:00 /usr/sbin/httpd -DFOREGROUND
apache 8756 0.0 0.3 314712 6160 ? S 19:34 0:00 /usr/sbin/httpd -DFOREGROUND
apache 8757 0.0 0.3 314712 6160 ? S 19:34 0:00 /usr/sbin/httpd -DFOREGROUND
apache 8758 0.0 0.3 314712 6160 ? S 19:34 0:00 /usr/sbin/httpd -DFOREGROUND
apache 8759 0.0 0.3 314712 6160 ? S 19:34 0:00 /usr/sbin/httpd -DFOREGROUND
apache 8760 0.0 0.3 314712 6160 ? S 19:34 0:00 /usr/sbin/httpd -DFOREGROUND
root 8764 0.0 0.0 112708 972 pts/1 S+ 19:34 0:00 grep --color=auto http
8.通过浏览器访问10.0.0.8出现上传作业界面
5.测试上传文件
在10.0.0.7的服务器上传 1_web01.jpg
在10.0.0.8的服务器上传 2_web02.jpg
#web01访问测试
http://10.0.0.7/upload/1_web01.jpg 访问成功
http://10.0.0.7/upload/2_web02.jpg 访问失败
#web02访问测试
http://10.0.0.8/upload/1_web01.jpg 访问失败
http://10.0.0.8/upload/2_web02.jpg 访问成功
#web01上传文件,web02无法访问
#web02上传文件,web01无法访问
6.NFS服务端
1.关闭防火墙
[root@nfs ~]#systemctl stop firewalld
[root@nfs ~]# systemctl disable firewalld
2.关闭selinux
[root@nfs ~]# setenforce 0
[root@nfs ~]# vim /etc/selinux/config
SELINUX=disabled
3.安装nfs服务和rpcbind
[root@nfs ~]# yum -y install nfs-utils rpcbind
4.编辑配置文件
[root@nfs ~]# vim /etc/exports
/web/data 172.16.1.0/24(rw,sync,all_squash)
5.创建数据目录
[root@nfs ~]# mkdir -p /web/data
6.启动NFS服务
[root@nfs ~]# systemctl start rpcbind nfs-server
#验证启动
[root@nfs ~]# ps aux |grep nfs
root 8983 0.0 0.0 0 0 ? S< 19:59 0:00 [nfsd4_callbacks]
root 8989 0.0 0.0 0 0 ? S 19:59 0:00 [nfsd]
root 8990 0.0 0.0 0 0 ? S 19:59 0:00 [nfsd]
root 8991 0.0 0.0 0 0 ? S 19:59 0:00 [nfsd]
root 8992 0.0 0.0 0 0 ? S 19:59 0:00 [nfsd]
root 8993 0.0 0.0 0 0 ? S 19:59 0:00 [nfsd]
root 8994 0.0 0.0 0 0 ? S 19:59 0:00 [nfsd]
root 8995 0.0 0.0 0 0 ? S 19:59 0:00 [nfsd]
root 8996 0.0 0.0 0 0 ? S 19:59 0:00 [nfsd]
root 9007 0.0 0.0 112708 976 pts/1 R+ 19:59 0:00 grep --color=auto nfs
7.验证DFS配置
[root@nfs ~]# cat /var/lib/nfs/etab
/web/data 172.16.1.0/24(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,all_squash,no_subtree_check,secure_locks,acl,no_pnfs,anonuid=65534,anongid=65534,sec=sys,rw,secure,root_squash,all_squash)
8.服务端修改权限
[root@nfs ~]# chown -R nfsnobody:nfsnobody /web/
7.实现文件共享
1.web01客户端
1)安装nfs服务和rpcbind
[root@web01 ~]#yum -y install nfs-utils rpcbind
2)查看挂载点
[root@web01 ~]# showmount -e 172.16.1.31
Export list for 172.16.1.31:
/web/data 172.16.1.0/24
3)启动rpcbind
[root@web01 ~]# systemctl start rpcbind
4)挂载
[root@web01 ~]# mount -t nfs 172.16.1.31:/web/data /var/www/html/upload
#验证
[root@web01 ~]# df -h
172.16.1.31:/web/data 98G 1.6G 96G 2% /var/www/html/upload
5)写入文件测试
[root@web01 ~]# cd /var/www/html/upload/
[root@web01 /var/www/html/upload]# touch 1.txt
6)服务端查看/web/data目录
[root@nfs ~]# ll /web/data/
total 0
-rw-r--r-- 1 nfsnobody nfsnobody 0 Aug 13 20:31 1.txt
2.web02客户端
1)安装nfs服务和rpcbind
[root@web02 ~]#yum -y install nfs-utils rpcbind
2)查看挂载点
[root@web02 ~]# showmount -e 172.16.1.31
Export list for 172.16.1.31:
/web/data 172.16.1.0/24
3)启动rpcbind
[root@web02 ~]# systemctl start rpcbindsystemctl start rpcbind
4)挂载
[root@web02 ~]# mount -t nfs 172.16.1.31:/web/data /var/www/html/upload
#验证
[root@web01 ~]# df -h
172.16.1.31:/web/data 98G 1.7G 96G 2% /var/www/html/upload
5)写入文件测试
[root@web02 ~]# cd /var/www/html/upload/
[root@web02 /var/www/html/upload]# touch 2.txt
6)服务端查看/web/data目录
[root@nfs ~]# ll /web/data/
total 0
-rw-r--r-- 1 nfsnobody nfsnobody 0 Aug 13 20:31 1.txt
-rw-r--r-- 1 nfsnobody nfsnobody 0 Aug 13 20:36 2.txt
8.再次测试
#重新上传图片
在10.0.0.7的服务器上传 1_web01.jpg
在10.0.0.8的服务器上传 2_web02.jpg
#web01访问测试
http://10.0.0.7/upload/1_web01.gif 访问成功
http://10.0.0.7/upload/2_web02.jpg 访问成功
#web02访问测试
http://10.0.0.8/upload/1_web01.gif 访问成功
http://10.0.0.8/upload/2_web02.jpg 访问成功
#web01上传文件,web02可以访问
#web02上传文件,web01可以访问
第四章 NFS服务相关介绍的更多相关文章
- Vue 封装axios(四种请求)及相关介绍(十三)
Vue 封装axios(四种请求)及相关介绍 首先axios是基于promise的http库 promise是什么? 1.主要用于异步计算 2.可以将异步操作队列化,按照期望的顺序执行,返回符合预期的 ...
- 第四十四章 微服务CICD(6)- gitlab + jenkins + docker + k8s
总体流程: 在开发机开发代码后提交到gitlab 之后通过webhook插件触发jenkins进行构建,jenkins将代码打成docker镜像,push到docker-registry 之后将在k8 ...
- 一起来学Spring Cloud | 第四章:服务消费者 ( Feign )
上一章节,讲解了SpringCloud如何通过RestTemplate+Ribbon去负载均衡消费服务,本章主要讲述如何通过Feign去消费服务. 一.Feign 简介: Feign是一个便利的res ...
- 【运维监控】四款云服务监控工具介绍:Nagios 、 ganglia、zabbix、onealert
在我们日常的工作中,有时候需要监控和管理平台的运行状况,而服务运行是否存在异常,是否有软硬件bug等,均需要第一时间知道.对服务状态了如指掌,是一个很重要的事情.那么这个如何做到呢,我们之前在进行私有 ...
- 白话SpringCloud | 第四章:服务消费者(RestTemple+Ribbon+Feign)
前言 上两章节,介绍了下关于注册中心-Eureka的使用及高可用的配置示例,本章节开始,来介绍下服务和服务之间如何进行服务调用的,同时会讲解下几种不同方式的服务调用. 一点知识 何为负载均衡 实现的方 ...
- Docker | 第四章:Dockerfile简单介绍及使用
前言 前一章节,介绍了Docker常用的命令.在基本使用上,熟悉这些常用的命令基本上就够了.但在一些场景下,比如在部署SpringBoot应用时,通常我们都是打成Jar包,然后利用java命令进行运行 ...
- 第二十四章 Find命令详细介绍
一.Find 概述 可以根据文件的名称.文件大小.文件的修改时间.文件的类型.文件的权限.文件的属主属组.文件的目录层级进行查找 Find的语法: find [-H] [-L] [-P] [-Olev ...
- Linux学习-NFS服务
一.NFS服务相关介绍 1.NFS简介 NFS (Network File System) 网络文件系统,基于内核的文件系统.Sun公司开发,通过使用NFS,用户和程序可以像访问本地文件一样访问远端系 ...
- NFS服务
第1章 NFS介绍 1.1 NFS的概念 NFS是Network File System的缩写,即网络文件系统,它的主要功能是通过网络(一般是局域网)让不同的主机系统之间可以共享文件或目录.NFS客户 ...
随机推荐
- [二叉树-根到叶的子路径]路径总和 III (两层递归)
题目437. 路径总和 III 给定一个二叉树,它的每个结点都存放着一个整数值. 找出路径和等于给定数值的路径总数. 路径不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父 ...
- [LeetCode]Mysql小本本
常用方法 累加型题目,可以考虑使用笛卡尔积进行自表连接,连接后的表进行where条件进行筛选.group by分组操作. union:需要把两列作一列可以用union,union的两张表查询的字段不一 ...
- Spring Boot项目集成flyway
一.为什么要使用flyway Flyway的定位:数据库的版本控制. 用一种简单.干净的方案,帮助用户完成数据库迁移的工作.使用Flyway,用户可以从任意一个数据库版本迁移到最新版本,简单而且有 ...
- turtle空间坐标系
利用空间坐标改变行进 以海龟的角度来看,无论往那个方向运行,都叫正方向 turtle.fd向海龟的正前方运行,turtle.bk向反方向运行
- 6.Exchanger-交换机
- Android开发中导入第三方库所遇问题记录
1.重复循环依赖的问题 (1)需求 如下图所示: 在Android 项目中,采用模块化开发,一个是主跑application--Mudule A,另外一个是library--Library B 1)M ...
- java进阶(23)--List接口
一.基本概念 1.有序可重复 2.有下标 3.包含ArraList.LinkedList.Vector 二.List中特有的方法 且常用 (以下军均为数组通用方法) 1.void add(int ...
- GAN生成的评价指标 Evaluation of GAN
传统方法中,如何衡量一个generator ?-- 用 generator 产生数据的 likelihood,越大越好. 但是 GAN 中的 generator 是隐式建模,所以只能从 P_G 中采样 ...
- 我竟在arm汇编除法算法里找到了leetcode某道题的解法
今天讲讲arm汇编中除法的底层实现.汇编代码本身比较长了,如需参考请直接拉到文末. 下面我直接把arm的除法算法的汇编代码转译成C语言的代码贴出来,并进行解析. 因为篇幅有限,所以在此只解析无符号整型 ...
- python中的filter、map、reduce、apply用法总结
1. filter 功能: filter的功能是过滤掉序列中不符合函数条件的元素,当序列中要删减的元素可以用某些函数描述时,就应该想起filter函数. 调用: filter(function,seq ...