cinder是openstack中提供块存储服务的组件,主要是为虚拟机实例提供虚拟磁盘。
mysql
经过某种协议(SAS,SCSI,SAN,iSCSI等)挂接裸硬盘,而后分区、格式化建立的文件,或者直接使用裸硬盘存储数据的方式叫作块存储,每一个裸硬盘一般也叫作Volume(卷)。
算法经过nfs,cifs等协议,须要挂载的远程文件系统,叫作文件系统存储。sql
1、理解块存储服务数据库
在openstack中提供对卷从建立到删除整个生命周期的管理,从虚拟机实例的角度来看,挂载的每个卷都是一块硬盘。openstack提供块存储服务的是cinder,具体功能以下:后端
提供api使用户可以查询和管理卷、卷快照以及卷类型
api
提供scheuler调度卷建立请求,合理优化存储资源的分配bash
经过driver架构支持多种后端存储方式架构
1)cinder-apiide
接收api请求,调用cinder-volume
优化
2)cindere-volume
管理卷的服务,与volume provider协调工做,管理volume的生命周期,运行cinder-volum的服务的节点被称做为存储节点
3)cinder-scheduler
scheduler经过调度算法选择最合适的存储节点建立卷
4)volume provider
数据的存储设备,为volume提供物理存储空间
5)Message Queue
cinder 各个子服务经过消息列队实现进程间通讯和相互协做
6)database
存储cinder一些数据库,通常使用mysql
2、cinder流程
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
3、cinder组件详解
一、cinder-api
cinder-api是整个cinder组件的门户,全部的cinder的请求都首先由nova-api处理,它向外界暴露了若干HTTP REST API接口,在kesystone中能够查询到cinder-api的endpoints.
openstack endpoint list --service cinder
客户端能够将请求发送到endponits指定的地址,向cinder-api请求操做,大部分的api请求均可以在dashboard上进行
cinder-api对接收到的http api请求会作以下处理:
检查客户端传入的参数是否合法有效
调用cinder其余子服务的处理客户端请求
将cinder其余子服务返回的结果序列号返回给客户端
二、cinder-scheduler
建立volume时,cinder-scheduler会基于容量、volume type等条件选择出最合适的存储节点,而后让其建立volume
(1)filter scheduler
filter scheduler是cinder-schedule默认的调度器
在/etc/cinder/cinder.conf中,cinder经过schedulerdriver,schedulerdefault_filters和scheduler defaultweighers三个参数来配置cinder-scheuler
scheduler调度过程以下:
经过过滤器(filter)选择知足条件的存储节点
经过权重计算(weighting)选择最优(权重最大)的存储节点
(2)filter
当filter scheduler须要执行调度操做时,会让filter对计算节点进行判断,filter返回true或者false
配置文件中schedulerdefaultfilters选项指定filter scheduler使用的filter,默认以下
filter scheduler将按照列表中顺序依次过滤
<1> AvailabilityZoneFilter
为提升容灾性和提供隔离服务,能够将存储节点和计算节点划分不一样Availability zone,建立volume时,须要指定volume所属的availability zone
在过滤时,会将使用AvailabilityZoneFilter将不属于指定AvailabilityZone的存储节点过滤掉
<2>CapacityFilter
建立volume时,用户会指定volume的大小。CapactiyFilter的做用时将存储空间不能知足volume建立需求的存储节点过滤掉
<3>CapabilitiesFilter
不一样的Volume Provider有本身的特性,用户经过建立volume时指定类型所须要的类型。
volume类型能够在管理员-系统-卷菜单中进行管理指定
(3)weighter
Filter Scheduler经过scheduler_default_weighers指定计算权重的weigher,默认为CapacityWeigher
三、cinder-volume
openstack上对volume的操做,最后都是交给cinder-volume来完成的。
cinder-volume自身并无论理整整的存储设备,存储设备是由volume provider管理的,cinder-volume与volume provider一块儿实现volume生命周期管理,它经过dirver架构支持多种volume provider.
cinder-volume为这些volume provider 定义了统一的接口,volume provider只须要实现这些接口,就能够Driver的形式即插即用到openstack系统中。
在存储节点的配置文件/etc/cinder/cinder.conf中使用volume_driver选项配置使用的driver
默认是使用LVM 逻辑卷
cinder-volume会按期向cinder报告,从而让cinder确认得知每一个存储节点的空闲容量信息
cinder对volume的生命周期管理最终都是经过cinder-volume完成的,包括volume的create,extend,attach,snapshot,delete等