从零开始的云计算生活——第二十八天,继往开来,NFS文件存储

目录

一.故事背景

二.存储基础

1、单机存储设备

(1)DAS(直接附加存储,是直接接到计算机的主板总线上去的存储)

(2)NAS(网络附加存储,是通过网络附加到当前主机文件系统之上的存储)

(3)SAN(存储区域网络)

2、单机存储的问题

(1)存储处理能力不足

(2)存储空间能力不足

(3)单点故障问题

3、商业存储解决方案

4、分布式存储(软件定义的存储 SDS)

5、分布式存储的类型

(1)块存储

(2)文件存储

(3)对象存储

三.NFS概述

NFS挂载原理

NFS工作原理

RPC与NFS通讯过程

四.NFS服务安装与启停

NFS服务安装

NFS服务启停

五.NFS服务配置文件

六.NFS文件共享配置文件

配置参数说明

五、命令解析

七.客户端访问

八.客户端挂载

九.实战项目——LNMP平台构架

1、LNMP概述

2、 LNMP实现细节

3.LNMP部署实战

1.环境准备

2.配置nginx实现php解析

3.部署MySQL

安装MySQL

十.内容扩展—ISCSI存储服务

1.概述

iSCSI协议的功能

iSCSI的结构

iSCSI协议的工作原理

iSCSI的优点

iSCSI基本概念

iSCSI客户端 (iSCSI Initiator)

iSCSI服务器端 (iSCSI Target)

iSCSI target设备名称

逻辑单元号LUN

iSCSI的发现机制

静态配置

SendTarget发现

零配置发现

十一.总结


一.故事背景

在结束了MySQL数据库的内容后,接下来是存储服务的相关内容,首先接触的是NFS文件存储。

二.存储基础

1、单机存储设备

(1)DAS(直接附加存储,是直接接到计算机的主板总线上去的存储)

IDE、SATA、SCSI、SAS、USB 接口的磁盘

所谓接口就是一种存储设备驱动下的磁盘设备,提供块级别的存储

(2)NAS(网络附加存储,是通过网络附加到当前主机文件系统之上的存储)

NFS、CIFS、FTP 、samba

文件系统级别的存储,本身就是一个做好的文件系统,通过nfs接口在用户空间输出后,客户端基于内核模块与远程主机进行网络通信,把它转为好像本地文件系统一样来使用,这种存储服务是没办法对它再一次格式化创建文件系统块的

(3)SAN(存储区域网络)

SCSI协议(只是用来传输数据的存取操作,物理层使用SCSI线缆来传输)、FCSAN(物理层使用光纤来传输)、iSCSI(物理层使用以太网来传输)

也是一种网络存储,但不同之处在于SAN提供给客户端主机使用的接口是块级别的存储

2、单机存储的问题

(1)存储处理能力不足

传统的IDE的IO值是100次/秒,SATA固态磁盘500次/秒,固态硬盘达到2000-4000次/秒。即使磁盘的IO能力再大数十倍,也不够抗住网站访问高峰期数十万、数百万甚至上亿用户的同时访问,这同时还要受到主机网络IO能力的限制。

(2)存储空间能力不足

单块磁盘的容量再大,也无法满足用户的正常访问所需的数据容量限制。

(3)单点故障问题

单机存储数据存在单点故障问题

3、商业存储解决方案

EMC、NetAPP、IBM、DELL、华为、浪潮

4、分布式存储(软件定义的存储 SDS)

Ceph、TFS、FastDFS、MooseFS(MFS)、HDFS、GlusterFS(GFS)

存储机制会把数据分散存储到多个节点上,具有高扩展性、高性能、高可用性等优点。

存储系统核心架构数据模型适用场景性能特点可靠性机制主要优缺点
Ceph去中心化,基于RADOS对象存储统一存储(块/对象/文件)云计算、混合云、大规模非结构化数据高吞吐、低延迟(CRUSH算法优化数据分布)

多副本/纠删码 + CRUSH故障域隔离

