Cinder在OpenStack中的位置

[云计算]OpenStack - Cinder

Cinder是OpenStack的一个组件,从Folsom版本从Nova-Volume中分离出来,为云平台提供统一接口,按需分配的,持久化的块存储服务(类似于Amazon EBS服务)。

Cinder的核心功能是对卷的管理,允许对卷,卷的类型,卷的快照、卷备份进行处理。它为后端不同的存储设备提供了统一的接口,不同的块设备服务厂商再Cinder中实现其驱动支持以与OpenStack进行整合。

Cinder逻辑架构

[云计算]OpenStack - Cinder

  • Cinder Client:封装 Cinder 提供的rest接口,以CLI形式提供给用户使用。比如:nova-compute、horizon 。

  • 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数据库

  • AMPQ:Advanced Message Queuing Protocol,一个提供统一消息服务的应用层标准高级消息队列协议。应用层协议的一个开放标准,为面向消息的中间件设计,不受产品和语言差异的影响。

Cinder组件

组件 功能
Cinder-api cinder模块对外唯一入口,cinder的endpoint,接受和处理rest请求
Cinder-scheduler 根据预定的调度过滤策略以及权重计算策略,选出合适的后端来处理任务
Cinder-volume 负责与后端存储进行对接,通过各厂商提供的driver将OpenStack操作转换为存储操作
Cinder-backup 实现将卷的数据备份到其他的存储介质

Cinder可扩展性

[云计算]OpenStack - Cinder

Cinder物理部署

[云计算]OpenStack - Cinder

  • Cinder-api,Cinder-scheduler,Cinder-volume可以选择部署到一个节点上,也可以分别部署。
  • API采用AA模式,由rabbitmq以负载均衡模式向3个节点分发任务,并同时从rabbitqmq收取Cinder-volume上报的能力信息,调度时,scheduler通过在DB中预留资源从而保证数据一致性。
  • Cinder-volume也采用AA模式,同时上报同一个backend容量和能力信息,并同时接受请求进行处理。
  • Rabbitmq,支持主备或集群(6.0及后续的版本)。
  • GaussDB,支持主备。

Cinder内部逻辑

[云计算]OpenStack - Cinder

Cinder卷管理

Cinder模块职能

[云计算]OpenStack - Cinder

Cinder与SAN对接

Cinder后端对接SAN,相应的Cinder-api接口或者命令对应磁阵的操作如下:LUN,逻辑单元号,卷

cinder操作 SAN上的对应操作
create_volume 创建一个LUN,执行命令(createlun –n name –lunsize 1 …)
delete_volume 删除一个LUN,执行命令(dellun –lun 5)
extend_volume 不同driver实现方式不同,LUN直接扩展或者创建个扩展LUN,然后进行合并
create_volume_from_image 创建一个LUN,将镜像下载到主机侧,将lun挂载给主机,将镜像数据拷贝到LUN,然后解除与主机的关系
Initialize_connection 将LUN和主机进行关联
terminate_connection 解除LUN和主机的关联关系
create_snapshot 创建快照,createsnapshot –lun 5 –n name

Cinder挂卷和卸卷流程分析

KVM场景下使用阵列挂卷流程

[云计算]OpenStack - Cinder

  1. 阵列侧添加主机和LUN的映射
  2. 主机侧扫描scsi总线
  3. 多路径生成虚拟磁盘
  4. Nova调用libvirt接口将磁盘添加到xml中

Nova挂卷流程

[云计算]OpenStack - Cinder

  • 发现iSCSI target

  • 添加一个iSCSI target node

  • 登录iSCSI target

  • 设置iSCSI会话开机自启动

  • 调用多路径的smartscan脚本扫描LUN

  • 在/dev/disk/by-id目录下生成多路径的设备

  • nova调用libvirt接口将生成的sd设备添加到虚拟机的xml文件中

Nova卸载卷流程

[云计算]OpenStack - Cinder

  • Libvirt将虚拟机xml中的设备删除

  • 根据libvirt xml中记录的磁盘的wwn,找到对应的sd设备

  • 调用smartdelete脚本,将sd设备删除

  • 删除多路径的wwn软连接

  • 检查iscsi会话是否还有必要存在,如果没有必要,将所有的iscsi会话logout