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

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

相关推荐
tokepson1 天前
Mysql下载部署方法备份(Windows/Linux)
linux·服务器·windows·mysql
molaifeng1 天前
Go 语言如何实现高性能网络 I/O:Netpoller 模型揭秘
开发语言·网络·golang
C_心欲无痕1 天前
Dockerfile:构建 Docker 镜像
运维·docker·容器
zz_nj1 天前
工作的环境
linux·运维·服务器
知乎的哥廷根数学学派1 天前
基于多模态特征融合和可解释性深度学习的工业压缩机异常分类与预测性维护智能诊断(Python)
网络·人工智能·pytorch·python·深度学习·机器学习·分类
网络工程师_ling1 天前
【 Elastiflow (ELK) 网络流量分析系统 部署教程】
网络·elk
极客先躯1 天前
如何自动提取Git指定时间段的修改文件?Win/Linux双平台解决方案
linux·git·elasticsearch
C_心欲无痕1 天前
nginx - 实现域名跳转的几种方式
运维·前端·nginx
suijishengchengde1 天前
****LINUX时间同步配置*****
linux·运维
2301_780789661 天前
高防 IP 的选择与配置确保业务稳定性
网络·网络协议·tcp/ip