优点​:强一致性、线性扩展、无单点故障
缺点​:部署复杂,硬件要求高
TFS (Taobao File System)中心化(NameServer管理元数据)文件存储(小文件优化)电商图片、海量小文件(<1MB)高随机IO性能,软RAID并发处理多副本 + 主备热切换优点​:小文件性能优异、平滑扩容
缺点​:不支持POSIX,文档少,大文件性能差
FastDFS无中心(Tracker调度 + Storage存储)文件/块存储轻量级文件服务(图片/视频网站)中等吞吐,低并发延迟

数据分块 + 多副本同步

优点​:部署简单、无单点故障
缺点​:不支持断点续传,跨集群同步弱
MooseFS (MFS)​中心化(Master管理元数据)文件存储海量小文件读写、Web应用小文件高效,大文件一般多副本 + 回收站机制优点​:支持FUSE挂载、易监控
缺点​:Master单点瓶颈,扩容需中断
HDFS中心化(NameNode + DataNode)文件系统(大文件分块)大数据分析、离线批处理高吞吐量,顺序读写优多副本(默认3副本)优点​:容错性强、生态完善
缺点​:小文件低效,不支持随机写
GlusterFS (GFS)​去中心化(无元数据服务器)文件/块存储大文件高并发(视频归档、科研数据)大文件吞吐高,小文件较差

纠删码/副本 + 数据自愈

优点​:扩展灵活,无单点故障
缺点​:目录遍历效率低,CPU占用高

5、分布式存储的类型

(1)块存储

(例如硬盘,一般是一个存储被一个服务器挂载使用,适用于容器或虚拟机存储卷分配、日志存储、文件存储)

就是一个裸设备,用于提供没有被组织过的存储空间,底层以分块的方式来存储数据

(2)文件存储

(例如NFS,解决块存储无法共享问题,可以一个存储被多个服务器同时挂载,适用于目录结构的存储、日志存储)

是一种数据的组织存放接口,一般是建立在块级别的存储结构之上,以文件形式来存储数据,而文件的元数据和实际数据是分开存储的

(3)对象存储

(例如OSS,一个存储可以被多服务同时访问,具备块存储的高速读写能力,也具备文件存储共享的特性,适用图片存储、视频存储)

基于API接口提供的文件存储,每一个文件都是一个对象,且文件大小各不相同的,文件的元数据和实际数据是存放在一起的

三.NFS概述

        NFS是Network File System的缩写,默认监听2049端口号。它最大的功能就是可以通过网络,让不同的机器、不同的操作系统可以共享彼此的文件。

        NFS服务器可以让PC将网络中的NFS服务器共享的目录挂载到本地端的文件系统中,而在本地端的系统中来看,那个远程主机的目录就好像是自己的一个磁盘分区一样,在使用上相当便利;NFS一般用来存储共享视频,图片等静态数据。

        NFS分为服务端和客户端(C/S架构)。服务端提供共享目录或文件,客户端对服务端共享的目录或文件挂载后,就可以读取到服务端提供的文件或目录,在客户端看来就像访问本地一样。

        RPC,远程过程调用协议。可以通过网络从远程主机程序上请求服务,而不需要了解底层网络技术。最重要的功能是远程连接、端口注册。使用UDP的111端口监听客户请求。

NFS挂载原理

 

一个NFS服务器设置好共享目录,有权访问的NFS客户端就可以把该目录挂载到本地。

NFS通过网络端口实现服务器端和客户端的数据传输。因为NFS有许多功能,不同的功能需要使用不同的端口,因此端口是随机的。那么如何让客户端知道此时服务器端使用的是哪个端口呢?通过RPC(remote procedure call)服务来实现。RPC即远程过程调用。

NFS工作原理

NFS服务端和客户端之间通过随机选择端口来传输数据,NFS服务端利用RPC协议与客户端进行沟通决定使用的随机端口,然后利用这个端口来传输数据,使用的随机端口通常小于1024。RPC协议用来统一管理NFS的随机端口,其使用的端口默认为111

