[云计算]OpenStack - Cinder
Cinder在OpenStack中的位置
Cinder是OpenStack的一个组件,从Folsom版本从Nova-Volume中分离出来,为云平台提供统一接口,按需分配的,持久化的块存储服务(类似于Amazon EBS服务)。
Cinder的核心功能是对卷的管理,允许对卷,卷的类型,卷的快照、卷备份进行处理。它为后端不同的存储设备提供了统一的接口,不同的块设备服务厂商再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可扩展性
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内部逻辑
Cinder卷管理
Cinder模块职能
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场景下使用阵列挂卷流程
- 阵列侧添加主机和LUN的映射
- 主机侧扫描scsi总线
- 多路径生成虚拟磁盘
- Nova调用libvirt接口将磁盘添加到xml中
Nova挂卷流程
-
发现iSCSI target
-
添加一个iSCSI target node
-
登录iSCSI target
-
设置iSCSI会话开机自启动
-
调用多路径的smartscan脚本扫描LUN
-
在/dev/disk/by-id目录下生成多路径的设备
-
nova调用libvirt接口将生成的sd设备添加到虚拟机的xml文件中
Nova卸载卷流程
-
Libvirt将虚拟机xml中的设备删除
-
根据libvirt xml中记录的磁盘的wwn,找到对应的sd设备
-
调用smartdelete脚本,将sd设备删除
-
删除多路径的wwn软连接
-
检查iscsi会话是否还有必要存在,如果没有必要,将所有的iscsi会话logout