OpenStack之Cinder

半兽人 发表于: 2023-03-10   最后更新时间: 2023-03-10 19:08:24  
{{totalSubscript}} 订阅, 898 游览

理解块存储

操作系统获得存储空间的方式一般有两种:

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

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

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

理解 Cinder

Block Storage Servicet 提供对 volume 从创建到删除整个生命周期的管理。从实例的角度看,挂载的每一个 Volume 都是一块硬盘。

OpenStack 提供 Block Storage Service 的就是 Cinder

OpenStack Cinder

Cinder功能

  1. 提供 REST API 使用户能够查询和管理volumevolume snapshot 以及 volume type
  2. 提供 scheduler 调度 volume 创建请求,合理优化存储资源的分配。
  3. 通过 driver 架构支持多种 back-end(后端)存储方式,包括 LVM,NFS,Ceph 和其他诸如 EMC、IBM 等商业存储产品和方案。

OpenStack中的存储

临时存储(Ephemeral Storage)

  • 如果只部署了Nova服务,则默认分配给虚拟机的磁盘是临时的,当虚拟机终止后,存储空间也会被释放。
  • 默认情况下,临时存储以文件形式放置在计算节点的本地磁盘上。

持久性存储(Persistent Storage)

  • 持久化存储设备的生命周期独立于任何其他系统设备或资源,存储的数据一直可用,无论虚拟机是否运行。
  • 当虚拟机终止后,持久性存储上的数据仍然可用。
  • 目前OpenStack支持的三种类型的持久性存储:块存储对象存储文件系统

Cinder架构

cinder架构

  • Cinder Client封装Cinder提供的rest接口,以CLI形式供用户使用。
  • Cinder API对外提供rest API,对操作需求进行解析,对API进行路由寻找相应的处理方法。包含卷的增删改查(包括从源卷、镜像、快照创建)、快照增删改查、备份、volume type管理、挂载/卸载(Nova调用)等。
  • Cinder Scheduler负责收集backend上报的容量、能力信息,根设定的算法完成卷到指定cinder-volume的调度。
  • Cinder Volume多节点部署,使用不同的配置文件、接入不同的backend设备,由各存储厂商插入driver代码与设备交互完成设备容量和能力信息收集、卷操作。
  • Cinder Backup实现将卷的数据备份到其他存储介质(目前SWIFT/Ceph/TSM提供了驱动)
  • SQL DB提供存储卷、快照、备份、service等数据,支持Mysql、PG、MSSQL等SQL数据库。

Cinder架构说明

Cinder架构说明

Cinder架构部署:以SAN存储为例

  • Cinder-api,Cinder-Scheduler,Cinder-Volume可以选择部署到一个节点上,也可以分别部署。
  • API采用AA模式,Haproxy作为LB,分发请求到多个Cinder API。
  • Scheduler也采用AA模式,有rabbitmq以负载均衡模式向3个节点发放任务,并同时从rabbitmq收取Cinder volume上报的能力信息,调度时,Scheduler通过在DB中预留资源从而保证数据一致性。
  • Cinder Volume也采用AA模式,同时上报一个backend容量和能力信息,并同时接受请求进行处理。
  • RabbitMQ,支持主备或集群。
  • MySQL,支持主备或集群。
  • Cinder可以避免单点故障。

Cinder架构部署

Cinder组件详细讲解

API

Cinder API对外提供REST API,对操作需求进行解析,并调用处理方法:

  • 卷create/delete/list/show
  • 快照create/delete/list/show
  • 卷attach/detach(Nova调用)
  • 其他:
    • Volume types
    • Quotas
    • Backups

Scheduler

Cinder scheduler负责收集后端上报的容量、能力信息,根据设定的算法完成卷到制定cinder-volume的调度。

通过过滤和称权,筛选出合适的后端:

  1. 列出所有后端
  2. 根据后端的能力进行筛选
  3. 根据权重给后端排序
  4. 返回最合适的后端

