openstack中存储能够分为两类,以下图所示:
目前openstack支持三种类型的持久存储:块存储、对象存储和文件系统存储算法
由于目前Manila使用较少,重点为CInder和Swiftsql
Cinder在OpenStack中的位置和做用
Cinder的核心功能是对卷的管理,容许对卷、卷的类型、卷的快照、卷备份进行处理。它为后端不一样的存储设备提供给了统一的接口,不一样的块设备服务厂商在Cinder中实现其驱动,能够被Openstack整合管理数据库
Cinder API对外提供REST API,对操做需求进行解析,并调用处理方法:swift
Cinder scheduler负责收集后端上报的容量,能力信息,根据设定的算法完成卷到指定cinder-volume的调度,它经过过滤和称权,筛选出合适的后端:
根据后端的能力进行筛选后端
Cinder volume多节点部署,使用不一样的配置文件、接入不一样的后端设备,由各存储厂商插入Driver代码与设备交互,完成设备容量和能力信息收集,卷操做等。
Cinder默认的后端驱动是LVMapi
Cinder-volume会按期收集底层后端的容量信息,并通知Scheduler更新内存中的Backend信息架构
建立卷类型的目的是为了筛选不一样的后端存储,例如SSD,STAT,高性能,低性能,经过建立不一样的自定义卷类型,建立卷时自动给筛选出合适的后端存储负载均衡
提取收到的请求参数
经过配置的filter和输入参数后端进行过滤异步
Weigher计算后端进行权重分布式
选取最优的Backend并经过消息列队将请求发送到指定的后端
和Nova Scheduler相似,Cinder Scheduler也是通过Filter删选合适条件的后端,而后使用Weigher计算后端进行权重排序,最终选择出最合适的后端存储
提供接收到的请求参数
调用对应的Driver在后端建立世纪的卷
使用Driver返回的模型更新数据库中的记录
挂卷流程:挂卷时经过Nova和Cinder的配合最终将远端的卷链接到虚拟机所在的Host节点上,并最终经过虚拟机管理程序映射到内部的虚拟机中
Swift提供高度可用、分布式、最终一致的对象存储服务
Swift并非文件系统或者试试的数据存储系统,它称为对象存储,用于永久类型的静态数据的长期存储,这些存储能够检索,调整,必要时进行更新
最蛇和存储的数据类型的例子是虚拟机镜像,图片存储,邮件存储和存档备份
由于没有中心的单元或主控节点,Swift提供了更强的扩展性,冗余和持久性
Swift常常用于存储镜像或者用于存储虚拟机实例卷的备份副本
Swift应用
镜像存储后端:在Openstack中与镜像服务Glance结合,为其存储镜像文件
静态数据存储:因为swift的扩展能力,适合存储日志文件和数据备份仓库
Swift中对象存储URL以下所示:
https://swift.example.com/va/account/container/object
URL有两个部分:集权位置和存储位置
集群位置:swift.example.com/v1/
存储位置(对象):/account/containr/oject
存储位置有以下三种:
/account
帐户存储位置是惟一命名的存储区域,其中包含帐户自己的元数据(描述性信息)以及帐户中的容器列表
/account/container
容器存储位置是帐号内的用户定义的存储区域,其中包含容器自己和容器中的对象列表的元数据
/account/container/object
对象存储位置存储了数据对象及元数据的位置。
Proxy Server:对外提供对象服务API,因为采用无状态的REST请求协议,能够进行横向扩展来负载均衡
Account Server:提供帐户元数据和统计信息,并维护所含容器列表的服务,每一个帐号的信息被存储在一个SQLite数据库中
Container Server:提供容器元数据和统计信息,并维护所含对象列表的服务,每一个容器的信息也存储在一个SQLite数据库中
Object Server:提供对象元数据和内容服务,每一个对象的内容会以文件的形式存储在文件系统中,元数据会做为文件属性来存储
Replicator:检测本地分区副本和远程副本是否一致,发现不一致时会采用推式(Push)更新远程副本,而且确保被标记删除的对象从该文件系统中移除
Updater:当对象因为高负载的缘由而没法当即更新时,任务将会被序列化在本地文件系统中进行排队,以便服务恢复后进行异步更新
Auditor:检查对象,容器和帐户的完整性,若是发现比特级错误,文件将被隔离,并复制其余的副本以覆盖本地损坏的副本;其余类型错误会被记录到日志中
Account Reaper:移除标记为删除的帐户,删除其所包含的全部容器和对象
Swift经过Proxy server向外提供基于HTTP的REST服务接口,对帐户、容器和对象进行CRUD等操做
三层逻辑结构:Accout/Contianer/Object
每层节点数没有限制,能够任意扩展