当前位置: 首页 > news >正文

28.OpenStack块存储管理-cinder

文章目录

  • OpenStack块存储管理-cinder
    • openstack存储类型
    • OpenStack持久化存储简介
    • Cinder作用
    • Cinder架构
    • Cinder架构说明
    • Cinder架构部署:以SAN存储为例
    • Cinder-api
    • Cinder-scheduler
      • AvailabilityZoneFilter
      • CapacityFilter
      • CapabilitiesFilter
      • Cinder-volume
      • Cinder挂载流程

OpenStack块存储管理-cinder

cinder的配置文件位置:/etc/cinder

cinder的日志文件位置:/var/log/cinder

openstack存储类型

在这里插入图片描述

OpenStack持久化存储简介

在这里插入图片描述

Cinder作用

Cinder在虚拟机与具体存储设备之间引入了一层“逻辑存储卷”的抽象,Cinder本身不是一种存储技术,并 没有实现对块设备的实际管理和服务

Cinder只是提供了一个中间的抽象层,为后端不同的存储技术,提供了统一的接口

不同的块设备服务厂商在Cinder中以驱动的形式实现上述接口与OpenStack进行整合

Cinder架构

在这里插入图片描述

  • Cinder Client封装Cinder提供的rest接口,以CLI形式供用户使用。
  • Cinder API对外提供rest API,对操作需求进行解析,对API进行路由寻找相应的处理方法。包含卷的增 删改查(包括从源卷、镜像、快照创建)、快照增删改查、备份、volume type管理、挂载/卸载(Nova 调用)等。
  • Cinder Scheduler负责收集backend上报的容量、能力信息,根据设定的算法完成卷到指定cindervolume的调度。
  • Cinder Volume多节点部署,使用不同的配置文件、接入不同的backend设备,由各存储厂商插入 driver代码与设备交互完成设备容量和能力信息收集、卷操作。
  • Cinder Backup实现将卷的数据备份到其他存储介质(目前SWIFT/Ceph/TSM提供了驱动)。
  • SQL DB提供存储卷、快照、备份、service等数据,支持MySQL、PG、MSSQL等SQL数据库

查看控制节点cinder进程:

[root@controller ~ 11:15:54]# ps -e |grep cinder1746 ?        00:01:06 cinder-volume1747 ?        00:01:12 cinder-api1760 ?        00:01:03 cinder-backup1776 ?        00:00:33 cinder-schedule3160 ?        00:00:28 cinder-backup3259 ?        00:00:39 cinder-volume3271 ?        00:00:23 cinder-api3272 ?        00:00:01 cinder-api3273 ?        00:00:01 cinder-api3277 ?        00:00:01 cinder-api

查看cinder-volume默认支持的存储设备:

[root@controller ~ 11:49:06]# cd /usr/lib/python3.6/site-packages/cinder/volume/drivers/
[root@controller drivers 11:50:06]# ls
datera         huawei        lenovo         nfs.py       rbd.py        storpool.py      windows
dell_emc       ibm           linstordrv.py  nimble.py    remotefs.py   stx              zadara.py
fujitsu        infinidat.py  lvm.py         prophetstor  rsd.py        synology
fusionstorage  infortrend    macrosan       pure.py      san           veritas_access
hedvig         __init__.py   nec            __pycache__  sandstone     veritas_cnfs.py
hitachi        inspur        netapp         qnap.py      solidfire.py  vmware
hpe            kaminario     nexenta        quobyte.py   spdk.py       vzstorage.py

Cinder架构说明

在这里插入图片描述

  • Cinder默认使用LVM(Logical Volume Manager)作为后端存储(Backend Storage),而LVM通过在 操作系统与物理存储资源之间引入逻辑卷(Logical Volume)的抽象来解决传统磁盘分区管理工具的问 题。
  • LVM将众多不同的物理存储资源(物理卷、Physical Volume,如磁盘分区)组成卷组。LVM从卷组中 创建一个逻辑卷,然后将ext3、ReiserFS等文件系统安装在这个逻辑卷上。
  • 除了LVM,目前Cinder已经以驱动的形式支持众多存储技术或存储厂商的设备作为后端存储,如SAN (Storage Area Network)、Ceph、Sheepdog,以及EMC、华为等厂商的设备。

在这里插入图片描述

实验环境后端存储就是LVM(安装时决定的):

