理解 Cinder 架构 - 天天5分钟玩转 OpenStack(45)

从本节开始咱们学习 OpenStack 的 Block Storage Service,Cinder算法

理解 Block Storage

操做系统得到存储空间的方式通常有两种:数据库

  1. 经过某种协议(SAS,SCSI,SAN,iSCSI 等)挂接裸硬盘,而后分区、格式化、建立文件系统;或者直接使用裸硬盘存储数据(数据库)后端

  2. 经过 NFS、CIFS 等 协议,mount 远程的文件系统api

第一种裸硬盘的方式叫作 Block Storage(块存储),每一个裸硬盘一般也称做 Volume(卷) 第二种叫作文件系统存储。NAS 和 NFS 服务器,以及各类分布式文件系统提供的都是这种存储。服务器

理解 Block Storage Service

Block Storage Servicet 提供对 volume 从建立到删除整个生命周期的管理。网络

从 instance 的角度看,挂载的每个 Volume 都是一块硬盘。架构

OpenStack 提供 Block Storage Service 的是 Cinder,其具体功能是:分布式

  1. 提供 REST API 使用户可以查询和管理 volume、volume snapshot 以及 volume typeide

  2. 提供 scheduler 调度 volume 建立请求,合理优化存储资源的分配性能

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

Cinder 架构

下图是 cinder 的逻辑架构图

Cinder 包含以下几个组件:

cinder-api
接收 API 请求,调用 cinder-volume 执行操做。

cinder-volume
管理 volume 的服务,与 volume provider 协调工做,管理 volume 的生命周期。运行 cinder-volume 服务的节点被称做为存储节点。

cinder-scheduler
scheduler 经过调度算法选择最合适的存储节点建立 volume。

volume provider
数据的存储设备,为 volume 提供物理存储空间。 cinder-volume 支持多种 volume provider,每种 volume provider 经过本身的 driver 与cinder-volume 协调工做。

Message Queue
Cinder 各个子服务经过消息队列实现进程间通讯和相互协做。由于有了消息队列,子服务之间实现了解耦,这种松散的结构也是分布式系统的重要特征。

Database Cinder 有一些数据须要存放到数据库中,通常使用 MySQL。数据库是安装在控制节点上的,好比在咱们的实验环境中,能够访问名称为“cinder”的数据库。

物理部署方案

Cinder 的服务会部署在两类节点上,控制节点和存储节点。 咱们来看看控制节点 devstack-controller 上都运行了哪些 cinder-* 子服务。

cinder-api 和 cinder-scheduler 部署在控制节点上,这个很合理。

至于 cinder-volume 也在控制节点上可能有些同窗就会迷糊了:cinder-volume 不是应该部署在存储节点上吗?

要回答这个问题,首先要搞清楚一个事实: OpenStack 是分布式系统,其每一个子服务均可以部署在任何地方,只要网络可以连通。

不管是哪一个节点,只要上面运行了 cinder-volume,它就是一个存储节点,固然,该节点上也能够运行其余 OpenStack服务。

cinder-volume 是一顶存储节点帽子,cinder-api 是一顶控制节点帽子。在咱们的环境中,devstack-controller 同时戴上了这两顶帽子,因此它既是控制节点,又是存储节点。固然,咱们也能够用一个专门的节点来运行 cinder-volume。

这再一次展现了 OpenStack 分布式架构部署上的灵活性: 能够将全部服务都放在一台物理机上,用做一个 All-in-One 的测试环境;而在生产环境中能够将服务部署在多台物理机上,得到更好的性能和高可用。

RabbitMQ 和 MySQL 一般是放在控制节点上的。

另外,也能够用 cinder service list 查看 cinder-* 子服务都分布在哪些节点上

还有一个问题:volume provider 放在那里?

通常来说,volume provider 是独立的。cinder-volume 使用 driver 与 volume provider 通讯并协调工做。因此只须要将 driver 与 cinder-volume 放到一块儿就能够了。在 cinder-volume 的源代码目录下有不少 driver,支持不一样的 volume provider。

后面咱们会以 LVM 和 NFS 这两种 volume provider 为例讨论 cinder-volume 的使用,其余 volume provider 能够查看 OpenStack 的 configuration 文档。

下一节咱们将讨论 Cinder 的这些组件如何协调工做。

 

相关文章
相关标签/搜索