存储服务

1.OpenStack存储服务概述

1)OpenStack中,有3个与存储相关的组件,Swift——对象存储(Object Storage),Glance——提供虚拟镜像存储和管理,Cinder——提供块存储(Block Storage)。

2)OpenStack中的存储可以分为两类:临时存储和持久性存储。

临时存储(Ephemeral Storage)如果只部署了Nova服务,则默认分配给虚拟机的磁盘是临时的,当虚拟机终止后,存储空间也会被释放。默认情况下,临时存储以文件形式放置在计算节点的本地磁盘上。

持久性存储(Persistent Storage)持久化存储设备的生命周期独立于任何其他系统设备或资源,存储的数据一直可用,无论虚拟机是否运行。

3)目前OpenStack支持三种类型的持久性存储:块存储、对象存储和文件系统存储。

4)OpenStack持久化存储简介

块存储Cinder:操作对象是磁盘,直接挂载到主机,一般用于主机的直接存储空间和数据库应用,DAS和SAN都可以提供块存储。

对象存储Swift:操作对象是对象(object),一个对象名称就是一个域名地址,可以直接通过REST API的方式访问对象。

文件存储Manila:操作对象是文件和文件夹,在存储系统上增加了文件系统,再通过NFS或CIFS协议进行访问。

持久化存储.png

5)OpenStack存储类型对比

存储类型对比.png

6)如何选择不同OpenStack存储

场景一:临时存储 场景二:Cinder 场景三:Swift

如何选择.png

2.Cinder

在OpenStack Folsom版本之后,OpenStack通过Cinder服务为云平台提供块逻辑卷服务。

Cinder提供块存储服务,为虚拟机实例提供持久化存储。

Cinder调用不同存储接口驱动,将存储设备转化成块存储池,用户无需了解存储实际部署的位置或设备类型。

Cinder的核心功能是对卷的管理,允许对卷、卷的类型、快照进行处理。然而,它并没有实现对块设备的管理和实际服务(提供逻辑卷),而是通过后端的统一存储接口支持不同块设备厂商的块存储服务,实现其驱动支持并于OpenStack进行整合。Cinder可以支持如NetAPP、SolidFile、华为、EMC和IBM等知名存储厂商以及众多开源块存储系统。

cINDER.png

Cinder架构
架构.jpg

Cinder Client封装Cinder提供的rest接口,以CLI形式供用户使用。

Cinder API对外提供rest API,对操作需求进行解析,对API进行路由寻找相应的处理方法。包含卷的增删改查(包括从源卷、镜像、快照创建)、快照增删改查、备份、volume type管理、挂载/卸载(Nova调用)等。

Cinder Scheduler负责收集backend上报的容量、能力信息,根设定的算法完成卷到指定cinder-volume的调度。

Cinder Volume多节点部署,使用不同的配置文件、接入不同的backend设备,由各存储厂商插入driver代码与设备交互完成设备容量和能力信息收集、卷操作。

Cinder Backup实现将卷的数据备份到其他存储介质(目前SWIFT/Ceph/TSM提供了驱动)。

SQL DB提供存储卷、快照、备份、service等数据,支持Mysql、PG、MSSQL等SQL数据库。

架构说明.png

Cinder架构部署:比SAN存储为例
架构部署.png

AProxy是一个使用C语言编写的自由及开放源代码软件[1],其提供高可用性、负载均衡,以及基于TCP和HTTP的应用程序代理。

Cinder-api,Cinder-Scheduler,Cinder-Volume可以选择部署到一个节点上,也可以分别部署。

API采用AA模式,Haproxy作为LB,分发请求到多个Cinder API。

Scheduer也采用AA模式,有rabbitmq以负载均衡模式向3个节点分发任务,并同时从rabbitqmq收取Cinder volume上报的能力信息,调度时,scheduler通过在DB中预留资源从而保证数据一致性。

Cinder Volume也采用AA模式,同时上报同一个backend容量和能力信息,并同时接受请求进行处理。

RabbitMQ,支持主备或集群。MySQL,支持主备或集群。

3.Cinder组件

(1)Cinder API对外提供REST API,对操作需求进行解析,并调用处理方法:

卷create/delete/list/show
快照create/delete/list/show
卷attach/detach (Nova调用)
其他:Volume types 、Quotas、Backups

