openstack中存储可以分为两类,如下图所示:
目前openstack支持三种类型的持久存储:块存储、对象存储和文件系统存储
十余年专业网站建设公司历程,坚持以创新为先导的网站服务,服务超过上千家企业及个人,涉及网站设计、成都app软件开发、微信开发、平面设计、互联网整合营销等多个领域。在不同行业和领域给人们的工作和生活带来美好变化。
因为目前Manila使用较少,重点为CInder和Swift
Cinder在OpenStack中的位置和作用
Cinder的核心功能是对卷的管理,允许对卷、卷的类型、卷的快照、卷备份进行处理。它为后端不同的存储设备提供给了统一的接口,不同的块设备服务厂商在Cinder中实现其驱动,可以被Openstack整合管理
Cinder API对外提供REST API,对操作需求进行解析,并调用处理方法:
Cinder scheduler负责收集后端上报的容量,能力信息,根据设定的算法完成卷到指定cinder-volume的调度,它通过过滤和称权,筛选出合适的后端:
根据后端的能力进行筛选
Cinder volume多节点部署,使用不同的配置文件、接入不同的后端设备,由各存储厂商插入Driver代码与设备交互,完成设备容量和能力信息收集,卷操作等。
Cinder默认的后端驱动是LVM
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
每层节点数没有限制,可以任意扩展