cinder是openstack中提供块存储服务的组件,主要是为虚拟机实例提供虚拟磁盘。
通过某种协议(SAS,SCSI,SAN,iSCSI等)挂接裸硬盘,然后分区、格式化创建的文件,或者直接使用裸硬盘存储数据的方式叫做块存储,每个裸硬盘通常也叫做Volume(卷)。
通过nfs,cifs等协议,需要挂载的远程文件系统,叫做文件系统存储。
一、理解块存储服务
在openstack中提供对卷从创建到删除整个生命周期的管理,从虚拟机实例的角度来看,挂载的每一个卷都是一块硬盘。openstack提供块存储服务的是cinder,具体功能如下:
提供api使用户能够查询和管理卷、卷快照以及卷类型
提供scheuler调度卷创建请求,合理优化存储资源的分配
通过driver架构支持多种后端存储方式
1)用户 向 API 发送请求
2)api对请求做一些必要的处理后,向messaging(rabbitmq)发送信息,让scheduler创建一个volume
3) scheduler从messaging获取到api发送的消息,然后执行调度算法,从若干存储节点选出节点A
4) scheduler向messaging发送一条消息,让存储节点创建volume
5)存储节点的volume 从messaging中获取到scheduler发给它的消息,然后通过driver在volume provider上创建volume
三、cinder组件详解
1、cinder-api
cinder-api是整个cinder组件的门户,所有的cinder的请求都首先由nova-api处理,它向外界暴露了若干HTTP REST API接口,在kesystone中可以查询到cinder-api的endpoints.
openstack endpoint list --service cinder
scheduler调度过程如下:
通过过滤器(filter)选择满足条件的存储节点
通过权重计算(weighting)选择最优(权重最大)的存储节点
(2)filter
当filter scheduler需要执行调度操作时,会让filter对计算节点进行判断,filter返回true或者false
配置文件中schedulerdefaultfilters选项指定filter scheduler使用的filter,默认如下
在过滤时,会将使用AvailabilityZoneFilter将不属于指定AvailabilityZone的存储节点过滤掉
<2>CapacityFilter
创建volume时,用户会指定volume的大小。CapactiyFilter的作用时将存储空间不能满足volume创建需求的存储节点过滤掉
(3)weighter
Filter Scheduler通过scheduler_default_weighers指定计算权重的weigher,默认为CapacityWeigher
在存储节点的配置文件/etc/cinder/cinder.conf中使用volume_driver选项配置使用的driver
cinder对volume的生命周期管理最终都是通过cinder-volume完成的,包括volume的create,extend,attach,snapshot,delete等