Cinder 背景

Openstack是当前热门的云服务平台,目前各大企业及个人都积极参与的开源项目,具有Openstack是由NASA和RackSpace合作研发的云计算平台,可以帮助企业实现类似于Amazon EC2和S3的云服务基础架构服务即Iaas(Infrastructure as a Service)平台。

Cinder是Openstack中的一个重要组件,为Openstack提供块存储服务。本文主要目的是使开发者或者用户能够初步了解cinder的运行服务机制,主要描述Cinder的基本架构组成,以及cinder各组件主要功能和各组件之间的通信机制。

Cinder服务是Openstack的一个重要组件,为Openstack提供块存储服务。Cinder是Openstack Folsom版本开始由Nova-volume分离出来。Cinder为用户提供的块存储是在整个生命周期中永久存在的。

Cinder Architecture

Cinder主要由3个组件组成,cinder-api, cinder-scheduler和cinder-volume,如图1所示。

 

图1 Cinder Architecture

 


openstack SFC的应用场景 openstack cinder对接fc存储_ci


 

 

 

Cinder-api

Cinder-api是cinder服务的endpoint,提供rest接口,负责处理client请求,并将请求发送至对应的Message Queue。

Cinder-scheduler

负责cinder请求调度,其核心部分就是scheduler_driver, 作为scheduler manager的driver,负责具体的调度处理,grizzly版本的cinder-scheduler部分提供了三个scheduler driver分别是:

l ChanceScheduler: 随机选取cinder-volume service创建cinder volume

l SimpleScheduler: 根据availability zone 和 cinder-volume service的capacity进行选择

l FilterScheduler: 可以选择具体的filter规则,满足filter规则的cinder-volume service将会通过筛选,创建cinder volume

默认Cinder-Scheduler使用FilterScheduler作为调度volume service的driver。

FilterScheduler主要机制是filter 和weighting。

Filter即cinder-scheduler分析用户创建volume请求,删选cinder-volume service

目前Cinder-scheduler支持的filter包括:

l CapabilitiesFilter:根据用户创建的volume type类型筛选cinder-volume service

l RetryFilter:过滤创建volume失败的cinder-volume service,在reschedule阶段起作用。

l CapacityFilter:过滤可用容量不足以满足用户请求的cinder-volume service

l JsonFilter:支持Json语法自定义filter规则,选择cinder-volume service

l AvailabilityZoneFilter:根据cinder-volume属性AvailabilityZone选择指定Zone的cinder-volume service。 Cinder-volume service的AvailabilityZone是通过配置文件storage_availability_zone进行指定。

使用cinder service-list可以查看cinder service所在的AvailabilityZone


 

Weighing即根据cinder-volume service的可用资源等情况赋予权重,目前支持的Weigher:

CapacityWeigher:cinder-vloume service 的可用Capacity越多,weight之越大。

图2 cinder-scheduler


openstack SFC的应用场景 openstack cinder对接fc存储_ci_02


 

FilterScheduler具有很大的灵活性,开发者可以根据自身需要定义filter和weigher,满足不同的调度需求。如图2所示,经过filter筛选符合要求的cinder-volume service,然后根据cinder-volume 的权重进行排序,最终选择权重值最大的cinder-volume service用于提供volume存储服务。

Cinder-volume

Cinder-volume Service负责具体的volume创建请求处理,由不同后端存储提供volume存储空间。目前各大存储厂商已经积极地将存储产品的driver贡献到cinder社区。

目前支持的后端存储系统,可参见:

https://wiki.openstack.org/wiki/CinderSupportMatrix

Cinder通信机制

Cinder api提供rest接口,cinder client申请cinder service是通过rest接口。用户可以参照官方文档http://docs.openstack.org/api/openstack-block-storage/2.0/content/

 

Cinder内部的通信机制使用了Message Queue,支持AMQP协议的

AMQP model

openstack SFC的应用场景 openstack cinder对接fc存储_权重_03

openstack SFC的应用场景 openstack cinder对接fc存储_Cinder_04

# qpid-tool localhost

Management Tool for QPID

qpid:help

可以查看qpid-tool可以使用的命令,如list

openstack SFC的应用场景 openstack cinder对接fc存储_ci_05


 

qpid: list queue查看qpid当前活跃的queue

由于queue过多,这里仅是与cinder相关的几个queue

ID   Created   Destroyed  Index
======================================================================
746  07:10:35  -          1067.cinder-scheduler
747  07:10:35  -          1067.cinder-scheduler:devr1n15
748  03:08:12  -          1067.cinder-scheduler:localhost.localdomain
749  04:02:23  -          1067.cinder-scheduler_fanout_3c8a85fa3fb9411192ac9dfeea4b1d40
750  08:42:14  -          1067.cinder-volume
751  08:50:37  -          1067.cinder-volume:cinder01
752  08:42:14  -          1067.cinder-volume:devr1n15
753  08:42:14  -          1067.cinder-volume_fanout_cc3699bd831940b8911c0ceab201bbd6
Qpid:list exchange
ID   Created   Destroyed  Index
======================================================================
616  07:10:35  -          1067.cinder-scheduler_fanout
 617  07:10:35  -          1067.cinder-volume_fanout