RPC与NFS通讯过程

  1. 首先服务器端启动RPC服务,并开启111端口

  2. 服务器端启动NFS服务,并向RPC注册端口信息

  3. 客户端启动RPC(portmap服务),向服务端的RPC(portmap)服务请求服务端的NFS端口

  4. 服务端的RPC(portmap)服务反馈NFS端口信息给客户端。

  5. 客户端通过获取的NFS端口来建立和服务端的NFS连接并进行数据的传输。

四.NFS服务安装与启停

NFS服务安装

NFS服务启停

五.NFS服务配置文件

# 这是一个NFS服务器的配置文件
# This is a general configuration for the NFS daemons and tools

#[general]
# pipefs-directory=/var/lib/nfs/rpc_pipefs  # 设置RPC管道文件系统的目录

[nfsrahead]
# nfs=15000   #NFSv3协议预读数据量(单位:字节)。
# nfs4=16000   #NFSv4协议预读数据量。



#[exportfs]
# debug=0  # 设置导出时的调试级别为0

#[gssd]
# verbosity=0  # 设置GSSAPI的日志级别为0
# rpc-verbosity=0  # 设置RPC日志级别为0
# use-memcache=0  # 是否使用内存缓存,这里设置为0,不使用
# use-machine-creds=1  # 是否使用机器凭证,这里设置为1,使用
# avoid-dns=1  # 是否避免DNS查找,这里设置为1,避免
# limit-to-legacy-enctypes=0  # 是否限制使用旧的对等体类型,这里设置为0,不限制
# context-timeout=0  # 设置上下文超时时间为0,即无超时时间
# rpc-timeout=5  # 设置RPC超时时间为5秒
# keytab-file=/etc/krb5.keytab  # 指定Kerberos的keytab文件路径
# cred-cache-directory=  # 凭证缓存目录为空,可能这个配置项被注释掉了或者不存在
# preferred-realm=  # 首选领域为空,可能是默认的领域值

#[lockd]
# port=0  # 锁管理器监听的端口为0,可能未配置或默认值
# udp-port=0  # UDP端口为0,可能未配置或默认值



#[mountd]
# debug=0  # 挂载时的调试级别为0
# manage-gids=n  # 是否管理组ID,这里设置为n,不管理
# descriptors=0  # 描述符数量为0,可能未配置或默认值

#[nfsdcltrack]
# debug=0  # NFS数据流跟踪的调试级别为0
# storagedir=/var/lib/nfs/nfsdcltrack  # 数据存储目录为空,可能这个配置项被注释掉了或者不存在

#[nfsd]
# debug=0  # NFS服务的调试级别为0
# threads=8  # 并发线程数为8,可以提供更高的性能
# host=  # 主机的IP地址或域名,这里为空,可能是默认值或未配置


#[statd]
# debug=0  # 设置statd服务的调试级别为0,即不进行调试
# port=0  # 设置statd服务的监听端口为0,可能表示默认值或未配置
# outgoing-port=0  # 设置statd服务发送数据的端口为0,可能表示默认值或未配置
# name=  # 设置statd服务的名称为空,可能表示默认值或未配置
# state-directory-path=/var/lib/nfs/statd  # 设置statd服务的状态目录路径为/var/lib/nfs/statd
# ha-callout=  # 设置高可用调用为空,可能表示未配置
# no-notify=0  # 设置是否禁用通知为0,即不禁用通知

#[sm-notify]
# debug=0  # 设置sm-notify服务的调试级别为0,即不进行调试
# force=0  # 设置是否强制发送通知为0,即不强制发送
# retry-time=900  # 设置发送通知请求的延迟时间为900秒
# outgoing-port=  # 设置发送数据的端口为空,可能表示默认值或未配置
# outgoing-addr=  # 设置发送数据的地址为空,可能表示默认值或未配置
# lift-grace=y  # 设置是否解除宽限期为y,即解除宽限期

六.NFS文件共享配置文件

##默认是空的

配置参数说明
参数作用
ro只读
rw读写
root_squash当以root身份访问时,映射为NFS服务端的匿名用户
no_root_squash当以root身份访问时,映射为NFS服务端的root用户
all_squash无论使用什么账户访问,均映射为NFS服务端的匿名用户
sync同时将数据写入内存和硬盘中,保证不丢失数据
async先将数据写入内存,然后写入硬盘中,可能会造成数据丢失

