第35章 NFS共享存储

35.1 NFS基本概述

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

35.1.1 为什么要使用共享存储

1.实现多台服务器之间数据共享

2.实现多台服务器之间数据一致

35.1.2 NFS应用场景

实际应用中,共享存储是重要的组成部分。如果没有共享存储,网站就变成了单点的架构

应用场景1——集群没有共享存储

1、A用户上传图片经过负载均衡,负载均衡将上传请求调度至WEB1服务器上。

2、B用户访问A用户上传的图片,此时B用户被负载均衡调度至WEB2上,因为WEB2上没有这张图片,所以B用户无法看到A用户传的图片。

应用场景2——集群有共享存储

1、A用户上传图片无论被负载均衡调度至WEB1还是WEB2, 最终数据都被写入至共享存储。

2、B用户访问A用户上传图片时,无论调度至WEB1还是WEB2,最终都会上共享存储访问对应的文件,这样就可以访问到资源了。

35.1.3 NFS实现原理

1、假如访问的是NFS客户端,先调用不同的函数(例如Read()函数,读功能、Write()函数,写功能、Create()函数,创建功能、Remove()函数、删除功能、Rename()函数,重命名功能)对数据进行处理。

2、调用完函数后,首先NFS客户端会建立TCP连接,通过TCP/IP的方式传递给NFS服务端,连上远端的服务器。

3、接着NFS服务端接收到请求后,NFS服务器会做3步系列操作(环环相扣,先映射端口,然后验证是否能登录服务器,最后验证文件使用权限),如下: 首先,调用portmap进程进行端口映射。

接着,调用Rpc.nfsd进程来验证NFS客户端是否拥有对应的权限连接NFS服务端。

最后,调用Rpc.mount进程来验证客户端是否拥有对应的文件使用权限;

4、idmap进程实现用户映射和压缩

5、最后NFS服务端会将对应请求的函数转换为本地能识别的命令,传递至内核,由内核驱动硬件。

35.2 NFS共享实战

35.2.1环境准备
主机名 角色 外网IP 内网IP
backup nfs的客户端 10.0.0.41 172.16.1.41
nfs nfs的服务端 10.0.0.31 172.16.1.31
web01 nfs的客户端 10.0.0.7 172.16.1.7
35.2.2 服务端nfs01  关闭防火墙和selinux防火墙
#1.关闭Firewalld防火墙
[root@nfs ~]# systemctl disable firewalld
[root@nfs ~]# systemctl stop firewalld

#2.关闭selinux防火墙
[root@nfs ~]# sed -ri '#^SELINUX=#cSELINUX=Disabled' /etc/selinux/config
[root@nfs ~]# setenforce 0
35.2.3  服务端nfs01  安装rpcbind服务,服务端和客户端都要安装
#服务端nfs安装rpcbind服务
[root@nfs ~]# yum -y install nfs-utils rpcbind

#客户端web01安装rpcbind服务
[root@web01 ~]# yum -y install nfs-utils rpcbind

#客户端backup安装rpcbind服务
[root@backup ~]# yum -y install nfs-utils rpcbind
35.2.4  服务端nfs01   启动rpcbind
#服务端nfs启动rpcbind
[root@nfs01 ~]# systemctl start rpcbind

#客户端web01启动rpcbind
[root@web01 ~]# systemctl start rpcbind

#客户端backup启动rpcbind
[root@backup ~]# systemctl start rpcbind
35.2.5  服务端nfs01    开机自启rpcbind
#服务端nfs设置开机自启rpcbind
[root@nfs01 ~]# systemctl start rpcbind

#客户端web01设置开机自启rpcbind
[root@web01 ~]# systemctl start rpcbind

#客户端backup设置开机自启rpcbind
[root@backup ~]# systemctl start rpcbind
35.2.6   服务端nfs01   检查
[root@web01 ~]ll /etc/systemd/system/multi-user.target.wants/
[root@backup ~]# ll /etc/systemd/system/multi-user.target.wants/
[root@nfs01 ~]# ll /etc/systemd/system/multi-user.target.wants/

#检测端口和进程
[root@nfs ~]# ps -ef | grep rpc
rpc       9152     1 0 21:42 ?       00:00:00 /sbin/rpcbind -w
root       9173   8900 0 21:42 pts/0   00:00:00 grep --color=auto rpc
35.2.7   服务端nfs01    配置服务端配置文件
#统一客户端与服务端的用户
#服务端
[root@nfs01 ~]# vim /etc/exports
/data 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)

#服务端,创建/data目录
[root@nfs ~]# mkdir /data

#服务端,创建www用户和组(所有客户端)
[root@nfs ~]# groupadd www -g 666
[root@nfs ~]# useradd www -u 666 -g 666

#服务端,授权/data目录给www用户
[root@nfs ~]# chown -R www.www /data

