storage - cinder(1)

Check of pool cinder-volumes/cinder-volumes-pool failed (status:2). Manual repair required! OpenStack安装cinder组件之后,报错 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 阅读详情

前面也说过存储,也提过cinder, 从horizon串到nova,串到ironic,中间穿着说了keystone和neutron,基本上各个openstack的module都提到了,按照我做事的风格,

我要再捋一遍,细节的地方不会像前面,从api service收到请求开始讲,会直接从重要地方开始。

和看nova代码,最首先肯定是看创建虚机的流程一样,看cinder,从创建volume开始:

当然了, 和前面说的一样,根据官网文档,很方便理解传入参数的意义:http://developer.openstack.org/api-ref-blockstorage-v2.html

创建volume传入参数中可能包含:

snapshot_id:To create a volume from an existing snapshot, specify the ID of the existing volume snapshot. The volume is

created in same availability zone and with same size as the snapshot.

source_volid: To create a volume from an existing volume, specify the ID of the existing volume. The volume is created with

the same size as the source volume.

还有可能包含source_replica,其实也可以理解,归根到底都落到:

new_volume = self.volume_api.create(context,
                                            size,volume.get('display_name'),volume.get('display_description'),
                                            **kwargs)#根据前面的参数对应不同创建volume的方式

一切都是从这里开始:self.volume_api = cinder_volume.API()

在cinder.common.config中可以看到其默认为 'cinder.volume.api.API', 

trace此类,可以看到除了做一些对参数的判断外,拿到了scheduler,rpcapi,再次create

sched_rpcapi = self.scheduler_rpcapi if not cgsnapshot else None
 volume_rpcapi = self.volume_rpcapi if not cgsnapshot else None  #
flow_engine = create_volume.get_flow(self.db,
                                                 self.image_service,
                                                 availability_zones,
                                                 create_what,
                                                 sched_rpcapi,
                                                 volume_rpcap
i)

 flow_engine.run()#执行任务流

可以看到这里用到了taskflow, 在mark link中有讲到taskflow的用法和作用。

在get_flow中,通过api_flow = linear_flow.Flow(flow_name),即一个线性顺序执行的任务流,依次执行一串动作(这种各个操作之间有紧密联系的动作,

使用work_flow是个很好的选择)

api_flow.add则加入一系列的Task,每个task有execute方法,在flow_engine.run()中依次调用各个task的execute方法。

最后一个flow的task是关键:api_flow.add(VolumeCastTask(scheduler_rpcapi, volume_rpcapi, db_api))

这里在做什么,”cast“,不错,在做rpc调用!

如果指定了snapshot id或者source_volid(前面提及),则有对应的host信息,知道volume在哪里创建,也就不需要使用scheduler进行调度,

直接self.volume_rpcapi.create_volume, 否则self.scheduler_rpcapi.create_volume(调度分支如何进行,先留着), 来看看:

已知host时:

values = {'host': host, 'scheduled_at': now}
volume_ref = self.db.volume_update(context, volume_id, values)#volume_ref作为create_volume的参数传入

此处self.volume_rpcapi为cinder/volume/rpcapi.py中的VolumeAPI, create执行cast方法,其中topic为“cinder-volume”, 而在cmd包中启动cinder相关

服务时候,有对该消息队列的监听,后落到cinder/volume/manager.py中的VolumeManager,执行volume manager中的create_volume方法


需要注意的是:

在volumemanager中也有:flow_engine = create_volume.get_flow,同时执行task flow,不错,这里的create_volume和前面的不同:

前面create_volume对应cinder/volume/flow/api/create_volume.py

这里是cinder/volume/flow/manager/create_volume.py

逻辑很清楚!

那么这里flow_engine中加了一串task,实际真正对应物理上volume建立的是哪儿呢?是task:CreateVolumeFromSpecTask(db,driver)

在CreateVolumeFromSpecTask的execute方法中,对不同情况执行不同的create动作:

       if create_type == 'raw':
            model_update = self._create_raw_volume(context,
                                                   volume_ref=volume_ref,
                                                   **volume_spec)
        elif create_type == 'snap':
            model_update = self._create_from_snapshot(context,
                                                      volume_ref=volume_ref,
                                                      **volume_spec)
        elif create_type == 'source_vol':
            model_update = self._create_from_source_volume(
                context, volume_ref=volume_ref, **volume_spec)
        elif create_type == 'source_replica':
            model_update = self._create_from_source_replica(
                context, volume_ref=volume_ref, **volume_spec)
        elif create_type == 'image':
            model_update = self._create_from_image(context,
                                                   volume_ref=volume_ref,
                                                   **volume_spec)