五、命令解析

命令字选项作用
exportfs-d开启调试模式。有效的调试类型包括:all, auth, call, general 和 parse。在/etc/nfs.conf的[exportfs]部分中设置debug=也可以开启调试模式。
-a导出或取消导出所有目录。
-o指定一个与exports(5)文件中的导出选项列表相同的选项列表。
-i忽略/etc/exports文件和/etc/exports.d目录下的文件,仅使用命令行中给出的默认选项和选项。
-r重导出所有目录,将/var/lib/nfs/etab与/etc/exports和/etc/exports.d下的文件同步。该选项会删除来自/var/lib/nfs/etab中已从/etc/exports或/etc/exports.d下的文件的删除条目,并删除内核导出表中已不再有效的条目。
-u取消导出一个或多个目录。
-f如果/proc/fs/nfsd或/proc/fs/nfs被挂载,则将内核的导出表中的所有内容清除。活跃客户端的新的内核导出表条目是由rpc.mountd在它们下次发出NFS挂载请求时添加的。
-v显示详细信息。在导出或取消导出时,显示正在进行的事情。在显示当前导出列表时,还会显示导出选项列表。
-s显示适合/etc/exports的当前导出列表
showmountshowmount [ -adehv ] [ --all ] [ --directories ] [ --exports ] [ --help ] [ --version ] [ host ]
-a列出客户端主机名或IP地址以及以主机目录格式表示的挂载目录。
-d仅列出由客户端挂载的目录。
-e显示NFS服务器的导出列表。(常用)
-h提供简短的帮助摘要。
-v报告程序的当前版本号。

 在/etc/exports中写入内容,并重启加载(或者使用exportfs命令)

七.客户端访问

使用客户端访问服务端,查看nfs服务器192.168.115.128的共享目录

八.客户端挂载

 手动挂载

此时若想挂载新的磁盘,一定要先把之前的卸载掉

返回服务端更改文件内容

重启

此时返回客户端挂载即可成功

在客户端安装nginx服务,将服务端挂载到nginx,并启动服务

在服务器的/date目录下创建index.html,并添加内容,此时登录客户端ip可以获得

打开第二台客户端,重复操作也可以获得该内容

九.实战项目——LNMP平台构架

1、LNMP概述

LNMP架构,是指在Linux平台下,由运行Nginx的web服务器,运行PHP的动态页面解析程序和运行MySQL的数据库组成的网站架构,也是当前常用的系统架构之一。

L:Linux N:Nginx M:MySQL P:PHP|Perl|Python

  • Linux:代表一类Unix计算机操作系统的统称,是目前最流行的免费操作系统,如Debian、CentOS、Ubuntu、Fedora、Gentoo等。

  • Nginx:一个高性能的HTTP和反向代理服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx以其内存占用少和并发能力强而著称。

  • MySQL:一种开放源代码的关系型数据库管理系统,使用最常用的数据库管理语言SQL进行数据库管理。MySQL因其速度、可靠性和适应性而受到广泛关注。

  • PHP:一种在服务器端执行的嵌入HTML文档的脚本语言,因其开源、免费、快捷等特点,成为最流行的编程语言之一。

在LNMP架构中,Nginx本身只负责静态页面的处理,当需要处理动态页面时,则需要Nginx将相关.php页面转交给php-fpm来进行处理,php-fpm会将PHP页面解析成html文件,然后交给Nginx进行处理。 与LAMP架构相比,LNMP的主要区别在于对PHP的处理上,LAMP对于PHP动态资源的处理是通过Apache的libphp5.so模块进行的,该模块内嵌如Apache中,而Nginx对PHP动态资源的处理则是通过php-fpm进行的,php-fpm是一个独立的模块,因此,在搭建LNMP架构时,Nginx和php-fpm都需要进行开启。

Nginx解析PHP文件流程如下所示:

LNMP架构运行原理如下图:

2、 LNMP实现细节

