【网络运维】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 则以分布式、无中心的设计,实现了海量数据的高可靠存储。

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

相关推荐
测试员周周3 小时前
【Appium 系列】第16节-WebView-H5上下文切换 — 混合应用的自动化难点
运维·开发语言·人工智能·功能测试·appium·自动化·测试用例
小辰记事本5 小时前
从零读懂RoCEv2数据包构造:从WQE到线缆上的完整旅程
服务器·网络·网络协议·rdma
小鹏linux6 小时前
Ubuntu 22.04 部署开源免费具有精美现代web页面的Casdoor账号管理系统
linux·前端·ubuntu·开源·堡垒机
北京耐用通信6 小时前
全域适配工业场景耐达讯自动化Modbus TCP 转 PROFIBUS 网关轻松实现以太网与现场总线互通
网络·人工智能·网络协议·自动化·信息与通信
在角落发呆6 小时前
Linux转发配置:解锁网络互联的核心密码
linux·运维·网络
齐潇宇7 小时前
Zabbix 7 概述与配置
linux·zabbix·监控告警
裴东青8 小时前
10-实战:RuoYi-Cloud的自动化发布
运维·ci/cd·自动化
江公望8 小时前
Ubuntu htop命令,10分钟讲清楚
linux·服务器
哎呦,帅小伙哦8 小时前
Linux 时间:从原子钟到 clock_gettime 的每一面
linux·运维·服务器
sxgzzn8 小时前
新能源场站数智化转型:基于数字孪生与AI的智慧运维管理平台解析
大数据·运维·人工智能