[root@controller ~]# vim answers.txt
536 CONFIG_CINDER_BACKEND=lvm
544 CONFIG_CINDER_VOLUMES_CREATE=y
547 CONFIG_CINDER_VOLUME_NAME=cinder-volumes
554 CONFIG_CINDER_VOLUMES_SIZE=20G

实验环境查看

[root@controller drivers 11:50:10]# vgdisplay cinder-volumes Configuration setting "snapshot_autoextend_percent" invalid. It's not part of any section.Configuration setting "snapshot_autoextend_threshold" invalid. It's not part of any section.--- Volume group ---VG Name               cinder-volumesSystem ID             Format                lvm2Metadata Areas        1Metadata Sequence No  6VG Access             read/writeVG Status             resizableMAX LV                0Cur LV                2Open LV               1Max PV                0Cur PV                1Act PV                1VG Size               <20.60 GiBPE Size               4.00 MiBTotal PE              5273Alloc PE / Size       5020 / <19.61 GiBFree  PE / Size       253 / 1012.00 MiBVG UUID               S5M6gF-41r7-8D1E-3nd8-qe36-Jh3B-9Znylb

Cinder架构部署:以SAN存储为例

在这里插入图片描述

  • Cinder-api,Cinder-Scheduler,Cinder-Volume可以选择部署到一个节点上,也可以分别部署
  • API采用AA模式,HAproxy作为LB,分发请求到多个Cinder API
  • Scheduler也采用AA模式,由rabbitmq以负载均衡模式向3个节点分发任务,并同时从rabbitmq收 取Cinder volume上报的能力信息,调度时,scheduler通过在DB中预留资源从而保证数据一致性
  • Cinder Volume也采用AA模式,同时上报同一个backend容量和能力信息,并同时接受请求进行处理
  • RabbitMQ,支持主备或集群
  • MySQL,支持主备或集群

Cinder-api

在这里插入图片描述

Cinder API

  • 检查参数合法性(用户输入,权限,资源是否存在等)
  • 准备创建的参数字典,预留和提交配额
  • 在数据库中创建对应的数据记录
  • 通过消息队列将请求和参数发送到Scheduler

查看cinder API服务状态:

[root@controller ~ 14:30:52]# systemctl status openstack-cinder-api.service
● openstack-cinder-api.service - OpenStack Cinder API ServerLoaded: loaded (/usr/lib/systemd/system/openstack-cinder-api.service; enabled; vendor preset: disabled)Active: active (running) since Wed 2025-10-29 14:17:02 CST; 13min agoMain PID: 20009 (cinder-api)Tasks: 5 (limit: 48806)Memory: 290.1MCGroup: /system.slice/openstack-cinder-api.service├─20009 /usr/bin/python3 /usr/bin/cinder-api --config-file /usr/share/cinder/cinder-dist.conf --co>├─20031 /usr/bin/python3 /usr/bin/cinder-api --config-file /usr/share/cinder/cinder-dist.conf --co>├─20032 /usr/bin/python3 /usr/bin/cinder-api --config-file /usr/share/cinder/cinder-dist.conf --co>├─20033 /usr/bin/python3 /usr/bin/cinder-api --config-file /usr/share/cinder/cinder-dist.conf --co>└─20034 /usr/bin/python3 /usr/bin/cinder-api --config-file /usr/share/cinder/cinder-dist.conf --co>Oct 29 14:17:02 controller systemd[1]: Stopped OpenStack Cinder API Server.
Oct 29 14:17:02 controller systemd[1]: Started OpenStack Cinder API Server.

Cinder-scheduler

在这里插入图片描述

和Nova Scheduler类似,Cinder Scheduler也是经过Filter筛选符合条件的后端,然后使用Weigher计算 后端进行权重排序,最终选择出最合适的后端存储

Cinder Scheduler服务

提取接收到的请求参数

通过配置的filter和输入参数对后端进行过滤

Availability_zone_filter

Capacity_filter

Capabilities_filter

Affinity_filter(SameBackendFilter/DifferentBackendFilter)

……

Weigher计算后端进行权重

CapacityWeigher/AllocatedCapacityWeigher

ChanceWeigher

GoodnessWeigher

……

选取最优的Backend并通过消息队列将请求发送到指定的后端

查看配置文件:

