大家好,想必大家也听说过 openstack ,很多人在学习过程中都感觉openstack 整个架构比较复杂,涉及到的组件较多,学习也比较吃力。
一、认识 OpenStack
OpenStack is a cloud operating system that controls large pools of compute, storage, and networking resources throughout a datacenter, all managed through a dashboard that gives administrators control while empowering their users to provision resources through a web interface.
以上是官网对 OpenStack 的定义,OpenStack 对整个数据中心的计算、存储以及网络资源进行统一的管理。云计算平台是一个面向服务层面的架构,按照提供服务的不同可分为 IaaS(Infrastructure as a Service,基础设施即服务)、PaaS(Platform as a Service,平台即服务)和 SaaS(Software as a Service,软件即服务)。由上述官网定义来看,OpenStack 针对的是 IT 基础设施,是 IaaS 层的云操作系统。
OpenStack 已经走过了 9 个年头。每半年会发布一个新的版本,版本以字母顺序命名。现在已经到了第 18 个版本 Rocky(版本 R),从最初的只有两个模块(服务),发展到现在的数十个模块,每个模块都作为独立的子项目开发。那么,既然有那么多的服务模块,我们应该如何去进行高效的学习呢——抓住 openstack 最本质的东西(计算,存储,网络资源的统一管控),如下图所示:
在 openstack 这么庞大的架构里面,究竟哪些组件模块是负责管理计算,存储,网络资源的呢?组件之间又是如何进行协调工作的呢?(下图被称为「神图」,图片有点大,请横屏来看)
架构是个好东西,它能够帮助我们站在高处看清楚事物的整体结构,上图是 openstack 各个组件之间以及组件内部的交互图,其实也并不复杂。今天我们先来学习一下 openstack 的三大存储组件 Glance,Cinder,Swift。
二、浅析 OpenStack 的三大存储组件 Glance,Cinder,Swift
I.Glance,Cinder,Swift 是什么?
首先咱们要明白,Glance,Cinder,Swift 究竟是什么东西?在 openstack 当中,Glance 是负责提供 Image Service(镜像服务)的,这个所谓的镜像服务指的就是去管理 Image,让用户能够发现、获取和保存 Image。Image 是一个模板,里面包含了基本的操作系统和其他的应用软件,在云环境的大需求下,(大规模)手动去安装部署系统比较不灵活,时间较长,效率低下,这个时候就需要更加高效的解决方案————Image。再来看 Cinder,在 openstack 当中,Cinder 是用来提供块存储服务的。什么是块存储?大家其实可以简单理解为裸硬盘,通过某种协议(SCSI,iSCSI,SAN 等)挂接裸硬盘,然后进行分区、格式化、创建文件系统,或者直接使用裸硬盘提供存储空间,进行数据存储。Swift,为 openstack 提供一种分布式、持续虚拟对象存储,他其实类似于 Amazon Web Service 的 S3 简单存储服务。Swift 具有跨节点百级对象的存储能力,內建冗余和失效备援管理,也能够处理归档和媒体流,特别是对大数据(千兆字节)和大容量(多对象数量)的测度非常有效。该服务不是必需的,为可选服务。接下来咱们具体来看下三大组件的内部架构以及各个子组件的作用。
II.Glance
Glance-api:接收 REST API 请求,通过其他模块(glance-registry 及 image store)来完成诸如镜像的查找、获取、上传、删除等操作。
glance-registry:用于与 MySQL 数据库交互,用于存储或获取镜像的元数据(metadata)。
image store:是一个存储的接口层,通过这个接口,glance 可以获取镜像,image store 支持的存储有 Amazon 的 S3、OpenStack 本身的 Swift,还有诸如 ceph,sheepdog,GlusterFS 等分布式存储。
III.Cinder
Cinder Client 封装 Cinder 提供的 rest 接口,以 CLI 形式供用户使用。
Cinder API 对外提供 rest API,对操作需求进行解析,对 API 进行路由寻找相应的处理方法。包含卷的增删改查(包括从源卷、镜像、快照创建)、快照增删改查、备份、volume type 管理、挂载/卸载(Nova 调用)等。
Cinder scheduler 负责收集 backend 上报的容量、能力信息,根据设定的算法完成卷到指定 cinder-volume 的调度。
Cinder volume 多节点部署,使用不同的配置文件、接入不同的 backend 设备,由各存储厂商插入 driver 代码与设备交互完成设备容量和能力信息收集、卷操作。
Cinder backup 实现将卷的数据备份到其他存储介质(目前 Swift/Ceph/TSM 提供了驱动)。
SQL DB 提供存储卷、快照、备份等数据,支持 Mysql、PG、MSSQL 等 SQL 数据库。
IV.Swift
Proxy Server:对外提供对象服务 API,由于采用无状态的 REST 请求协议,可以进行横向扩展来均衡负载。 ◎Account Server:提供账户元数据和统计信息,并维护所含容器列表的服务,每个账户的信息被存储在一个 SQLite 数据库中。 ◎Container Server:提供容器元数据和统计信息,并维护所含对象列表的服务,每个容器的信息也存储在一个 SQLite 数据库中。 ◎Object Server:提供对象元数据和内容服务,每个对象的内容会以文件的形式存储在文件系统中,元数据会作为文件属性来存储,建议采用支持扩展属性的 XFS 文件系统。
Replicator:检测本地分区副本和远程副本是否一致,发现不一致时会采用推式(Push)更新远程副本,并且确保被标记删除的对象从文件系统中移除。 ◎Updater:当对象由于高负载的原因而无法立即更新时,任务将会被序列化到在本地文件系统中进行排队,以便服务恢复后进行异步更新。 ◎Auditor:检查对象,容器和账户的完整性,如果发现比特级的错误,文件将被隔离,并复制其他的副本以覆盖本地损坏的副本;其他类型的错误会被记录到日志中。
Account Reaper:移除被标记为删除的账户,删除其所包含的所有容器和对象。
三、三大存储组件的区别
功能上的区别
Glance 提供镜像服务,他负责对镜像进行管理,例如发现、注册,镜像是产生虚拟机系统盘的模板;Cinder 给虚拟机提供块级的持久化卷,通过 Cinder 可以实现卷的创建、挂载、快照等功能;Swift 是 openstack 提供的一种分布式、持续虚拟对象存储。
存储空间的区别
Glance 并不保存镜像,他将数据交给后端存储去进行保存:Swift、本地存储、OBS 等;Cinder 本身也不保存卷,但他可以通过 Driver 来接管各种存储,并通过这些存储给虚拟机提供空间。他可以接管华为 VRM Datastore、VMware Datastore、华为 FusionStorage、华为 OceanStorV3、LVM 等;Swift 它本身维持空间并对外提供对象存储服务,通常使用本地存储+XFS 文件系统。
总结一下,今天我们学习了 openstack 以及三大存储组件的本质以及作用,想要深入学习的同学可以课下去查阅 openstack 相关的文档,参照对应的文档不妨可以搭建 openstack 实验环境来进行一个系统的学习。Openstack经过多年的发展,整个组织架构变得越来越庞大。本身提供多种存储服务,这也是为了满足更多不同的需求,体现出开源项目灵活快速的特性。总的说来,当需要去选择存储的时候,如果考虑到将来会被多个应用所共同使用,应该视为长期的决策。Openstack作为一个开放的系统,最主要是解决软硬件供应商锁定的问题,可以随时选择新的硬件供应商,将新的硬件和已有的硬件组成混合的集群,统一管理,当然也可以替换软件技术服务的提供商,不用动应用。这是开源本身的优势。