一、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服务相关介绍的更多相关文章

  1. Vue 封装axios(四种请求)及相关介绍(十三)

    Vue 封装axios(四种请求)及相关介绍 首先axios是基于promise的http库 promise是什么? 1.主要用于异步计算 2.可以将异步操作队列化,按照期望的顺序执行,返回符合预期的 ...

  2. 第四十四章 微服务CICD(6)- gitlab + jenkins + docker + k8s

    总体流程: 在开发机开发代码后提交到gitlab 之后通过webhook插件触发jenkins进行构建,jenkins将代码打成docker镜像,push到docker-registry 之后将在k8 ...

  3. 一起来学Spring Cloud | 第四章:服务消费者 ( Feign )

    上一章节,讲解了SpringCloud如何通过RestTemplate+Ribbon去负载均衡消费服务,本章主要讲述如何通过Feign去消费服务. 一.Feign 简介: Feign是一个便利的res ...

  4. 【运维监控】四款云服务监控工具介绍:Nagios 、 ganglia、zabbix、onealert

    在我们日常的工作中,有时候需要监控和管理平台的运行状况,而服务运行是否存在异常,是否有软硬件bug等,均需要第一时间知道.对服务状态了如指掌,是一个很重要的事情.那么这个如何做到呢,我们之前在进行私有 ...

  5. 白话SpringCloud | 第四章:服务消费者(RestTemple+Ribbon+Feign)

    前言 上两章节,介绍了下关于注册中心-Eureka的使用及高可用的配置示例,本章节开始,来介绍下服务和服务之间如何进行服务调用的,同时会讲解下几种不同方式的服务调用. 一点知识 何为负载均衡 实现的方 ...

  6. Docker | 第四章:Dockerfile简单介绍及使用

    前言 前一章节,介绍了Docker常用的命令.在基本使用上,熟悉这些常用的命令基本上就够了.但在一些场景下,比如在部署SpringBoot应用时,通常我们都是打成Jar包,然后利用java命令进行运行 ...

  7. 第二十四章 Find命令详细介绍

    一.Find 概述 可以根据文件的名称.文件大小.文件的修改时间.文件的类型.文件的权限.文件的属主属组.文件的目录层级进行查找 Find的语法: find [-H] [-L] [-P] [-Olev ...

  8. Linux学习-NFS服务

    一.NFS服务相关介绍 1.NFS简介 NFS (Network File System) 网络文件系统,基于内核的文件系统.Sun公司开发,通过使用NFS,用户和程序可以像访问本地文件一样访问远端系 ...

  9. NFS服务

    第1章 NFS介绍 1.1 NFS的概念 NFS是Network File System的缩写,即网络文件系统,它的主要功能是通过网络(一般是局域网)让不同的主机系统之间可以共享文件或目录.NFS客户 ...

随机推荐

  1. oracle之序列

    序列 15.1 序列是生成唯一整数值的结构,它的典型用途是用于主键值. 结合真题演示伪列nextval, currval用法 CREATE SEQUENCE dept_deptnoINCREMENT ...

  2. C、算法、操作系统杂记《malloc 0大小是什么行为》

    linux手册上的说明 If size is 0, then malloc() returns either NULL, or a unique pointer value that can late ...

  3. 分布式文件系统之MogileFS的安装使用

    一.简介 MogileFS是一个开源的分布式文件存储系统,由LiveJournal旗下的Danga Interactive公司开发:它主要由三部分组成,第一部分是server端,server端主要包括 ...

  4. 360 Atlas生产环境使用心得

    一.Atlas介绍 Atlas是360开源的一个Mysql Proxy,以下是官方介绍: Atlas是由 Qihoo 360公司Web平台部基础架构团队开发维护的一个基于MySQL协议的数据中间层项目 ...

  5. archaius(1) 概述

    archaius作为配置管理工具,内部主要定义了下几个模块: 配置源 配置源的主要功能是将配置从目标位置加载到内存中.详见:archaius源码分析之配置源 配置管理器 配置管理器的主要功能是管理内存 ...

  6. C#实现创建、编辑NX表达式

    在NX8.5中使用C#编辑表达式中有个坑,part.Expressions.Edit该方法鲁棒性很差,当表达式有错时也能编辑成功(手动在NX中增加错误表达式会有弹框,无法创建,而该方法却可以,疑是bu ...

  7. C语言入门经典书目推荐--转

    国内良莠不齐的C语言教程数不胜数,同名如"C程序设计""C语言程序设计""C语言程序设计教程"的都多如牛毛,这些不知名的就不予考虑了,要看就 ...

  8. Ribbon源码分析(一)-- RestTemplate 以及自定义负载均衡算法

    如果只是想看ribbon的自定义负载均衡配置,请查看: https://www.cnblogs.com/yangxiaohui227/p/13186004.html 注意: 1.RestTemplat ...

  9. 报表和仪表板在线设计器Stimulsoft Designer 最新版发布

    Stimulsoft Designer是统一的Stimulsoft框架的一部分,该框架包括用于生成报表和分析数据的引擎.报表设计器和查看器. 您可以在计算机上创建报表,继续使用在线设计器在云中对其进行 ...

  10. 【extern】【static】

    C语言根据变量的生存周期来划分,可以分为静态存储方式和动态存储方式. 静态存储方式:是指在程序运行期间分配固定的存储空间的方式.静态存储区中存放了在整个程序执行过程中都存在的变量,如全局变量. 动态存 ...