【网络运维】OpenStack 块存储与对象存储:Cinder 与 Swift 篇

OpenStack 块存储与对象存储:Cinder 与 Swift 篇

OpenStack 存储概述

在 OpenStack 云平台中,存储是基础设施的核心组成部分之一,主要分为块存储对象存储 两种类型,分别由 CinderSwift 两个项目提供支持。

块存储适用于需要高性能、低延迟的存储场景,如虚拟机硬盘、数据库存储等;对象存储则适用于海量非结构化数据的长期存储,如图片、视频、备份文件等。

本文将分别介绍 Cinder 和 Swift 的架构、工作原理与实验配置。


OpenStack 块存储:Cinder

Cinder 的作用与定位

Cinder 为虚拟机提供块存储服务,它在虚拟机与具体存储设备之间引入了一层"逻辑存储卷"的抽象。Cinder 本身并不直接管理物理存储设备,而是通过统一的接口与后端存储技术进行对接。不同的存储厂商可以通过驱动(Driver)的形式与 Cinder 集成,实现存储资源的统一管理。

Cinder 架构

Cinder 采用模块化设计,主要包括以下组件:

  • Cinder Client:提供命令行接口,封装 Cinder REST API。
  • Cinder API:接收并解析用户请求,进行权限校验和资源管理。
  • Cinder Scheduler:根据后端存储的容量和能力信息,调度卷的创建请求。
  • Cinder Volume:实际执行卷操作的组件,通过驱动与后端存储交互。
  • Cinder Backup:提供卷备份功能,支持备份到 Swift、Ceph 等存储。
  • SQL Database :存储卷、快照、备份等元数据。
查看 Cinder 进程:
bash 复制代码
[root@controller ~]# ps -e | grep cinder
   1746 ?        00:00:03 cinder-schedule
   1748 ?        00:00:04 cinder-api
   1772 ?        00:00:03 cinder-backup
   1791 ?        00:00:04 cinder-volume
查看支持的存储驱动:
bash 复制代码
[root@controller drivers]# ls /usr/lib/python3.6/site-packages/cinder/volume/drivers
datera         huawei        lenovo         nfs.py       rbd.py        storpool.py      windows
dell_emc       ibm           linstordrv.py  nimble.py    remotefs.py   stx              zadara.py
...

后端存储与 LVM

Cinder 默认使用 LVM 作为后端存储。LVM 将物理存储资源组织为卷组(Volume Group),并在其上创建逻辑卷(Logical Volume),供虚拟机使用。

除了 LVM,Cinder 还支持 SAN、Ceph、NFS 以及多家厂商的存储设备。

实验环境中 LVM 配置示例:
bash 复制代码
[root@controller ~]# vgdisplay cinder-volumes
  VG Name               cinder-volumes
  VG Size               <20.60 GiB
  Free  PE / Size       253 / 1012.00 MiB

Cinder 调度机制

Cinder Scheduler 使用过滤器(Filter)和权重计算器(Weigher)来选择最合适的后端存储节点。

常用过滤器包括:

  • AvailabilityZoneFilter:按可用区筛选。
  • CapacityFilter:按剩余容量筛选。
  • CapabilitiesFilter:按存储特性筛选。
配置示例:
bash 复制代码
[root@controller cinder]# vim cinder.conf
scheduler_default_filters = AvailabilityZoneFilter,CapacityFilter,CapabilitiesFilter
可用区实验验证:
bash 复制代码
# 创建卷时指定可用区
[root@controller ~(keystone_admin)]# openstack volume create --size 1 --availability-zone az1 volume1

卷挂载流程

Cinder 与 Nova 协同完成卷的挂载:

  1. Nova 调用 Cinder API 创建卷,并传递主机信息。
  2. Cinder Volume 通过驱动通知存储设备允许主机访问卷。
  3. Nova 识别存储设备并将其映射到虚拟机。

OpenStack 对象存储:Swift

Swift 的作用与特点