1.用户首先通过 http 协议发起请求,请求会先抵达Nginx; 2.Nginx 根据用户的请求进行 Location 规则匹配; 3.Location 如果匹配到请求是静态,则由 Nginx 读取本地直接返回; 4.Location如果匹配到请求是动态,则由Nginx将请求转发给fastcgi协议; 5.fastgi收到后会将请求交给php-fpm管理进程; 6.php-fpm管理进程接收到后会调用具体的worker工作进程, worker进程会调用php解析器解析代码,php解析后直接返回 7.如果有查询数据库操作,则由php连接数据库(用户 密码 IP)发起查询的操作 8.用户->http->nginx->fastcgi->php-fpm->php->tcp->mysql 9.最终数据由mysql->tcp->php->php-fpm->fastcgi->nginx->http->user

3.LNMP部署实战

1.环境准备

客户端安装nginx,mysql,php,php-mysqlnd(欧拉版本),php-fpm

2.配置nginx实现php解析

在服务端上改写新加的index文件为

客户端上启动php-fpm服务,并重启nginx

此时登录一号客户端则

二号客户端也可以登录

3.部署MySQL

安装MySQL

服务器配置文件

登录查看

解压一个压缩包,登录里面的upload

此时环境大多都不可写

将服务端的文件权限改为apache(下载php-fpm)

然后刷新网页

在服务端和客户端mysql都创建用户

然后再去填写网页内容

然后等待安装

访问站点,退出管理员身份,注册一个号

切换管理员身份,进入管理中心,可以看到各个管理内容

十.内容扩展—ISCSI存储服务

1.概述

        iSCSI协议(Internet Small Computer System Interface,iSCSI)是一种新的存储技术,它是将SCSI接口与以太网(Ethernet)技术结合起来工作的,简单的说iSCSI协议是将用户的请求转换成SCSI规则编码,然后再将这些数据封装在IP包中以便在以太网中进行传输的协议。

        iSCSI技术是基于IP的存储区域网,又称IP-SAN,它是一种基于因特网及SCSI-3协议的存储技术,由IETF提出,并于2003年2月11日成为正式的标准。

iSCSI协议的功能

  • 供硬件设备使用的可以在IP协议的上层运行的SCSI指令集,这种指令集合可以实现在IP网络上运行 SCSI协议,使其能够在诸如高速千兆以太网上进行路由选择。

  • 基于TCP/IP协议的,用来建立和管理IP存储设备、主机和客户机之间的相互连接,并创建SAN。

  • 使得SAN利用SCSI协议应用在高速数据传输网络成为可能。这种传输是以块级别的方式在各个存储设备上进行的。

iSCSI的结构

        由于SCSI协议是一个C/S架构,因此iSCSI协议也是一个C/S结构,其中client是initiator,server端为target。iSCSI协议的主要功能是利用TCP/IP网络,在主机系统(可称为initiator)和目标存储设备(称为target)之间进行大量的数据封装和可靠传输过程。此外,iSCSI协议还将SCSI协议封装在IP网络上,并且运行在TCP上。

iSCSI协议的工作原理

        当iSCSI主机发起数据读写操作后,操作系统会生成一个SCSI指令集,然后该SCSI指令集在iSCSI initiator端被封装成iSCSI消息包,并通过TCP/IP网络传输到存储区域,当存储区域的iSCSI target收到iSCSI消息包时会将其解开,读取其中的SCSI指令,然后再将其SCSI指令传送给SCSI设备执行其指令。当SCSI指令被执行后,返回的数据经过SCSI设备传送给iSCSI target时被封装为iSCSI的响应PDU,然后再通过TCP/IP网络传输给iSCSI initiator端,iSCSI initiator解开其iSCSI PDU包,读取其中的SCSI响应内容,并将其提交给操作系统进行处理,然后操作系统在将其处理后的内容返回给应用程序。

iSCSI的优点

iSCSI最大的优点就是节约成本,利用iSCSI协议构建一个存储网络,除了需要存储设备,交换机、线缆还有以太网接口以外,基本就不需要其他的设备了,只需要在现有的网络上安装iSCSI就可以实现构建一个比较大的存储网络了。