这里分为raw,snap,source_vol, source_replica, image五种,对第一个raw:

    def _create_raw_volume(self, context, volume_ref, **kwargs):
        return self.driver.create_volume(volume_ref)

而这里的driver,在volume manager的__init__中初始化,默认为cinder.volume.drivers.lvm.LVMISCSIDriver,其他的实现在cinder/volume/drivers下,

不错,有!很!多!,事实上,对云而言,数据是最重要的,效率可以稍微差一些,数据一定不能出问题,镜像/虚机/用户数据等都可以放在存储上,做

底线报障,因此存储在云计算中的地位更加重要(相对的)

以此处的lvm driver为例,其initial过程在volumemanager中完成,执行driver.check_for_setup_error() ,得到LVM Driver中:

self.vg = lvm.LVM

最后对lvm而言,就是执行:

from cinder.openstack.common import processutils as putils

执行命令生成volume即可。


总的来说,cinder的过程和nova十分相似(事实上也不只和nova :)),


mark link:

http://docs.openstack.org/developer/taskflow/

http://blog.youkuaiyun.com/epugv/article/details/17565759taskflow的用处


openstack核心组件-块存储 (Block Storage) : Cinder cinder 介绍: 部署 控制节点 #mysql -uroot -p123 > CREATE DATABASE cinder; > GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'localhost' \ IDENTIFIED BY 'CINDER_DBPASS'; > GRANT ALL PRIVILEGES ON cinde... 阅读详情

相关推荐

BLDC方波控制双闭环Simulink仿真模型

无刷直流电机方波控制双闭环Simulink仿真模型搭建详细教程,包括速度PI环、电流PI环、换向逻辑和受控电压源,仿真结果良好。

m0_57458432的博客 6870

(七)核心组件安装——Cinder存储

本文档详细介绍了OpenStack Cinder块存储服务的安装与配置流程。最终实现通过LVM实现块存储服务。

weixin_43454301的博客 882

(NOI)打表骗分过样例,暴力枚举出奇迹1.8.22题解

                                                                                                                                                           48818 B题解 #include <iostream> u...

Owen20071026的博客 3127

Openstack Cinder源码分析-理解Taskflow

先简单介绍一下TaskFlow:TaskFlow是OpenStack中的一个Python库,主要目的是让task(任务)执行更加容易可靠,能将轻量的任务对象组织成一个有序的流。TaskFlow 能够控制应用程序中的长流程业务逻辑任务的暂停、重启、恢复以及回滚, 主要用于保证长流程任务执行的可靠性和一致性。主要应用场景有如 Cinder 的 create volume 这般复杂、冗长、容易失败, 却...

iov_aaron的专栏 1935

STM32F407VET6与CH395Q串口通信实战:从零搭建以太网客户端(附完整代码)

本文详细介绍了基于STM32F407VET6微控制器与南京沁恒微CH395Q以太网芯片,通过串口通信从零搭建TCP客户端应用的完整实战过程。内容涵盖硬件连接、驱动层设计、基于FreeRTOS的任务实现以及核心调试技巧,并提供了完整的代码示例,帮助嵌入式开发者快速实现设备联网功能。

weixin_29179311的博客 415

Ansys Lumerical 启动时出现 Error: Could not connect to Ansys license server specified at 1055@ 的另一种解决办法

昨天在关闭了中之后 就能正常打开 FDTD 了,结果今天想开启出现了同样的报错:我猜测昨天能启动的原因在于关闭之后要重启电脑,并且在重启之后我第一时间打开 lumerical 测试因此端口没有被占用,今天是在电脑启动之后一段时间才打开所以又遇到了端口占用的问题。

qq_51404184的博客 9549

块存储服务(Cinder)安装配置,这一篇就够了!

本实验是一个比较综合的实验,需要结合前面所学的OpenStack基础环境安装配置,身份认证服务(Keystone)安装配置等一些基础的实验来做这个块存储服务(Cinder)安装配置实验。为了更好地理解和管理Cinder块存储服务组件,需要对其整个存储架构有一定的了解,在经济、性能和安全性方面做出选择,但是最终归结为两个选择:是单节点部署还是多节点部署(在存储技术已经确定的情况下)。Cinder块存储服务组件允许用户添加外部存储作为块存储使用,如集中存储或其他开源存储技术存储。Amazon的EC2Elast.