Swift 是 OpenStack 的对象存储服务,适用于存储静态、非结构化的海量数据,如镜像、文档、备份等。Swift 采用分布式架构,无中心节点,具备高扩展性、高可靠性和数据持久性。

Swift 架构与 Ring 机制

Swift 使用 Ring 机制来管理数据的分布与冗余。Ring 是一个虚拟的哈希环,将数据对象映射到物理存储设备上。Swift 包含三种 Ring:

  • Account Ring:管理账户信息。
  • Container Ring:管理容器信息。
  • Object Ring:管理对象信息。

Swift 实验部署

以下是在控制节点上部署 Swift 的基本步骤:

准备存储设备

添加新磁盘并分区:

bash 复制代码
[root@controller ~]# fdisk /dev/sdb
[root@controller ~]# mkfs.xfs /dev/sdb1
[root@controller ~]# mkfs.xfs /dev/sdb2
配置挂载点
bash 复制代码
[root@controller ~]# mkdir /srv/node/obs1 /srv/node/obs2
[root@controller ~]# vim /etc/fstab
/dev/sdb1 /srv/node/obs1 xfs defaults 0 0
/dev/sdb2 /srv/node/obs2 xfs defaults 0 0
[root@controller ~]# mount -a
创建 Swift Ring
bash 复制代码
[root@controller swift]# swift-ring-builder account.builder create 12 2 1
[root@controller swift]# swift-ring-builder container.builder create 12 2 1
[root@controller swift]# swift-ring-builder object.builder create 12 2 1
添加设备到 Ring
bash 复制代码
[root@controller swift]# swift-ring-builder account.builder add z1-192.168.108.10:6002/obs1 100
[root@controller swift]# swift-ring-builder account.builder add z2-192.168.108.10:6002/obs2 100
重平衡 Ring
bash 复制代码
[root@controller swift]# swift-ring-builder account.builder rebalance

测试 Swift 存储




上传成功

上传文件到 Swift 容器后,可在两个存储目录中查看副本:

bash 复制代码
[root@controller ~]# find /srv/node -name *.data
/srv/node/obs1/objects/317/0fe/.../1727591964.07735.data
/srv/node/obs2/objects/317/0fe/.../1727591964.07735.data

小结

Cinder 和 Swift 分别代表了 OpenStack 在块存储和对象存储方面的成熟解决方案。Cinder 通过统一的接口整合多种后端存储,为虚拟机提供灵活、高效的块设备服务;Swift 则以分布式、无中心的设计,实现了海量数据的高可靠存储。

在实际部署中,可根据业务需求选择合适的存储后端,并结合可用区、卷类型、副本策略等进行优化配置,以提升存储性能与可靠性。

相关推荐
生万千欢喜心5 小时前
Linux 安装金蝶天燕中间件 AAS-V9.0.zip
java·linux
lKWO OMET5 小时前
查看 nginx 是否已经启动
运维·数据库·nginx
aq55356006 小时前
三大Linux系统终极对决
linux·运维·服务器
gamers6 小时前
客户终端的DNS被劫持,网络能访问,但浏览器域名访问不到
网络·dns劫持
AI精钢6 小时前
Claude Opus 4.7 是一次失败的升级吗?一次基于用户反馈的技术复盘
网络·人工智能·ai·大模型·llm·claude·技术评论
sssjjww6 小时前
服务器不同路径下找conda
linux·运维·服务器
liulian09166 小时前
Flutter 三方库 connectivity_plus 的鸿蒙化适配与网络状态管理实战
网络·flutter·华为·学习方法·harmonyos
不会写DN6 小时前
通过eino-ext如何正常indexer RAG?
网络·面试·go
七夜zippoe7 小时前
OpenClaw 定时任务与自动化:Cron 详解
运维·人工智能·自动化·cron·openclaw
思麟呀7 小时前
网络层IP协议
linux·服务器·网络·网络协议·tcp/ip·计算机网络