一、Cinder介绍
Cinder(Block Storage service)提供对volume从创建到删除整个生命周期的管理,从instance的角度看,挂载的每一个volume都是一块硬盘。
OpenStack早起版本使用nova-volume为云平台虚拟机提供持久性块存储。从F版本后,就把最为Nova组成部分的nova-volume分离了出来,形成了独立的Cinder组件。
二、Cinder主要组件
1、cinder-api
负责接收和处理外界的API请求,通过消息队列服务调用cinder-volume执行操作。
2、cinder-volume
cinder-volume服务运行在存储节点上,用于管理存储空间,主要执行卷管理相关的功能管理,与volume provider协调工作,OpenStack对Volume的操作,最后都是交给cinder-volume来完成的。
cinder-volume自身并不管理真正的存储设备,存储设备是由volume provider管理的。cinder-volume与volume provider一起实现volume生命周期的管理。
每个存储节点都会运行一个卷服务,若干个这样的存储节点联合起来可以构成一个存储资源池。
3、cinder-scheduler
scheduler通过调度算法选择最合适的存储节点创建volume,功能和nova-scheduler类似。
4、cinder-backup
cinder-backup服务用于将Cinder卷备份到其他的存储系统上去,目前支持的有以Ceph、Swift和IBM TSM为后端存储的备份存储系统。
5、Messaging queue
Cinder各个子服务通过消息队列实现进程间通信和相互协作。因为有了消息队列,子服务之间实现了解耦,这种松散的结构也是分布式系统的重要特征。
6、Database
Cinder有一些数据需要存放到数据库中,一般使用MySQL。数据库是安装在控制节点上的。
三、Cinder各组件协调工作
- 客户(可以是 OpenStack 最终用户,也可以是其他程序)向API(cinder-api)发送请求:“帮我创建一个volume”;
- API对请求做一些必要处理后,向Messaging(RabbitMQ)发送了一条消息:“让Scheduler创建一个 volume”;
- Scheduler(cinder-scheduler)从Messaging获取到API发给它的消息,然后执行调度算法,从若干计存储点中选出节点 A;
- Scheduler向Messaging发送了一条消息:“让存储节点 A 创建这个volume”;
- 存储节点 A 的Volume(cinder-volume)从Messaging中获取到Scheduler发给它的消息,然后通过driver在volume provider上创建volume。
四、Volume Provider
以Cinder为例,存储节点支持多种volume provider,包括 LVM, NFS, Ceph, GlusterFS,以及EMC, IBM 等商业存储系统。
cinder-volume为这些volume provider定义了统一的driver接口,volume provider只需要实现这些接口,就可以driver的形式即插即用到OpenStack中。下面是cinder driver的架构示意图:
在cinder-volume的配置文件/etc/cinder/cinder.conf中volume_driver配置项设置该存储节点使用哪种volume provider的driver,比如使用LVM,设置成如下:
volume_driver=cinder.volume.drivers.lvm.LVMVolumeDriver