理解 Block Storage
操作系统获得存储空间的方式一般有两种:
通过某种协议(SAS,SCSI,SAN,iSCSI 等)挂接裸硬盘,然后分区、格式化、创建文件系统;或者直接使用裸硬盘存储数据(数据库)
通过 NFS、CIFS 等 协议,mount 远程的文件系统
第一种裸硬盘的方式叫做 Block Storage(块存储),每个裸硬盘通常也称作 Volume(卷)
第二种叫做文件系统存储。NAS 和 NFS 服务器,以及各种分布式文件系统提供的都是这种存储。
理解 Block Storage Service
Block Storage Servicet 提供对 volume 从创建到删除整个生命周期的管理。从instance 的角度看,挂载的每一个 Volume 都是一块硬盘。
OpenStack 提供 Block Storage Service 的是 Cinder,
其具体功能是:
1、提供 REST API 使用户能够查询和管理 volume、volume snapshot 以及 volume type
2、提供 scheduler 调度 volume 创建请求,合理优化存储资源的分配
3、通过 driver 架构支持多种 back-end(后端)存储方式,包括 LVM,NFS,Ceph 和其他诸如 EMC、IBM 等商业存储产品和方案
1.OpenStack中的存储
①临时存储(Ephemeral Storage)
- 如果只部署了Nova服务,则默认分配给虚拟机的磁盘是临时的,当虚拟机终止后,存储空间也会被释放。
- 默认情况下,临时存储以文件形式放置在计算节点的本地磁盘上。
②持久性存储(Persistent Storage)
- 持久化存储设备的生命周期独立于任何其他系统设备或资源,存储的数据一直可用,无论虚拟机是否运行。
- 当虚拟机终止后,持久性存储上的数据仍然可用
- 目前OpenStack支持的三种类型的持久性存储:块存储、对象存储、文件系统存储
2.OpenStack中的持久化存储
①块存储
- 由cinder提供块存储
- 操作对象是磁盘,直接挂载到主机,一般用于主机的直接存储空间和数据库应用,DAS和SAN都可以提供块存储
②对象存储
- 由swift提供对象存储
- 操作对象是对象( object,一个对象名称就是一个域名地址,可以直接通过REST API的方式访问对象)
③文件系统
- 由manila提供文件存储(使用较少)
- 操作对象是文件和文件夹在存储系统上增加了文件系统,再通过NFS或CIFS协议进行访问
3.存储类型对比
4.cinder功能
- Cinder的核心功能是对卷的管理,允许对卷、卷的类型、卷的快照、卷备份进行处理。为云平台提供统一接口,按需分配的,持久化的块存储服务(类似于Amazon EBS服务)。通过驱动的方式接入不同种类的后端存储(本地存储,网络存储,FCSAN,IPSAN)。
5.cinder架构
lCinder Client
封装Cinder提供的rest接口,以CLI形式供用户使用。
l Cinder API
- 对外提供rest API,对操作需求进行解析,对API进行路由寻找相应的处理方法。包含卷的增删改查(包括从源卷、镜像、快照创建)、快照增删改查、备份、volume type管理、挂载/卸载(Nova调用)等;
- 接收API请求,调用cinder-volume
l Cinder Scheduler
- 负责收集backend上报的容量、能力信息,根设定的算法完成卷到指定cinder-volume的调度。通过调度算法选择最合适的存储节点创建 volume。
- cinder-scheduler通过过滤(通过配置的file和输入参数)和称权,筛选出合适的后端:
1.列出所有的后端
2.根据后端的能力进行筛选
a-Drivers定期报告后端的能力和状态
b-管理员创建的卷类型(volume type)
c-创建卷时,用户指定卷类型
3.根据权重给后端排序
4.返回最合适的后端
- 会根据预定的策略(比如不同的调度算法)选择合适的cinder-volume节点来处理用户的请求。在用户的请求没有指定具体的存储节点时,会使用cinder-scheduler选择一个合适的节点,如果用户请求已经指定了具体的存储节点,则该节点上的cinder-volume会进行处理,并不需要cinder-scheduler的参与。
l Cinder Volume
- 多节点部署,使用不同的配置文件、接入不同的backend设备,由各存储厂商插入driver代码与设备交互完成设备容量和能力信息收集、卷操作。
- 提取接收到的请求参数
- 调用对应的 Driver在后端创建实际的卷
- 使用 Driver返回的模型更新数据库中的记录
- 管理 volume 的服务,与 volume provider 协调工作,管理 volume 的生命周期。运行 cinder-volume 服务的节点被称作为存储节点。多个这样的节点便构成了一个存储资源池。
- cinder默认的后端驱动为LVM
lvolume provider
- 数据的存储设备,为 volume 提供物理存储空间。
- cinder-volume 支持多种 volume provider,每种 volume provider 通过自己的 driver 与cinder-volume 协调工作。
l Cinder Backup
- 实现将卷的数据备份到其他存储介质(目前SWIFT/Ceph/TSM提供了驱动)。支持将存储卷备份到Openstack对象存储,比如Swift、Ceph对象存储等。
l SQL DB
- 提供存储卷、快照、备份、service等数据,支持Mysql、PG、MSSQL等SQL数据库。
6.cinder架构说明
7.cinder架构部署(以SAN存储为例)---可以避免单点故障
- Cinder-api, Cinder-scheduler, Cinder-volume以选择部署到一个节点上,也可以分别部署
- API采用AA模式, Haproxy作为LB,分发请求到多个Cinder API
- Scheuer也采用AA模式,有 irabbitmq以负载均衡模式向3个节点分发任务,井同时从 .rabbitqmq.收取Cinder volume上报的能力信息,调度时, scheduler通过在DB中预留资源从而保证数据一致性
- Cinder Volume也采用AA模式,同时上报同一个backend容量和能力信息,井同时接受请求进行处理Rabbitmq,支持主备或集群。
- MYSQL,支持主备或集群
8.用户申请存储资源流程
用户发送创建卷的请求到cinder-api后,cinder-api向keystone验证token,验证通过后去数据库中查询卷的规格是否超过已有的配额,若没有超过,则发送创建卷的请求到MQ,cinder-scheduler收到cinder-api的请求后,会去数据库中查询各个主机的存储信息,根据卷的规格和主机剩余存储容量调度算法得出最优的cinder-volume去创建卷。选择最优的Backend并通过消息队列将请求发送到指定的后端,MQ去向最优的cinder-volume发送创建卷的请求,cinder-volume调用下端的volume driver去命令存储介质创建符合卷规格的卷,创建成功后,会返回创建结果给cinder-volume,cinder-volume使用Driver返回的模型去更新数据库中相关主机的存储记录,并去对接nova-compute,将创建的卷挂载到对应的主机上。
卷的生命周期管理(创建、删除、状态维护等)由Cinder负责,卷的使用(挂载、卸载)由Nova发起。
注:cinder API在接受到创建卷的需求之前,会先收到创建卷类型的API请求,目的是为了筛选不同的后端存储,通过创建不同的自定义卷类型,创建卷时会自动筛选出合适的后端存储,API收到创建卷的请求后,会发送给cinder-scheduler分配创建卷的任务,cinder-scheduler根据cinder-volume上报的后端存储信息状态运行调度算法过滤并选择最优的HOST,然后会将操作请求发送给对应的cinder-volume,然后由cinder-volume请求阵列后端创建指定的卷具体提供存储的还是后端的存储设备。cinder-volume会定期收集后端存储阵列容量等信息,并会通知cinder-scheduler来更新内存中的Backend信息。
创建卷类型的目的是为了筛选不同的后端存储,例如SSD、SATA、高性能、低性能等,通过创建不同的自定义卷类型,创建卷时自动筛选出合适的后端存储。
9.cinder挂载卷流程
- 挂卷是通过Nova和Cinder的配合最终将远端的卷连接到虚拟机所在的Host节点上,并最终通过虚拟机管理程序映射到内部的虚拟机中。
Nova调用Cinder API创建卷,传递主机的信息,如hostname, iSCSI initiator name, FC WWPNs
Cinder API将该信息传递给Cinder Volume。
Cinder Volume通过创建卷时保存的host信息找到对应的Cinder Driver。
Cinder Driver通知存储允许该主机访问该卷,并返回该存储的连接信息(如iSCSI iqn,portal,FC Target WWPN,NFS path等)
Nova调用针对于不同存储类型进行主机识别磁盘的代码( Cinder 提供了brick模块用于参考)实现识别磁盘或者文件设备。
Nova通知Cinder已经进行了挂载。
Nova将主机的设备信息传递给hypervisor来实现虚拟机挂载磁盘。
10.cinder主要操作
cinder主要操作主要三个资源:
Volume
块设备卷,提供创建,删除,扩容,挂载/卸载等功能
Snapshot
针对块设备卷的快照创建,删除,回滚等功能
Backup
提供对块设备卷的备份,恢复能力