OpenStack管理模块(下)
(注:OpenStack管理模块(上)在这里)
五、存储管理
5.1 存储管理概述
在 OpenStack 生态中,存储管理极为关键,负责统一管理调度云平台存储资源,涵盖分配、配置、存储、检索及监控维护等操作,能满足企业级和大数据等不同场景存储需求。
块存储由 Cinder 实现,为虚拟机提供类似物理磁盘的块级设备,可挂载、格式化、分区及创建文件系统,适用于数据库等对读写性能要求高且需频繁随机读写的结构化数据场景,能保障数据库稳定高性能运行。
对象存储由 Swift 负责,以对象形式存储数据及元数据,擅于处理海量非结构化数据,如图片、视频等,其分布式架构和高效检索机制可满足互联网企业多媒体数据存储等需求,在需高扩展性和可靠性的非结构化数据存储场景应用广泛。
5.2 架构设计
5.2.1 Cinder块存储架构
Cinder块存储架构精巧且复杂,由多个关键组件协同工作,共同实现对块存储资源的高效管理 。cinder-api作为对外的接口,负责接收来自用户或其他OpenStack组件(如Nova在创建虚拟机时对存储卷的请求)的API请求 。它对请求进行解析和验证,确保请求的合法性和完整性。若请求合法,cinder-api会将请求转发给后续的处理组件,如cinder-scheduler或cinder-volume 。
当用户通过OpenStack的客户端(如Horizon界面或命令行工具)向cinder-api发送创建存储卷的请求时,请求首先会被cinder-api接收 。cinder-api会对请求进行严格的解析和验证,检查请求中是否包含了所有必要的参数,如存储卷的大小、名称、所属项目等信息,以及参数的格式是否正确 。若请求合法,cinder-api会将请求信息转发给cinder-scheduler。
cinder-scheduler在接收到请求后,会依据一系列精心设计的调度算法,从众多存储节点中挑选出最适合创建该存储卷的节点 。这些调度算法综合考虑了多个关键因素,如存储节点的剩余容量,确保所选节点有足够的空间来创建指定大小的存储卷;性能指标,优先选择读写性能良好的节点,以保障存储卷的高效运行;与计算节点的网络距离,尽量选择网络延迟较低的节点,减少数据传输的时间开销 。在某企业的云平台中,若有一个对存储性能要求较高的数据库应用需要创建存储卷,cinder-scheduler会优先筛选出配备高性能存储设备且与数据库服务器所在计算节点网络延迟较低的存储节点 。
一旦确定了目标存储节点,cinder-scheduler会将调度结果发送给该节点上的cinder-volume服务 。cinder-volume负责与底层的存储设备进行交互,以完成存储卷的实际创建操作 。在这一过程中,逻辑卷管理(LVM)技术发挥着重要作用。以使用LVM存储后端为例,cinder-volume会通过调用LVM的命令行工具或API,在指定的卷组(Volume Group)中创建一个新的逻辑卷(Logical Volume) 。它会根据用户请求的存储卷大小,从卷组中分配相应的物理扩展块(Physical Extent),并将这些物理扩展块组合成逻辑卷,从而实现存储卷的创建 。
在创建过程中,cinder-volume还会对存储卷进行初始化配置,如设置存储卷的访问权限、文件系统类型(如果需要)等 。创建完成后,cinder-volume会将存储卷的相关信息,如存储卷的ID、位置、状态等,反馈给cinder-api,cinder-api再将这些信息返回给用户,告知用户存储卷已成功创建 。
5.2.2 Swift对象存储架构
Swift 对象存储采用分布式架构,多个节点协同工作,不存在单点故障风险。在存储节点布局上,数据分散于多个节点,每个节点都有对象服务器负责实际存储数据并分配唯一标识符、账户服务器管理账户元数据及容器列表、容器服务器管理容器内对象元数据及存储位置。
其数据冗余机制借助一致性哈希算法和数据复制策略保证可靠性与容错性。一致性哈希算法能将对象均匀分布到存储节点,减少节点变动时的数据重分布。数据复制策略通常会为每个对象在多个节点创建副本,如三个副本。
数据读写流程如下:写数据时,用户请求经 Swift API 发至 Proxy 服务器,先验证身份权限,通过后依一致性哈希算法算出目标存储节点,数据被分割成对象存于对象服务器本地磁盘并创建副本;读数据时,同样先经 Proxy 服务器验证,再依算法确定可能的存储节点并发送读请求,对象服务器读取数据返回给 Proxy 服务器,Proxy 从可用副本获取数据并返回用户。整个过程中,Swift 还通过监控机制监测存储节点状态,节点故障时能从其他副本获取数据并修复或替换故障节点,确保数据完整性和可用性。