OpenStack入门之核心组件梳理(4)——Cinder篇

OpenStack入门之核心组件梳理(4)——Cinder篇

前言

​ 在讲述Nova项目的文章中,笔者提到过Nova-Volume这一个子项目,这就是目前OpenStack中Cinder项目的前身。算法

​ 本文紧接以前各个组件的讲解,继续介绍OpenStack中核心组件之一的Cinder项目(块存储)相关理论知识。分别从这进行介绍:数据库

1、简述Cinder概念与做用

1.1块存储的概念

​ Cinder项目是OpenStack中为Nova项目所实现的虚拟机实例提供数据可持久性的块存储服务,其前身为Nova项目中的子项目Nova-Volume。不清楚存储的相关基本知识可能不明白这个"块"是什么意思。简单举个例子来讲,块存储能够理解为咱们笔记本中的硬盘,能够是机械硬盘或者是固态硬盘,这个你们应该耳熟能详了哈。后端

​ 那么,再来讲一下存储。存储,顾名思义,就是存放数据信息的,就好比实际生活中的库房、储物柜、收纳箱等等;存储也正如这些实际例子同样,也有本身的类型以及方式,本文旨在讲述OpenStack中的块存储理论,存储的分类以及方式就不作具体介绍了。api

1.2cinder项目的做用

​ 在OpenStack中,存储是其管理和提供的三大核心资源之一,所以,对于存储的做用须要有所了解。网络

  1. 为Nova项目所实现的虚拟机实例提供数据持久化存储服务;架构

  2. 块存储提供了Volumes的管理基础架构去,而且负责其快照和类型管理;ide

  3. cinder经过插件形式为存储后端提供了访问的API接口;

​ 块存储服务一般以存储卷的形式挂载到虚拟机上来使用,经过统一的API接口,存储客户端能够访问不一样的存储资源,无需担忧底层的存储驱动。性能

2、浅谈块存储、对象存储以及文件系统存储

​ OpenStack集群中的存储一般分为块存储、对象存储和文件系统存储。下面简述一下这三者的概念。插件

2.1块存储

​ 块存储就是经过SAN或iSCSI等存储协议将存储设备端的卷(Volume)挂载到虚拟机上并进行分区和格式化,而后挂载到本地文件系统使用的存储实现方式。命令行

2.2 文件系统存储

​ 文件系统存储就则是经过NFS或CIFS(Samba)等网络文件系统协议将远程文件系统挂载到本地系统使用的存储实现方式。

2.3对象存储

​ 相对而言,对象存储在实现和使用方式上与块存储和文件系统存储都不一样,对象存储是一种以REST API方式提供数据访问的存储实现方式。

​ 一般在OpenStack中,块存储是使用最多的数据存储实现方式。接下来介绍一下Cinder项目的主要组件构成。

3、块存储主要组件

​ 本小节将介绍Cinder项目中主要的组件。

3.1Cinder-api

​ Cinder-api是一种WSIG类型的应用服务,其主要负责接收来自Horizon或命令行客户端的块存储API请求,同时负责请求客户端的身份信息验证(经过Keystone项目实现)。

​ Cinder-api接收到客户端请求后,根据Cinder-scheduler的存储后端调度结果,将请求API路由到运行Cinder-volume服务的对应后端存储上。

3.2Cinder-scheduler

​ Cinder-scheduler,与Nova-scheduler的功能相似,Cinder-scheduler是Cinder项目的后端Volumes的服务调度器。当Cinder-api接收到客户端请求后,将由Cinder-scheduler服务来负责API的路由。

​ 根据用户配置的计划策略,Cinder-api请求能够采用形如RR的轮询方式路由到运行Volume服务的各个存储节点,也能够采用FilterScheduler来实现更为复杂和智能的后端存储节点过滤策略。在Cinder的配置中,FilterScheduler是默认设置,经过FilterScheduler的配置能够实现基于Capacity、Availability Zone、Volume Types、Capabilities或者用户自定义过滤策略的后端存储节点调度。

3.3Cinder-volume

​ Cinder-volume是Cinder项目中真正提供块存储和不一样存储驱动插件管理的服务。OpenStack对Volume的操做,最后都是交给cinder-volume来完成的。

​ Cinder-volume服务经过AMQP与Cinder-scheduler进行交互,将其所管理的各个存储驱动后端的运行、性能和容量等参数实时传递到Cinder-scheduler,以便Cinder-scheduler根据这些参数进行存储节点的调度。此外,Cinder-volume经过驱动架构实现与不一样存储驱动后端的交互。

3.4Cinder-backup

​ Cinder-backup为块存储卷(Volumes)提供了备份服务,要实现Volumes的备份,须要提供备份存储驱动的实现,目前比较常见的备份存储后端由Swift提供。与Cinder-volume相似,Cinder-backup也经过Driver(驱动)插件架构的形式与不一样的存储备份后端交互。

3.5MESSAGE QUEUE

​ Cinder项目的不一样内部服务组件之间经过Queue进行消息交互。Cinder中各个服务之间经过消息队列进行通讯能够参考下图:

cinder内部服务交互

3.6 Database

​ Cinder有一些数据须要存放到数据库中,通常使用的数据库为MySQL。

4、块存储基本架构

​ 接下来来理解一下Cinder的基本架构,以下图所示:

OpenStack入门之核心组件梳理(4)——Cinder篇

​ 经过该架构图咱们能够将Cinder项目的服务与其余的服务联系起来理解。用户提供Horizon项目提供的Web可视化界面客户端或命令行客户端与Cinder-api进行交互,Cinder-api经过Keystone经过的认证服务验证用户身份,接着使用MQ消息队列与Cinder-volume通讯,Cinder-volume凭借驱动插件管理由volume provider提供的各类存储后端,而且将相关信息写入数据库中保存。

​ 以上就是Cinder项目架构中对应的服务与其余项目服务之间的交互说明,下面一小节将经过一个例子来解释cinder内部各个的交互原理及过程。

5、块存储内部组件工做原理

​ 假设,用户须要建立一块磁盘空间,或者说一个存储卷。那么cinder内部的工做流程是这样的:

一、用户发送一个建立新卷的请求给Cinder-api;

二、Cinder对该请求进行必要处理(如响应及验证等),因而往Message Queue中放入一条建立卷的信息给Cinder-scheduler;

三、Cinder-scheduler接收到该信息后执行相应的算法,在一群存储节点上选择一个相对较合适的节点;

四、因而Cinder-scheduler又往消息队列中存放了一条让被选出的存储节点来建立这个卷的信息;

五、被选出的存储节点的Cinder-volume接收到该信息,便经过驱动及对应的volume provider上建立该卷。

该过程能够经过下面的流程图来演示:

OpenStack入门之核心组件梳理(4)——Cinder篇

6、Cinder项目总结

​ 对于Cinder项目,首先明白其在OpenStack中的做用做用,提供的是什么样的服务。另外明白其基本架构以及对应的工做流程。本文对Cinder的介绍大体这些,固然,Cinder项目中有关其具体的使用以及插件的介绍在这里就不继续深刻了,有兴趣的朋友能够查一下相关资料。

​ 谢谢您的阅读!

相关文章
相关标签/搜索