http://zhumeng8337797.blog.163.com/blog/static/100768914201471244025163/
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主要由3个组件组成,cinder-api, cinder-scheduler和cinder-volume,如图1所示。
图1 Cinder Architecture
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
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 api提供rest接口,cinder client申请cinder service是通过rest接口。用户可以参照官方文档http://docs.openstack.org/api/openstack-block-storage/2.0/content/
Cinder内部的通信机制使用了Message Queue,支持AMQP协议的
AMQP model
# qpid-tool localhost
Management Tool for QPID
qpid:help
可以查看qpid-tool可以使用的命令,如list
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