(2)Cinder scheduler负责收集后端上报的容量、能力信息,根据设定的算法完成卷到指定cinder-volume的调度。

Cinder scheduler通过过滤和称权,筛选出合适的后端:
筛选.png

根据后端的能力进行筛选:

Drivers定期报告后端的能力和状态
管理员创建的卷类型(volume type )
创建卷时,用户指定卷类型

(3)Cinder volume多节点部署,使用不同的配置文件、接入不同的后端设备,由各存储厂商插入Driver代码与设备交互,完成设备容量和能力信息收集、卷操作等。

组件.png

4.Cinder典型工作流程

创建流程.png

API.png

Scheduler.png

Volume.png

挂载卷流程.png

1)Nova调用Cinder API创建卷,传递主机的信息,如hostname, iSCSI initiator name, FC WWPNs

2)Cinder API将该信息传递给Cinder Volume。

3)Cinder Volume通过创建卷时保存的host信息找到对应的Cinder Driver。

4)Cinder Driver通知存储允许该主机访问该卷,并返回该存储的连接信息(如iSCSI iqn,portal,FC Target WWPN,NFS path等)

5)Nova调用针对于不同存储类型进行主机识别磁盘的代码( Cinder 提供了brick模块用于参考)实现识别磁盘或者文件设备。

6)Nova通知Cinder已经进行了挂载。

7)Nova将主机的设备信息传递给hypervisor来实现虚拟机挂载磁盘。

5.Swift简介

(1)Swift

Swift对象存储服务,首次出现在OpenStack的“Austin”版本中。

Swift提供高度可用、分布式、最终一致的对象存储服务。

Swift可以高效、安全且廉价地存储大量数据。

Swift非常适合存储需要弹性扩展的非结构化数据。

(2)依赖的OpenStack服务

为其他OpenStack服务提供对象存储服务。

(3)Swift在OpenStack中的作用

作用.png

(4)Swift特点

特点.png

应用场景.png

6.Swift架构

对象存储服务的架构.png

Swift中对象的存储URL如下所示:https://swift.example.com/v1/account/container/object
存储URL有两个基本部分:集群位置和存储位置。

集群位置: swift.example.com/v1/
存储位置(对象): /account/container/object
存储位置有如下三种:

/account

帐户存储位置是唯一命名的存储区域,其中包含帐户本身的元数据(描述性信息)以及帐户中的容器列表。
请注意,在Swift中,帐户不是用户身份。当您听到帐户时,请考虑存储区域。

/account/container

容器存储位置是帐户内的用户定义的存储区域,其中包含容器本身和容器中的对象列表的元数据。

/account/container/object

对象存储位置存储了数据对象及其元数据的位置。

Swift组件

Swift组件.png

Swift API.png

数据模型.png

思考题

1.OpenStack 中有哪几种类型的存储?

临时存储;块存储;对象存储;共享文件系统存储

2.块存储和对象存储分别适用于哪些场景?

块存储:OpenStack生产环境中的虚拟机,需保证虚拟机数据长期保存
对象存储:存放OpenStack中的Glance镜像文件

3.块存储服务主要包含哪些组件 ?

Cinder API;Cinder scheduler;Cinder volume;cinder-backup

4.块存储服务是怎么创建卷的?

①创建卷类型;②创建卷;③请求Schedule创建卷;④读取调度算法,过滤并选择最优的HOST;⑤请求发送到对应的后端;⑥请求阵列后端创建指定的卷;

5.对象存储服务主要包含哪些组件?

Proxy Server; Account Server; Container Server

作业题

创建-个虚拟机实例名为"l姓名_学号”

openstack server create --l郝英明_36

为虚拟机实例名为"I姓名_ 学号”创建快照名为"Snap_学号”

openstack server image create --name Snap_36 l郝英明_36

使用快照"Snap_学号”恢复实例"l姓名_学号”

openstack server rebuild --image Snap_36 l郝英明_36

查看快照列表

openstack image list

查看实例列表

openstack server list

查看虚拟机实例名为"l姓名_学号”的当前的状态

openstack server list | grep l 郝英明_36

删除实例"l姓名_学号”

openstack server delete l郝英明_36

Last modification:May 15th, 2020 at 07:58 am
如果觉得我的文章对你有用,请随意赞赏