[root@controller ~ 14:14:58]# cd /etc/cinder/
[root@controller cinder 14:15:21]# ls
api-paste.ini  cinder.conf  resource_filters.json  rootwrap.conf  rootwrap.d  volumes
[root@controller cinder 14:15:24]# vim cinder.conf 592 #scheduler_default_filters = 
AvailabilityZoneFilter,CapacityFilter,CapabilitiesFilter593595 #scheduler_default_weighers = CapacityWeigher596601 # Default scheduler driver to use (string value)602 #scheduler_driver = cinder.scheduler.filter_scheduler.FilterScheduler

AvailabilityZoneFilter

为提高容灾性和提供隔离服务,可以将存储节点和计算节点划分到不同的 Availability Zone 中。例如把 一个机架上的机器划分在一个 Availability Zone 中。OpenStack 默认有一个命名为“nova”的 Availability Zone,所有的节点初始都是放在“nova”中。用户可以根据需要创建自己的 Availability Zone。

创建 Volume 时,用户会指定 Volume 的大小。CapacityFilter 的作用是将存储空间不能满足 Volume 创 建需求的存储节点过滤掉。

配置cinder配置文件cinder.conf

[root@controller ~ 14:14:58]# cd /etc/cinder/
[root@controller cinder 14:15:21]# ls
api-paste.ini  cinder.conf  resource_filters.json  rootwrap.conf  rootwrap.d  volumes
[root@controller cinder 14:15:24]# vim cinder.conf
592 scheduler_default_filters = 
AvailabilityZoneFilter,CapacityFilter,CapabilitiesFilter
#该配置文件的节点的AZ设置为az1
395 storage_availability_zone=az1
#创建卷时,不指定az默认使用nova AZ
401 default_availability_zone=nova[root@controller cinder 14:16:35]# systemctl restart openstack-cinder*

验证AZ实验:

#cinder.conf配置文件配置401 default_availability_zone=nova,创建卷时不指定AZ则使用nova AZ,而该节点属于az1 AZ,创建失败
[root@controller ~ 14:17:59]# source keystonerc_admin 
[root@controller ~(keystone_admin)]# openstack volume create --size 1 volume1
Availability zone 'nova' is invalid. (HTTP 400) (Request-ID: req-38d5636a-8517-45af-80c1-96f65814cc7e)#cinder配置文件配置395 storage_availability_zone=az1,该节点属于AZ az1节点,创建AZ az2卷,被AvailabilityZoneFilter过滤
[root@controller ~(keystone_admin)]# openstack volume create --size 1 --availability-zone az2 volume1
Availability zone 'az2' is invalid. (HTTP 400) (Request-ID: req-49ada81e-b4c2-4199-8be6-d652183915c0)#cinder配置文件配置395 storage_availability_zone=az1,该节点属于AZ az1节点,创建AZ az1卷,创建成功
[root@controller ~(keystone_admin)]# openstack volume create --size 1 --availability-zone az1 volume1
+---------------------+--------------------------------------+
| Field               | Value                                |
+---------------------+--------------------------------------+
| attachments         | []                                   |
| availability_zone   | az1                                  |
| bootable            | false                                |
| consistencygroup_id | None                                 |
| created_at          | 2025-10-29T06:19:58.284343           |
| description         | None                                 |
| encrypted           | False                                |
| id                  | e3802a90-bc42-4bab-8614-ffa5f5f133f8 |
| migration_status    | None                                 |
| multiattach         | False                                |
| name                | volume1                              |
| properties          |                                      |
| replication_status  | None                                 |
| size                | 1                                    |
| snapshot_id         | None                                 |
| source_volid        | None                                 |
| status              | creating                             |
| type                | iscsi                                |
| updated_at          | None                                 |
| user_id             | ef2e98805d884acba8609fef1acad5b9     |
+---------------------+--------------------------------------+

CapacityFilter

创建 Volume 时,用户会指定 Volume 的大小。CapacityFilter 的作用是将存储空间不能满足 Volume 创 建需求的存储节点过滤掉。

CapabilitiesFilter

不同的 Volume Provider 有自己的特性(Capabilities),比如是否支持 thin provision 等。Cinder 允 许用户创建 Volume 时通过 Volume Type 指定需要的 Capabilities

web页面 项目->卷->卷->创建卷

在这里插入图片描述

创建卷的时候,卷类型指定为iscsi,那么后端使用的是LVM,为何?

由卷类型,扩展规格决定

在这里插入图片描述
在这里插入图片描述

接下来查看配置文件:

