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 的逻辑架构图 :
Cinder 包含如下几个组件:
- cinder-api
- cinder-volume
- cinder-scheduler
- volume provider
- Message Queue
- 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