考研渣渣斌斌的博客 7324

SSE 传输过程中,丢失空格和回车符,怎么解决?

Server - Sent Events(SSE)即服务器发送事件,是 HTML5 中的一项 Web API,用于实现服务器向客户端浏览器推送实时数据的功能。

934

storage, especially cinder(1)

网络,计算,存储,是IT的基础,neutron是网络,nova是计算,存储在openstack中必然也有相当重要的地位,openstack中存储也扮演了十分重要的角色,而在存储 发力的openstack也是主要的存储供应商,IBM,EMC,HUAWEI等。存储本身是十分复杂的,且类型各异,方式种种,openstack中的存储竟然对应了三个子项目,可想 其重要性和复杂性。 Cinder: 提供

dingdingwolf的专栏 524

选型不再靠感觉:一文看懂 SAP Event Mesh 与 SAP Integration Suite, advanced event mesh 的能力边界

本文对比分析了SAP Event Mesh与SAP Integration Suite, advanced event mesh的差异。SAP Event Mesh适合轻量级场景,主要用于SAP系统间异步通信,支持AMQP、MQTT等协议,消息大小限制为1MB。而advanced event mesh面向企业级事件网络,提供跨云/本地部署、事件治理、监控等高级功能,支持30MB消息和更大存储容量。选择时需考虑业务规模、实时性要求、治理需求等因素:单一SAP生态内扩展可选Event Mesh;跨区域、多云环境

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 133

数学工具箱:Clarke与Park变换

本文详细解析了FOC(磁场定向控制)中的核心数学工具——Clarke变换与Park变换。首先阐述了坐标变换的必要性:将复杂的三相交流系统简化为直流系统,便于精确控制。Clarke变换将三相静止坐标系转换为两相静止坐标系,减少变量数量;Park变换进一步将两相静止坐标系转换为两相旋转坐标系,实现交流量到直流量的转换。文章提供了两种变换的数学公式、物理意义图解及C语言实现代码,并简要介绍了逆变换过程。这些变换为电机控制提供了关键的数学基础,后续将结合GD32F303的FPU特性进行优化实现。

汽车电子软件领域知识分享 180

08.存储Cinder→1.理解Block Storage

返回总目录 操作系统获得存储空间的方式一般有二种:通过某种协议(SAS,SCSI,SAN,iSCSI 等)挂接裸硬盘,然后分区、格式化、创建文件系统;或者直接使用裸硬盘存储数据(数据库)介绍:第一种裸硬盘的方式叫做Block Storage(块存储),每个裸硬盘通常也称作Volume(卷)。使用lvm划分出的逻辑卷也是块存储,因为操作系统是区分不出到底是逻辑还是物理的,比如,有5个逻辑卷,它一概就...

weixin_30755709的博客 145

[明道云] -基础教学5- 明道云 40 种控件详解与场景解析

明道云工作表提供40种业务控件,涵盖文本、数值、关联、公式等类型,支持各类业务场景。文本类支持多行输入、正则校验;数值/金额类提供进度条、百分比显示等功能;关联类实现多表数据引用;公式/函数类支持复杂逻辑运算;自动化类包括打印模板、API调用等控件。合理使用这些控件可提升数据收集质量和自动化效率,同时需注意控件联动的性能影响和权限配置。关键控件包括关联记录、级联选择、公式计算等,适用于订单管理、客户信息关联等业务场景。

每日出拳老爷子的博客 8541

openstack--JUNO10搭建手册整理5: horizon && block

八、Dashboard(Horizon)  仪表盘套件 8.1先决条件 • 安装OpenStack compute(nova)和identity(keystone) service。 • 安装Python2.6或2.7,并必须支持Django。 • 你的浏览器必须支持HTML5并启用cookies和JavaScript功能。也别推荐了,就是google浏览器 8.2安装和配置  contro...

Linux_Peng的博客 491

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

9. Add the Block Storage service

Block Storage Server: 1. sudo apt-get install python-mysqldb 2. sudo apt-get install lvm2 3. 创建存储卷 sudo pvcreate /dev/sdb sudo vgcreate cinder-volumes /dev/sdb 4. sudo vi /etc/lvm/...

