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

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

相关推荐
2301_800050992 小时前
OpenStack 管理
运维·openstack
一点晖光2 小时前
MongoDB特殊查询语句
linux·mongodb
小鹿学程序2 小时前
IP地址消失
网络·网络协议·tcp/ip
报错小能手2 小时前
当键入网址后,到网页显示,其间发生了什么?
网络·计算机网络
阿干tkl2 小时前
误卸载 openssl-libs 的补救方法
linux·运维
PFinal社区_南丞2 小时前
服务器进程日志分析:从头皮发麻到AI解救
运维·后端
G_H_S_3_2 小时前
【网络运维】Docker网络:基础与实战
linux·运维·网络·docker
加藤不太惠2 小时前
docker简单了解使用
运维·docker·容器
Lisonseekpan2 小时前
RBAC 基于角色的访问控制模型详解与实践指南
java·服务器·网络·后端·spring·log4j