#服务端,启动rpcbind服务和重启rpcbind nfs-server服务
[root@nfs ~]# systemctl start rpcbind
[root@nfs ~]# systemctl restart rpcbind nfs-server
35.2.8 部署客户端 web01
#创建目录
[root@web01 ~]# mkdir wxg1
35.2.9 客户端web01,查看可挂载点
[root@web01 ~]# showmount -e 172.16.1.31
Export list for 172.16.1.31:
/data 172.16.1.0/24
35.2.10 客户端web01,挂载共享目录
[root@web01 ~]# mount -t nfs 172.16.1.31:/data /root/wxg1

#测试
[root@web01 ~]# echo 123 > wxg1/1.txt

#可以看到nfs服务端上已存在1.txt文件
[root@nfs ~]# ll /data
total 4
-rw-r--r-- 1 www www 4 Aug 6 22:06 1.txt
35.2.11 客户端backup,测试--文件共享
#两台客户端安装httpd服务
[root@web01 ~]# yum install -y httpd php
[root@backup ~]# yum install -y httpd php

#启动httpd服务
[root@backup ~]# systemctl start httpd

[root@backup ~]# rpm -ql httpd #查看httpd相关目录在哪儿
[root@backup ~]# cd /var/www/html #进入html目录

#接下来步骤是把目标压缩包上传至Linux系统(直接拖进去,此处省略具体命令)

#由于系统中没有unzip解压命令软件包,需要事先下载安装
[root@backup html]# yum install -y unzip
[root@backup html]# unzip windows-提交作业代码.zip #解压目标压缩包
[root@backup html]# systemctl start httpd #启动httpd服务

#修改配置文件
[root@backup html]# vim upload_file.php
修改保存路径,
vim [root@backup html]# vim upload_file.php
$wen="/var/www/html/tupian"; :wq 保存退出
[root@backup html]# systemctl restart httpd #重启httpd服务

#创建目录并授权
[root@backup html]# mkdir tupian

#修改httpd的配置文件
vim /etc/httpd/conf/httpd.conf
User www
Group www

[root@backup html]# systemctl restart httpd

[root@backup html]# mount -t nfs 172.16.1.31:/data /var/www/html/tupian

#创建www用户和组(客户端)
[root@backup html]# groupadd www -g 666
[root@backup html]# useradd www -u 666 -g 666

#重新授权
[root@backup html]# chown -R www.www /var/www/html/tupian

#重启httpd服务
[root@backup html]# systemctl restart httpd

打开浏览器,输入10.0.0.41,可以看到考试文件上传页面,上传一个文件
​ 
#检测是否成功
---客户端backup
[root@backup html]# ll tupian/
total 24
-rw-r--r-- 1 www www 19505 Aug 6 22:36 1_a1_a3.jpg
-rw-r--r-- 1 www www     4 Aug 6 22:06 1.txt


---服务端
[root@nfs ~]# ll /data
total 24
-rw-r--r-- 1 www www 19505 Aug 6 22:36 1_a1_a3.jpg
-rw-r--r-- 1 www www     4 Aug 6 22:06 1.txt
#另一台客户端web01重复上述操作
#启动httpd服务
[root@web01 ~]# systemctl start httpd

[root@web01 ~]# rpm -ql httpd #查看httpd相关目录在哪儿
[root@web01 ~]# cd /var/www/html #进入html目录

#接下来步骤是把目标压缩包上传至Linux系统(直接拖进去,此处省略具体命令)

#由于系统中没有unzip解压命令软件包,需要事先下载安装
[root@web01 html]# yum install -y unzip
[root@web01 html]# unzip windows-提交作业代码.zip
#解压目标压缩包
[root@web01 html]# systemctl start httpd #启动httpd服务
#修改配置文件
[root@web01 html]# vim upload_file.php
修改保存路径,
[root@web01 html]# vim upload_file.php
$wen="/var/www/html/tupian"; :wq 保存退出
[root@web01 html]# systemctl restart httpd #重启httpd服务


#创建目录并授权
[root@web01 html]# mkdir tupian

#修改httpd的配置文件
vim /etc/httpd/conf/httpd.conf
User www
Group www

[root@web01 html]# systemctl restart httpd

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

#创建www用户和组(客户端)
[root@web01 html]# groupadd www -g 666
[root@web01 html]# useradd www -u 666 -g 666

#重新授权
[root@web01 html]# chown -R www.www /var/www/html/tupian

#重启httpd服务
[root@web01 html]# systemctl restart httpd

打开浏览器,输入10.0.0.7,可以看到考试文件上传页面,上传一个文件

#检测是否成功
---客户端backup
[root@backup html]# ll tupian/
total 24
-rw-r--r-- 1 www www 19505 Aug 6 22:36 1_a1_a3.jpg
-rw-r--r-- 1 www www     4 Aug 6 22:06 1.txt


---服务端
[root@nfs ~]# ll /data
total 24
-rw-r--r-- 1 www www 19505 Aug 6 22:36 1_a1_a3.jpg
-rw-r--r-- 1 www www     4 Aug 6 22:06 1.txt

然后在浏览器输入网址,可以看到上传的图片,表明目录是共享的。