apple2025262的博客 93

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Kubernetes SIG Storage 2021 年度技术报告深度解读:CSI 迁移、KEP 里程碑与子项目治理全景

本文以当前仓库 [sig-storage/annual-report-2021.md](https://link.gitcode.com/i/76b2d2c2240ce1e407c6321e4d0d429a) 为骨架,系统梳理 Kubernetes SIG Storage 在 2021 年(覆盖 v1.21、v1.22、v1.23 三个发布周期)的存储技术演进:从 CSI Windows、Gene

gitblog_01026的博客 13

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

OpenStack组件——cinder存储服务

1.cinder 介绍 1)理解 Block Storage 操作系统获得存储空间的方式一般有两种: (1)通过某种协议(SAS,SCSI,SAN,iSCSI 等)挂接裸硬盘,然后分区、格式化、创建文件系统;或者直接使用裸硬盘存储数据(数据库) (2)通过 NFS、CIFS 等 协议,mount 远程的文件系统 第一种裸硬盘的方式叫做 Block Storage(块存储),每个...

weixin_30498807的博客 304

Create Volume 操作(Part II) - 每天5分钟玩转 OpenStack(51)

上一节我们讨论了 Cinder 创建 Volume 的第一部分,cinder-api 的操作,本节继续第二部分,cinder-scheduler 调度工作。cinder-scheduler 执行调度 cinder-scheduler 执行调度算法,通过 Filter 和 Weigher 挑选最优的存储节点 日志为 /opt/stack/logs/c-sch.log。 cind...

weixin_34403693的博客 69

Cinder服务的基本使用

OpenStack早期版本是使用nova-volume为云平台提供持久性块存储服务。从Folsom版本后,就把作为Nova组成部分的nova-volume分离出来,形成了独立的Cinder组件。Cinder本身并不直接提供块存储设备实际的管理和服务,而是在虚拟机和具体的存储设备之间引入一个抽象的“逻辑存储卷”。

XiaoXinYAYAYA的博客 1400

Cinder — back-end storage pools

Cinder 自身不提供存储技术,而是作为一个抽象的中间管理层,北向提供稳定而统一的 Block Storage 资源模型、南向通过 Plug-in 和 Drivers 模型对接多样化的后端存储设备(e.g. LVM、CEPH、NetApp、Datastore etc.)。

李少侠 2164

Glance with Cinder LVM-backed storage (by quqi99)

作者:张华 发表于:2021-12-17 版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明 ( http://blog.youkuaiyun.com/quqi99 ) 本文是将image存储到cinder的LVM存储中,主要为了测试:https://review.opendev.org/c/openstack/charm-glance/+/814882 Setup test env 使用juju来部署的话,“juju config cinder block-device=‘None

技术并艺术着 1249

OpenStack Block Storage (Cinder)完全指南:从概念到实战的10大核心模块解析

OpenStack Block Storage (Cinder)是OpenStack生态中负责提供持久化块存储服务的核心组件,为虚拟机实例提供可扩展的存储解决方案。无论是私有云还是公有云环境,Cinder都扮演着至关重要的角色,帮助用户实现灵活的存储资源管理与分配。本文将深入解析Cinder的10大核心模块,带你从概念到实战全面掌握这一强大工具。 ## 1. Cinder架构全景解析:核心组件与

gitblog_00164的博客 271

配置1个控制/存储节点 + 3个cinder存储节点

本文详细介绍了OpenStack Cinder存储服务的分布式部署方案。采用1个控制/存储节点(192.168.31.151)和3个纯存储节点(192.168.31.141-143)的架构,控制节点运行所有Cinder服务并包含本地存储,各存储节点仅运行cinder-volume服务。配置重点包括:1)环境变量设置;2)控制节点配置4个LVM后端;3)存储节点仅配置自身后端;4)统一的Keystone认证。部署顺序为先控制节点后存储节点,最终通过openstack volume service list命令

技术是手段,服务才是目的。开源与协作是创新的活水,而核心技术的自主可控是立足之本。身处黄金时代,唯持续学习,方能不惧变化。从使用者到创造者,中国技术的未来,正待你们接过火炬,走得更远、更稳、更好。 330
上一篇: add customized javascript and globalization
下一篇: storage -cinder(2)
dingdingwolf
博客等级 码龄16年 7粉丝 94原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值