Openstack Cinder

Cinder是在虚拟机和具体存储设备之间引入了一层“逻辑存储卷”的抽象,Cinder本身并不是一种存储技术,只是提供一个中间的抽象层,Cinder通过调用不同存储后端类型的驱动接口来管理相对应的后端存储,为用户提供统一的卷相关操作的存储接口。

https://www.cnblogs.com/luohaixian/p/8134967.html

Cinder 的架构

https://www.cnblogs.com/CloudMan6/p/5573159.html

Block Storage

Block Storage Service

OpenStack 提供 Block Storage Service 的是 Cinder

cinder 的逻辑架构图 :

 Openstack Cinder_第1张图片

Cinder 包含如下几个组件:

  1. cinder-api
  2. cinder-volume
  3. cinder-scheduler
  4. volume provider
  5. Message Queue
  6. Database

 

服务 描述
cinder-api 进入Cinder的HTTP接口。
cinder-backup 用于提供存储卷的备份功能,支持将块存储卷备份到OpenStack备份存储后端,比如Swift、Ceph等。
cinder-manage 用于cinder管理的命令行接口。
cinder-rtstool 伴随LIO(Linux-IO Target)支持而增加的工具。
cinder-scheduler 根据预定的策略选择合适的cinder-volume节点来处理用户的请求。
cinder-volume 通过相关驱动程序架构直接与块存储服务进行交互。
cinder-volume-usage-audit 用于卷使用情况统计。

cinder-api

接收 API 请求,调用 cinder-volume 执行操作

cinder-api的作用主要是为用户提供Restful风格的接口,接收client的请求,在该服务中可以对用户的权限和传入的参数进行提前的检查,无误后方才将请求信息交给消息队列,由后续的其它服务根据消息队列信息进行处理

https://developer.openstack.org/api-ref/block-storage/v3/index.html#volumes-volumes

cinder-volume

管理 volume 的服务,与 volume provider 协调工作,管理 volume 的生命周期。

运行 cinder-volume 服务的节点被称作为存储节点。

cinder-volume是部署在存储节点上的服务,cinder-volume的主要功能是对后端存储进行一层抽象封装,为用户提供统一的接口,cinder-volume通过调用后端存储驱动API来进行存储相关的操作。

cinder-volume服务执行的功能可以由如下表列出:

卷操作

创建卷

克隆卷

扩展卷

删除卷

卷虚机从操作

挂载卷到虚拟机

从虚拟机里分离出卷

卷-快照操作

创建卷的快照

从已有卷快照创建卷

删除快照

卷-镜像操作

从镜像创建卷

从卷创建镜像

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

该服务中包含过滤器算法和权重计算算法,Cinder默认的过滤算法有三个:

(1)AvailabilityZoneFilter过滤算法:判断cinder host的availability zone是否与目标zone一致,否则过滤掉该节点;

(2)CapacityFilter过滤算法:判断host的可用存储空间是否不小于要分配卷的大小,否则过滤掉该节点;

(3)CapabilitiesFilter过滤算法:检查host的属性否和volume type中的extra specs相同,不相同则过滤掉该节点。

通过指定的过滤算法可能会得到一系列的host,这时还需使用权重计算算法来计算各节点的权重值,权重值最大的会认为是最优节点,cinder-scheduler会基于消息队列服务的rpc调用来让最优节点对请求进行处理,以下列出几个计算权重的算法:

(1)AllocatedCapacityWeigher算法:存储空间使用最小的节点为最优节点;

(2)CapacityWeigher算法:可用存储空间最大的节点成为最优节点;

(3)ChanceWeigher算法:随机选择一个节点作为最优节点。

volume provider
数据的存储设备,为 volume 提供物理存储空间。 cinder-volume 支持多种 volume provider,每种 volume provider 通过自己的 driver 与cinder-volume 协调工作。

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

Database Cinder 有一些数据需要存放到数据库中,一般使用 MySQL。数据库是安装在控制节点上的,比如在我们的实验环境中,可以访问名称为“cinder”的数据库。

Cinder 个组件如何协同工作及其设计思想

Volume 创建流程

cinder-api

客户端可以将请求发送到 endponits 指定的地址,向 cinder-api 请求操作。

cinder-api 接受哪些请求呢?简单的说,只要是 Volume 生命周期相关的操作,cinder-api 都可以响应。

cinder-scheduler

创建 Volume 时,cinder-scheduler 会基于容量、Volume Type 等条件选择出最合适的存储节点,然后让其创建 Volume。

cinder-volume

cinder-volume 在存储节点上运行,OpenStack 对 Volume 的操作,最后都是交给 cinder-volume 来完成的。 cinder-volume 自身并不管理真正的存储设备,存储设备是由 volume provider 管理的。cinder-volume 与 volume provider 一起实现 volume 生命周期的管理。通过 Driver 架构支持多种 Volume Provider,cinder-volume 为这些 volume provider 定义了统一的接口,volume provider 只需要实现这些接口,就可以 Driver 的形式即插即用到 OpenStack 系统中。

Cinder 命令

https://www.xuebuyuan.com/1638624.html

https://www.xuebuyuan.com/1638624.html

https://blog.csdn.net/qq806692341/article/details/52397440

cinder -h

cinder help xxx

 

 

你可能感兴趣的:(OpenStack)