[root@controller ~(keystone_admin)]# vim /etc/cinder/cinder.conf
5261 [lvm]
5262 volume_backend_name=lvm
5263 volume_driver=cinder.volume.drivers.lvm.LVMVolumeDriver
5264 target_ip_address=192.168.108.10
5265 target_helper=lioadm
5266 volume_group=cinder-volumes
5267 volumes_dir=/var/lib/cinder/volumes 

Cinder-volume

在这里插入图片描述

Cinder Volume服务

  • 提取接收到的请求参数
  • 调用对应的Driver在后端创建实际的卷
  • 使用Driver返回的模型更新数据库中的记录

Cinder挂载流程

在这里插入图片描述

挂卷流程: 挂卷是通过Nova和Cinder的配合最终将远端的卷连接到虚拟机所在的Host节点上,并最终 通过虚拟机管理程序映射到内部的虚拟机中

  • Nova调用Cinder API创建卷,传递主机的信息,如hostname,iSCSI initiator name,FC WWPNs。

  • Cinder API将该信息传递给Cinder Volume。

  • Cinder Volume通过创建卷时保存的host信息找到对应的Cinder Driver。

  • Cinder Driver通知存储允许该主机访问该卷,并返回该存储的连接信息(如iSCSI iqn,portal,FC Target WWPN,NFS path等)。

  • Nova调用针对于不同存储类型进行主机识别磁盘的代码( Cinder 提供了brick模块用于参考)实现识别 磁盘或者文件设备。

  • Nova通知Cinder已经进行了挂载。
    虚拟机管理程序映射到内部的虚拟机中

  • Nova调用Cinder API创建卷,传递主机的信息,如hostname,iSCSI initiator name,FC WWPNs。

  • Cinder API将该信息传递给Cinder Volume。

  • Cinder Volume通过创建卷时保存的host信息找到对应的Cinder Driver。

  • Cinder Driver通知存储允许该主机访问该卷,并返回该存储的连接信息(如iSCSI iqn,portal,FC Target WWPN,NFS path等)。

  • Nova调用针对于不同存储类型进行主机识别磁盘的代码( Cinder 提供了brick模块用于参考)实现识别 磁盘或者文件设备。

  • Nova通知Cinder已经进行了挂载。

  • Nova将主机的设备信息传递给hypervisor来实现虚拟机挂载磁盘。

http://www.dtcms.com/a/544291.html

相关文章:

  • Flink Keyed State 详解之四
  • DGX Spark 上部署 Isaac Sim 全流程
  • 数据挖掘 miRNA调节网络的构建(视频教程)
  • 山东住房城乡建设部网站建设公司简介怎么写
  • 免费域名注册网站有哪些聊天app开发需要多少钱
  • 定制网站开发费用多少教育网站报名
  • 低代码平台定义、选型指南与主流低代码平台测评与排行
  • Python爬虫实战:中信标普300指数数据获取与趋势分析
  • python电商商品评论数据分析可视化系统 爬虫 数据采集 Flask框架 NLP情感分析 LDA主题分析 Bayes评论分类(源码) ✅
  • Java线程的学习—多线程(一)
  • Redis超详细知识点笔记 - 基础篇
  • 【技术全景解析:从API设计到能源系统的数字基石】
  • 【学习笔记】深度学习中梯度消失和爆炸问题及其解决方案研究
  • 【探寻C++之旅】C++ 智能指针完全指南:从原理到实战,彻底告别内存泄漏
  • 个人网站做什么内容好wordpress分享到+滑动
  • 直接使用docker中的nginx
  • 黑龙江省城乡和建设厅网站首页网站论坛怎样建设
  • 如何使用 INFINI Gateway 增量迁移 ES 数据
  • 凸优化5:无约束优化之动量
  • MYSQL-超全基础以及用法--仅个人的速记笔记(2)
  • 深度学习零基础教程:在 DigitalOcean GPU 云主机上一步搭建 Jupyter Lab
  • 仓颉并发集合实现:鸿蒙高并发场景的容器化解决方案
  • English Interview Template
  • 网站建设最贵服务商wordpress 首页403
  • 《C++ 多态》三大面向对象编程——多态:虚函数机制、重写规范与现代C++多态控制全概要
  • 自然科学研究的AI革命:如何用ChatGPT-4o贯通数据分析、建模与写作
  • Xrecode3(多功能音频转换工具)
  • 电商网站 内容优化发帖网站有哪些
  • spring cache 支持多结构的 Redis 缓存管理器
  • CPU 架构(CPU Architecture)