Linux架构之NFS共享存储1的更多相关文章

  1. 使用URLOS在linux系统中极速部署NFS共享存储服务

    如何在linux系统里搭建NFS服务?其实我们只需要安装一个URLOS面板,然后就能在3分钟内将NFS服务部署完成.近日,URLOS在应用市场中上架了一款NFS应用,它可以让我们的节点主机在3分钟内极 ...

  2. Linux之nginx反向代理+三台web+nfs共享存储实现集群配置

    作业四:nginx反向代理+三台web+nfs共享存储实现集群配置 在各个web服务器上挂载nfs [root@localhost nginx]# mount -t nfs 192.168.152.1 ...

  3. 生产场景NFS共享存储优化及实战

    生产场景NFS共享存储优化: 1.硬件:sas/ssd磁盘,买多块,raid0/raid10,网卡好 2.NFS服务器端优化加all_squash,async /backup/NFS 192.168. ...

  4. Linux下搭建iSCSI共享存储的方法 Linux-IO Target 方式CentOS7-1810下实现

    iSCSI(internet SCSI)技术由IBM公司研究开发,是一个供硬件设备使用的.可以在IP协议的上层运行的SCSI指令集,这种指令集合可以实现在IP网络上运行SCSI协议,使其能够在诸如高速 ...

  5. Linux下搭建iSCSI共享存储的方法 Linux-IO Target 方式 Debian9.5下实现

    iSCSI(internet SCSI)技术由IBM公司研究开发,是一个供硬件设备使用的.可以在IP协议的上层运行的SCSI指令集,这种指令集合可以实现在IP网络上运行SCSI协议,使其能够在诸如高速 ...

  6. NFS 共享存储实战

    目录 NFS 共享存储实战 一.NFS概述 二.NFS部署 部署NFS客户端backup和web01 统一web.nfs.backup的用户权限 代码部署步骤 三.NFS配置详解 NFS存储小结 四. ...

  7. 基于NFS共享存储实现KVM虚拟机动态迁移

    基于NFS共享存储实现KVM虚拟机动态迁移 一:配置环境 二:安装相关的依赖包 三:实现NFS共享存储 四:KVM机配置相同的步骤 五:安装KVM01安装虚拟机 六:实现迁移  实验初始配置:所有主机 ...

  8. NFS 共享存储

    目录 环境准备 NFS服务端 NFS客户端 部署时常见报错 httpd服务 NFS 共享存储的坑 环境准备 主机名 WanIP(Wide Area Network) LanIP(Local Area ...

  9. 负载均衡LVS之DR(附:NFS共享存储) 五分钟搭建手册

    一:DR-模式 调度器Ip:192.168.1.254 服务器ip:192.168.1.1/192.168.1.2 VIP:192.168.1.10 ——配置负载均衡调度器: 关闭重定向响应配置: V ...

随机推荐

  1. Eclipse中jar包的导出与导入

    JAR的含义: JAR是Java的档案文件,是Java Archive File的缩写.jar文件是一种压缩文件,就是以特定类型压缩包的形式存在的完整Java项目.通常通过导入jar包的方式来使用实现 ...

  2. 20181022-JSP 开发环境搭建

    JSP 开发环境搭建 JSP开发环境是您用来开发.测试和运行JSP程序的地方. 本节将会带您搭建JSP开发环境,具体包括以下几个步骤. 配置Java开发工具(JDK) 这一步涉及Java SDK的下载 ...

  3. android 摇一摇功能的实现

    将这个功能封装成了一个类,这样今后方便调用 package com.bobo.myyaoyiyaotest; import android.R.bool; import android.content ...

  4. View 层

    package com.test.mvp.mvpdemo.mvp.v1.view; import android.app.ProgressDialog;import android.os.Bundle ...

  5. (转)Matplotlib的子图subplot的使用

    转:https://www.jianshu.com/p/de223a79217a 前言 Matplotlib的可以把很多张图画到一个显示界面,这就设计到面板切分成一个一个子图.这是怎么做到的呢.mat ...

  6. Azure Monitor Kibana configuration always seems to send over SSL

    https://github.com/elastic/logstash/issues/10125 https://blogs.cisco.com/security/step-by-step-setup ...

  7. 阶段1 语言基础+高级_1-3-Java语言高级_1-常用API_1_第3节 Random类_11-练习二_猜数字小游

    0到100之间的数字.猜多少次才能猜对最终的结果.大了或者小了都会告诉你. 二分法查找. 循环次数不确定用whilte true的方式去循环 前两种情况是需要重试的 把猜测的代码放在whilte循环里 ...

  8. 阶段1 语言基础+高级_1-3-Java语言高级_04-集合_08 Map集合_6_Map集合遍历键值对方式

    增强for

  9. mac, ios 模拟器

    genymotion  最好的android 硬件模拟器. 可多开,可gps定位,可模拟重力系统,可模拟磁场系统,模拟器海拔高度. 甚至可以模拟sd卡. 直接就等于真机. virtualbox 最好的 ...

  10. Package manager has died异常PackageInfo 引发 Crash

    Android 获取 PackageInfo 引发 Crash 填坑 一般 Android 通过PackageInfo这个类来获取应用安装包信息,比如应用内包含的所有Activity名称.应用版本号之 ...