iSCSI基本概念

iSCSI客户端 (iSCSI Initiator)

iSCSI客户端为iSCSI initiator,这是I/O操作的发起者。在RedHat Linux系统中可以通过软件来模拟,需要安装iSCSI设备驱动。如iscsi-initiator-utils.rpm iSCSI initiator具有的特性:

  • 既然是I/O操作的发起者,需要通过发现过程请求远端块设备。

  • 它可以与target进行持久连接

  • Linux中可以通过软件方式来实现

iSCSI服务器端 (iSCSI Target)

iSCSI服务器端为iSCSI target,这是I/O操作的执行者。在RedHat Enterprise Linux中可以使用scsi-target-utils软件包来模拟实现。 iSCSI target端具有的特性:

  • 需要导出一个或多个块设备供启动者(initiator)使用

  • 可以通过硬件和软件的方式来实现

iSCSI target设备名称

iSCSI target名称必须是全球唯一的,其格式为:

iqn.<yyyy-mm>.<tld.domain.some.host>[:<identifier>]
# iqn:iSCSI target名称必须是以iqn开头的
# yyyy-mm:表示的是时间
# tld.domain.some.host:这个表示的是一个反过来写的域名
# identifier:这个可以是任意字符串
# 如:iqn.2015-03.com.xsl.www:storge.disk1 

逻辑单元号LUN

LUN ID由iSCSI目标设备(Target)分配。iSCSI 启动端(Initiator)设备当前支持在每个目标设备(Target)中导出最多256个LUN。即最大支持16个target。对于LUN,比较通俗的理解就是磁盘分区、LVM卷组、RAID等等

Target 即“储存设备”(Storage Device),也就是存放数据的硬盘(以磁盘阵列居多)。在使用iSCSI时,会在 iSCSI 储存设备上去建立 LUN(Logical Unit Number)来提供给具备 iSCSI Initiator 功能的主机来存取数据的。LUN 好比是个“逻辑单位磁碟”,物理上通常是由数个实体磁碟( RAID 或 LVM 技术的技术实现)所组成。

iSCSI的发现机制

iSCSI发起端为了和iSCSI目标端建立iSCSI会话,initiator需要知道target的 IP地址,TCP端口号和名字 三个信息。iSCSI发现的目的是为了让iSCSI发起端获取一条到iSCSI目标端的通路。iSCSI有三种发现机制:

静态配置

在iSCSI发起端已经知道iSCSI目标端的IP地址TCP端口号和名字信息时,iSCSI发起端不需要执行发现。iSCSI发起端直接通过IP地址和TCP端口来建立TCP连接,使用iSCSI目标端的名字来建立iSCSI会话。这种发现机制比较适合比较小的iSCSI体系结构

SendTarget发现

在iSCSI发起端知道iSCSI目标端的IP地址和TCP端口的情况下,iSCSI使用IP地址和TCP端口号建立TCP连接后建立发现对话。iSCSI发起端发送SendTarget命令查询网络中的存在的iSCSI信息。这种方法主要用于网关设备,iSCSI发起端被静态配置连接到指定的iSCSI设备。iSCSI发起端和iSCSI网关设备建立对话并发送SendTarget请求给iSCSI网关设备。iSCSI网关设备返回一系列和它相连的ISCSI目标端的信息。iSCSI发起端选择一个目标端来建立对话。

零配置发现

这种机制用于iSCSI发送设备完全不知道iSCSI目标端的信息的情况下。iSCSI发起端利用现有的IP网络协议SLP(Service Location Protocol for Discovery,服务定位协议)。iSCSI目标端使用SLP来注册,iSCSI发起端可以通过查询SLP代理来获得注册的iSCSI目标端的信息。当iSCSI目标端加入到网络中的时候,拓扑结构也随之改变。虽然这种方法增加了实现的复杂性,但它不需要重新配置发起端即可找到新的目标端。

十一.总结

本次内容主要讲解了NFS的相关内容及其部署,在之后环境对的情况下是很有用的,承上启下使用了之前的mysql,nginx等服务,也为之后的Redis铺路。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值