根据预定的策略(比如不同的调度算法)选择合适的cinder-volume节点来处理用户的请求:

  1. Drivers定期报告后端的能力和状态
  2. 管理员创建的卷类型(Volume type)
  3. 创建卷时,用户指定卷类型

Volume

Cinder Vlomue多节点部署,使用不同的配置文件、接入不同的后端设备,由各存储厂商插入Driver代码与设备交互,完成设备容量和能力信息收集、卷操作等。

Cinder默认的后端驱动是LVM。

Cinder Vlomue

Cinder典型工作流程

Cinder创建卷流程

创建卷类型的目的是为了筛选不同的后端存储,例如SSD、SATA、高性能、低性能等,通过创建不同的自定义卷类型,创建卷时自动筛选出合适的后端存储。
Cinder创建卷流程

Cinder API

  1. 检查参数合法性(用户输入,权限,资源是否存在等)。
  2. 准备创建的参数字典,预留和提交配额。
  3. 在数据库中创建对应的数据记录。
  4. 通过消息队列将请求和参数发送到Scheduler。

Cinder Scheduler

  1. 提取接收到的请求参数
  2. 通过配置的filter和输入参数对后端进行过滤
    • Availability_zone_filter
    • Capacity_filter
    • Capabilities_filter
    • Affinity_filter(SameBackendFilter/DifferentBackendFilter)
    • ……
  3. Weigher计算后端进行权重
    • CapacityWeigher/AllocatedCapacityWeigher
    • ChanceWeigher
    • GoodnessWeigher
    • ……
  4. 选取最优的Backend并通过消息队列将请求发送到指定的后端。

Cinder Volume

  1. 提取接收到的请求参数
  2. 调用对应的Driver在后端创建实际的卷
  3. 使用Driver返回的模型更新数据库中的记录

Cinder挂载卷流程

挂载流程:挂卷是通过Nova和Cinder的配合最终将远端的卷连接到虚拟机所在的Host节点上,并最终通过虚拟机管理程序映射到内部的虚拟机中。

  • Cinder调用Cinder API创建卷,传递主机的信息,如hostname,iSCSI initiator name,FC WWPNs
  • Cinder API将该信息传递给Cinder Volume
  • Cinder Volume通过创建卷时保存的host信息找到对应的Cinder Driver
  • Cinder Driver通知存储允许该主机访问该卷,并返回该存储的连接信息(如iSCSI iqn,portal,FC target WWPN,NFS path等)
  • Nova调用针对于不同存储类型进行主机识别磁盘的代码(Cinder提供了brick模块用于参考)实现识别磁盘或文件设备。
  • Nova通知Cinder已经进行了挂载。
  • Nova将主机的设备信息传递给hypervisor来实现虚拟机挂载磁盘。

Cinder挂载卷流程

总结

OpenStack Cinder是一个开源的块存储服务,为OpenStack云平台提供可扩展的、可靠的存储服务。

Cinder的主要功能包括:

  • 创建、删除和管理块存储卷;
  • 管理块存储卷的快照;
  • 卷的扩容和缩小;
  • 卷的迁移和复制等。

Cinder通过可插拔的存储后端驱动支持多种存储设备,包括:

  • 本地存储(例如LVM、Ceph等);
  • 网络存储(例如iSCSI、FC等)。

Cinder的架构由三个主要组件组成:

  1. API:接收来自用户和其他OpenStack服务的请求,并将它们发送给调度程序。
  2. 调度程序:选择最适合的存储后端来处理请求,并将它们发送给相应的卷管理器。
  3. 卷管理器:与存储后端交互来执行请求操作。

Cinder还提供了一些高级功能,例如:

  • 卷类型:定义卷的特定功能和限制,例如QoS、多路径和快照支持。
  • 卷加密:提供数据加密保护。
  • 卷共享:允许多个虚拟机共享同一个卷。

总的来说,Cinder提供了一种可靠、灵活和可扩展的块存储服务,为OpenStack云平台中的各种应用程序和服务提供了强大的存储支持。

更新于 2023-03-10
在线,1小时前登录

查看OpenStack更多相关的文章或提一个关于OpenStack的问题,也可以与我们一起分享文章