OpenStack核心组件-Cinder

一、Cinder介绍

1.1.块存储与文件系统存储

(1)块存储:块存储是一种基于块的存储方式,它将数据存储在一个个固定大小的块中,每个块都有唯一的地址。例如固态硬盘(SSD)。在块存储中,数据以块为单位进行读写,并且可以随机访问任何一个块。块存储通常被用于构建虚拟化存储系统或者直接连接到计算机系统的存储设备。它只负责把数据以块的形式存储在设备上,而不提供文件或目录的概念。

(2)文件系统存储:数据以文件的形式进行组织和存储的方式。在文件系统中,数据被组织成层次结构的目录和文件,并通过文件路径进行访问。典型的文件系统包括NTFS、ext4等。文件系统存储通常用于操作系统中管理存储设备上的数据,用户可以通过文件系统进行文件的创建、读写、删除等操作。允许用户和应用程序通过文件路径来访问数据,同时提供了文件元数据(如权限、创建时间等)的管理。

总结:尽管在底层存储设备上,数据最终都是以块的形式存储的,但块存储和文件系统存储强调的是数据的访问方式和管理方式的不同。块存储更侧重于对存储设备的原始访问,而文件系统存储更注重数据的逻辑组织和管理。

1.2.操作系统有两种获取存储空间的方式

(1)硬盘存储:通过某种协议(SCSI,SAN,ISCSI等)挂接裸硬盘,然后进行分区格式化、创建文件系统、或者直接使用裸硬盘存储数据(数据库),每个裸硬盘称为Volume卷。

(2)远程文件系统:通过NFS,CIFS等协议,mount远程的文件系统。如NFS服务器以及各种分布式文件系统。

1.3.Cinder是什么?

Cinder是 OpenStack 中提供 Block Storage Service的组件,用于提供对 volume 从创建到删除整个生命周期的管理。从 instance 的角度看,挂载的每一个 Volume 都是一块硬盘。

1.4.Cinder的功能

(1)提供 REST API 使用户能够查询和管理 volume、volume snapshot 以及 volume type。

(2)提供 scheduler 调度 volume 创建请求,合理优化存储资源的分配。

(3)通过 driver 架构支持多种 back-end(后端)存储方式,包括 LVM,NFS,Ceph 和其他诸如 IBM 等商业存储产品和方案。

二、Cinder的架构

2.1.cinder-api

对外提供rest api入口,cinder的endpoint;接受和处理rest请求;找keystone认证鉴权;记录DB、调用cinder-volume执行操作,多台部署。

2.2.cinder-scheduler

筛选主机,通过调度算法选择最合适的存储节点创建volume。创建Volume时,cinder-scheduler会先基于容量,volume Type等条件选择出最合适的存储节点,然后让其创建Volume。和nova-scheduler一样,都是通过多个过滤器实现的条件过滤,然后计算权重选择权重最大的存储节点。

2.3.cinder-volume

管理volume的服务,与volume provider协调工作,管理volume的生命周期,运行cinder-volume服务的节点被称为存储节点,OpenStack对Volume的操作,最后都是交给cinder-volume来完成的。cinder-volume自身并不管理真正的存储设备,它是由volume provider管理的,cinder-volume 和 volume provider一起实现volume生命周期的管理。负责与后端存储进行对接,通过各厂商提供的driver将openstack操作转换为对应的存储操作。

2.4.Volume Provider

Cinder Volume使用的后端存储技术,即数据的存储设备,为volume提供物理存储空间,OpenStack支持多种Volume Provider,每种Provider都需要实现一定的API接口和驱动程序,以便Cinder Volume能够与其进行交互。例如,Cinder支持LVM、Ceph等多种Volume Provider。用户可以根据自己的实际需求选择合适的Volume Provider来提供存储服务。

三、Cinder服务扩展

3.1.Cinder的物理部署架构图

3.2.Cinder架构解读

(1)通过Cinder-API,我们可以实现对卷Volume和SnapShot进行基本的管理

(2)Driver 架构支持多种 Volume Provider, cinder-volume 为这些 volume provider 定义了统一的接口,volume provider 只需要实现这些接口,就可以 将Driver 的形式即插即用到 OpenStack 系统中。

3.3.scheduler筛选主机

 筛选主机时,会通过调度算法选择最合适的存储节点创建volume。cinder-scheduler会先基于容量,volume Type等条件通过多个过滤器实现的条件过滤,然后计算权重,选择权重最大的存储节点。权重的选择也有两种方式:

(1)最少使用空间     (2)最大剩余空间

这两者虽然看上去像是同一种说法,但实际不以为然,假设现在有两个卷,volumeA总空间为100G,使用量为10G,VolumeB总空间为20G,使用量为5G,按照最少使用量来讲要选择B,按照最大剩余空间来讲就要选择A。

四、Cinder子服务的物理部署方案

4.1.Cinder的实际物理部署

五、Cinder创建卷的流程梳理

创建卷(Create Volume)

(1)用户通过OpenStack Dashboard或者OpenStack命令行工具发送创建卷的请求。

(2)Cinder API Service接收到请求并进行验证后,将请求发送给Cinder Scheduler。

(3)Cinder Scheduler根据一定的调度算法,选择最适合的存储节点来创建卷,并将请求发送给对应节点的 Cinder Volume Service。

(4)Cinder Volume Service接收到请求后,会生成一个唯一的卷ID,并将相关参数(如大小、类型等)保存在数据库中。

(5)Cinder Volume Service调用Volume Driver来创建卷,并将卷的信息保存在数据库中。

卷的状态管理:

(1)在创建卷之后,Cinder将卷的状态设置为“creating”。

(2)当卷创建完成后,Cinder将卷的状态更新为“available”。

挂载卷(Attach Volume):

(1)用户发送挂载卷请求:用户通过OpenStack Dashboard或者OpenStack命令行工具发送挂载卷的请求,请求中包括虚拟机实例和要挂载的卷的信息。

(2)Nova接收挂载卷请求:Nova API Service接收到挂载卷的请求,并进行相应的身份验证。

(3)Nova调用Cinder进行卷挂载:Nova调用Cinder API Service,将挂载卷的请求发送给Cinder。Cinder API Service接收到请求并验证后,将请求发送给Cinder Volume Service。

(4)Cinder进行卷挂载操作:Cinder Volume Service根据请求中的信息,调用Volume Driver来执行卷的挂载操作。Volume Driver将卷挂载到虚拟机的指定位置,并将挂载的结果返回给Cinder Volume Service。

(5)Nova更新虚拟机状态:Nova接收到Cinder返回的挂载结果后,更新虚拟机的状态,将挂载后的卷信息关联到虚拟机实例中。

IO操作:

(1)用户在虚拟机中进行IO操作时,会通过卷的挂载点与卷进行交互。

(2)IO请求由虚拟机发送到卷所在的主机节点上。

(3)主机节点上的Cinder Volume Service接收到 IO 请求后,根据卷的ID和Volume Driver的要求,将请求转发给对应的后端存储设备。

(4)后端存储设备执行相应的IO操作,并将结果返回给主机节点,最终传递给虚拟机。

卸载卷(Detach Volume):

(1)用户通过OpenStack Dashboard或者OpenStack命令行工具发送卸载卷的请求。

(2)Cinder API Service接收到请求并进行验证后,将请求发送给Cinder Volume Service。

(3)Cinder Volume Service将卷的状态设置为“detaching”,并将卷的信息发送给Volume Driver。

(4)Volume Driver将卷从虚拟机上卸载,并将卷的信息返回给Cinder Volume Service。

(5)Cinder Volume Service将卷的状态更新为“available”。

六、Cinder实验操作注意事项

6.1.创建卷时卷来源

(1)空白卷:这是一种干净的、未初始化的卷,创建后需要在虚拟机中进行格式化和挂载操作。

(2)镜像:这是一种预先创建好的卷,其中已经包含了特定操作系统、应用程序或数据内容。使用镜像创建卷时,卷将自动被初始化,并且包含了镜像中的内容。

(3)快照:这是一种已有数据的卷的快照,使用快照创建卷时,新的卷将包含与快照相同的数据内容。

创建的卷可启动项为 False,表示该卷不能被用作系统启动盘,也就是不能用作虚拟机实例的根磁盘。启动项为 False 的卷通常用于存储应用程序数据、日志或其他非系统相关的文件。这些卷可以与虚拟机实例关联,但不会被用作虚拟机实例的根磁盘。需要注意的是,在创建启动项为 True 的卷时,你需要选择一个包含操作系统的镜像来作为卷的来源。在创建虚拟机实例时,你需要将该卷设置为虚拟机实例的根磁盘,并将虚拟机实例从该根磁盘启动,这样才能使虚拟机正常运行。

猜你喜欢

转载自blog.csdn.net/m0_73901077/article/details/134614442