openstack-cinder-volume服务启动分析

OpenStack平台的cinder-volume卷服务状态down的解决方法 cinder-volume服务的状态如果是down,有可能的问题就是两个节点时间不一致导致的(可以分别查看一下两个节点的时间是否一致,不一致的话就按如下操作同步时间),两个节点分别同步一下时间即可。[此方法适合解决两个节点时间不一致所导致的cinder-volume服务状态down的问题] 在controller节点查看一下服务 #source /etc/keystone/admin-openrc.sh //运行环境变量 #cinder service-list //查看cinder服务 阅读详情
服务进程启动如图

image

调用cinder/cmd/volume.py 的main方法启动服务

def main():
    objects.register_all()  //导入cinder 的相关orm object
    gmr_opts.set_defaults(CONF) 
    CONF(sys.argv[1:], project='cinder',
         version=version.version_string())
    logging.setup(CONF, "cinder")
    python_logging.captureWarnings(True)
    priv_context.init(root_helper=shlex.split(utils.get_root_helper()))
    utils.monkey_patch() //打猴子补丁
    gmr.TextGuruMeditation.setup_autorun(version, conf=CONF) //捕获异常日志相关
    global LOG
    LOG = logging.getLogger(__name__) //定义日志

    if not CONF.enabled_backends:
        LOG.error('Configuration for cinder-volume does not specify '
                  '"enabled_backends". Using DEFAULT section to configure '
                  'drivers is not supported since Ocata.')
        sys.exit(1)

    if os.name == 'nt':
        # We cannot use oslo.service to spawn multiple services on Windows.
        # It relies on forking, which is not available on Windows.
        # Furthermore, service objects are unmarshallable objects that are
        # passed to subprocesses.
        _launch_services_win32()
    else:
        _launch_services_posix() //启动Linux服务

实例化launcher,Linux下实例化 ProcessLauncher

def _launch_services_posix():
    launcher = service.get_launcher() //调用oslo_service

    for backend in filter(None, CONF.enabled_backends):
        _launch_service(launcher, backend)

    _ensure_service_started()

    launcher.wait()
class ProcessLauncher(object):
    """Launch a service with a given number of workers."""
    ................

调用_launch_service, 实例化server,创建cinder-volume的backend的service记录,并初始化sqlalchemy 数据库连接池,启动服务

def _launch_service(launcher, backend):
    CONF.register_opt(host_opt, group=backend)
    backend_host = getattr(CONF, backend).backend_host
    host = "%s@%s" % (backend_host or CONF.host, backend)
    # We also want to set cluster to None on empty strings, and we
    # ignore leading and trailing spaces.
    cluster = CONF.cluster and CONF.cluster.strip()
    cluster = (cluster or None) and '%s@%s' % (cluster, backend)
    try:
        server = service.Service.create(host=host,
                                        service_name=backend,
                                        binary=constants.VOLUME_BINARY,
                                        coordination=True,
                                        cluster=cluster)
    except Exception:
        LOG.exception('Volume service %s failed to start.', host)
    else:
        # Dispose of the whole DB connection pool here before
        # starting another process.  Otherwise we run into cases where
        # child processes share DB connections which results in errors.
        session.dispose_engine()
        launcher.launch_service(server)
        _notify_service_started()

接着调用 ProcessLauncher实例的 launch_service 函数,传入cinder-volume的service,fork出子进程,默认workers=1,即每个backend service默认只启动一个worker干活

 def launch_service(self, service, workers=1):
        """Launch a service with a given number of workers.

       :param service: a service to launch, must be an instance of
              :class:`oslo_service.service.ServiceBase`
       :param workers: a number of processes in which a service
              will be running
        """
        _check_service_base(service)
        wrap = ServiceWrapper(service, workers)

        # Hide existing objects from the garbage collector, so that most
        # existing pages will remain in shared memory rather than being
        # duplicated between subprocesses in the GC mark-and-sweep. (Requires
        # Python 3.7 or later.)
        if hasattr(gc, 'freeze'):
            gc.freeze()

        LOG.info('Starting %d workers', wrap.workers)
        while self.running and len(wrap.children) < wrap.workers:
            self._start_child(wrap)

通过os.fork 出子进程,让子进程初始化eventlet协程池,子进程调用add方法,执行run_service, 最终执行cinder-volume的service.start(),此时如果数据库中没有cinder-volume service,则会自动创建service记录。

 def _start_child(self, wrap):
        if len(wrap.forktimes) > wrap.workers:
            # Limit ourselves to one process a second (over the period of
            # number of workers * 1 second). This will allow workers to
            # start up quickly but ensure we don't fork off children that
            # die instantly too quickly.
            if time.time() - wrap.forktimes[0] < wrap.workers:
                LOG.info('Forking too fast, sleeping')
                time.sleep(1)

            wrap.forktimes.pop(0)

        wrap.forktimes.append(time.time())

        pid = os.fork()
        if pid == 0:
            self.launcher = self._child_process(wrap.service)
            while True:
                self._child_process_handle_signal()
                status, signo = self._child_wait_for_exit_or_signal(
                    self.launcher)
                if not _is_sighup_and_daemon(signo):
                    self.launcher.wait()
                    break
                self.launcher.restart()

            os._exit(status)

        LOG.debug('Started child %d', pid)

        wrap.children.add(pid)
        self.children[pid] = wrap

        return pid

至此 cinder-volume 服务启动完成!

关于cinder servic-list只能看到cinder-scheduler cinder-volume 启动失败 错误日志如下 [root@block ~]# tail /var/log/cinder/volume.log 2020-04-25 18:28:43.517 34731 ERROR cinder.cmd.volume from cinder.volume.flows.manager import create_volume 2020-04-25 18... 阅读详情

相关推荐

单板重启后,cinder-volume服务起不来

日志 /var/log/upstart/cinder-volume.log 错误: Error: Got unknown keyword args to utils.execute: {'old_name': None} 错误分析:这是OpenStack Folsom版本的一个BUG,造成cinder-volumn服务在节点重启后无法正常启动, 最新版本已经修订https://bug

tsjsdbd的专栏 2112

kolla 安装openstack问题

https://www.cnblogs.com/chaofan-/p/11715402.html 销毁重新部署时,出现错误:MariaDB cluster exists but is stopped 检查出错节点的docker volume 是否没有清理干净 错误1: 检查环境时,no module named docker pip install docker 错误2:环境检查时,nova任务时报错TASK [nova : Ensuring config directories exist.

qq_42533216的博客 5980

openstack cinder default volume

Cinder中多个volume 驱动时,调整cinder默认调动类型:(CentOS7) [root@node-3 ~]# cinder type-list +--------------------------------------+------+ | ID | Name | +--------------------------------------+------+ | 585a

fabian4的专栏 1188

Openstack15--块存储服务(Cinder)安装

安装的“openstack-cinder”软件包里包括“cinder-api”和“cinder-scheduler”模块。安装“openstack-cinder”软件包时,和安装其他OpenStack核心组件时一样,会自动创建名为“cinder”的Linux系统用户和同名的用户组。

m0_70212665的博客 1648

openstack之cinder介绍

OpenStack Cinder组件摘要 Cinder是OpenStack的块存储服务,在虚拟机与存储设备间提供逻辑存储卷抽象层。它包含API、Scheduler、Volume、Backup等核心组件,通过统一接口管理多种后端存储。工作原理包括:API接收请求,Scheduler选择最优节点,Volume执行具体操作。支持卷/快照/备份管理,常用命令包括创建卷(volume create)、挂载(add volume)、备份(backup create)等。Cinder本身不直接管理存储设备,而是通过驱动对

查士丁尼绵_的博客 1035

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...

PpikachuP的博客 4552

cinder volume启动流程解析

基于openstack stable queens版本阅读解析 基于 centos7.5 的linux系统 架构 如下所示,为cinder的官方架构说明: 各个组件介绍如下: - DB: sql database for data storage. Used by all components. - Web Dashboard: potential external c...

我的玩具熊呢 3252

OpenStack创建卷报错

情景 创建lvm类型的卷的时候,直接报错,cinder相关日志无报错,但是在某个存储节点的volume.log日志里有如下报错,表面上看是消息队列有问题,其实不是。 tailf /var/log/cinder/volume.log 2021-03-19 14:30:38.631 118077 ERROR cinder.service [-] Manager for service cinder-volume computer04@lvm is reporting problems, not sending

weixin_40548182的博客 2454

OpenStack Cinder源码流程简析

一、概况 OpenStack的各个模块都有相应的客户端模块实现,其作用是为用户访问具体模块提供了接口,同时也作为模块之间相互访问的途径。 相应的,OpenStack的Cinder模块分为两个组件:cinderclient和cinder,其代码分别参见如下: https://github.com/openstack/python-cinderclient https://github.com

崔炳华 5517

最新测算源码PHP算命源码-风水八字-八字起名-塔罗牌占卜

未来,随着技术的发展和用户需求的变化,我们可以继续对系统进行升级和优化,以满足更多用户的需求和期望。数据库设计:创建一个名为bazi的数据库表,包含以下字段:id(自增ID)、name(姓名)、sex(性别)、birth_date(出生日期)、birth_time(出生时间)、bazi(八字结果)。数据库设计:创建一个包含塔罗牌信息的数据库表,如tarot_cards,包含字段:id(塔罗牌ID)、name(塔罗牌名称)、meaning(塔罗牌含义)等。根据操作系统的不同,PHP的安装方法会有所不同。

shanbeizi的博客 2414

风二西CTF流量题大集合-刷题笔记|基础题(1)

部分题目已包含脚本和解题视频,但更建议自行分析和手搓脚本。

zerorzeror的博客 2756

OpenStack U版双机部署-启动实例

启动实例前言一、启动实例1、首先创建网络,2、接着创建flavor,3、接着上传镜像,4、接着创建安全组,5、接着创建密钥对,6、最后启动实例,1)、创建provider类型的实例报错解决创建实例报错:2)、创建self-service类型实例二、访问实例1、console访问2、控制台访问三、添加volume卷 前言 OpenStack环境中要启动实例,必须指定flavor、glance名称、网络、安全组、密钥和实例名称。 命令示例:openstack server create --flavor m1.

老徐头子的博客 1548

VirtualLab初学者教程-1.用户界面

目录前言一、VirtualLab Fusion简介1.软件2.内置工具箱:二、用户界面认识1.上方菜单栏2.右侧面主窗口3.底部窗口附 前言 感觉做VirtualLab的资料不是特别多,可能用的朋友也比较少吧,笔者最近也因为大创需要刚刚开始入门,把网上有的英文资料整理了一下,加了一点自己的内容发出来希望帮助更多在学习中的朋友,有用词不当之处还请多多包涵。 一、VirtualLab Fusion简介 因为是第一讲,简单啰嗦一下软件本身,参考官方介绍。 1.软件 VirtualLab是由德国LightTran

ClaireTang1的博客 2万+

Openstack Cinder 服务启动代码分析

def start(self):         #vers=2013.2.3         version_string = version.version_string()         LOG.audit(_('Starting %(topic)s node (version %(version_string)s)'),                   {'topic': s

u014226457的专栏 957

DAIC-WOZ数据集文件结构详解:CLNF特征文件、音频转录与PHQ8评分全解读

本文深入解析DAIC-WOZ数据集的文件结构,重点介绍CLNF特征文件、音频转录与PHQ8评分的详细内容。通过多模态数据处理实战指南,帮助研究者高效利用这一抑郁分析领域的重要资源,掌握面部动作单元、声学特征和文本转录的科学解读与应用技巧。

weixin_29159711的博客 178

Proteus一体化安装STC15库添加

Proteus一体化安装与STC15库添加指南 本文详细介绍了Proteus 8.9 SP2专业版的一体化安装流程和STC15系列单片机库文件的添加方法。安装过程简单快捷,无需破解,稳定性好。通过将两个库文件(Lib和LIB)复制到Proteus安装目录的DATA/LIBRARY文件夹中,即可实现STC15W4K32S4芯片的仿真功能。文中还提供了新建工程和器件放置的步骤说明,特别指出STC15W4K32S4芯片可兼容仿真其他STC15系列芯片,并附带下载链接获取资源。该教程适用于电子设计初学者和开发者。

#法外狂徒张三的博客 4万+

Cinder服务的基本使用

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

XiaoXinYAYAYA的博客 1398

工业异常检测评价指标(I-AUROC、PRO等)

模型评价指标:TPR、FPR、Recall、ROC、AUC、AUROC、IoU、PRO、AUPRO等

qq_1532145264的博客 7401

OpenStack — Cinder

文章目录CinderCinder组件cinder-apicinder-volumecinder-schedulercinder-backupVolume Provider Cinder Cinder(Block Storage service)提供对volume从创建到删除整个生命周期的管理,从instance的角度看,挂载的每一个volume都是一块硬盘。 在openstack最小化安装中,可以选择不安装Cinder服务,此时所有的虚拟机的磁盘数据都会写入到启动这个虚拟机的计算节点上的本地磁盘。因此会面临

李少侠 2270

基于STM32的DS1302电子时钟电路与程序设计

这个示例代码中,我们使用DS1302_GetTime函数从DS1302芯片获取当前时间,并使用DS1302_GetDate函数获取当前日期。在本文中,我们将介绍如何使用STM32微控制器和DS1302实时时钟芯片来构建一个基于STM32的DS1302电子时钟,并提供相应的程序设计。请注意,以上示例代码仅供参考,具体的实现细节可能会根据使用的开发环境和硬件组件有所差异。在实际应用中,你可能需要根据自己的需求进行适当的调整和修改。为了完整实现电子时钟的功能,你还可以添加其他功能,例如闹钟设置、温度显示等。

UbiSqlserver的博客 1319

从零实现深度学习框架——理解正则化(一)

本文介绍解决过拟合与欠拟合的方法——正则化,主要介绍L1和L2正则化。

日积月累,天道酬勤 3385

cinder-volume服务状态为down 解决方法

[root@controller ~]# cinder service-list +------------------+-------------+------+---------+-------+----------------------------+-----------------+ | Binary | Host | Zone | Status | ...

weixin_34104341的博客 6691

android 蓝牙通讯demo

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

openstack之Cinder

Cinder 文章目录Cinder1.理解块存储服务2.Cinder 架构以及块存储服务组件介绍3.物理部署方案4.安装组件并配置5.初始化块存储服务的数据库,并验证6.配置计算服务以使用块设备存储7.完成安装8.创建cinder和cinderv2服务实体9.创建块设备存储服务的API入口点10.cinder-scheduler的调度 1.理解块存储服务 操作系统获得存储空间的方式一般有两种: 通...

959 822

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

openstack——cinder服务篇

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

weixin_30527551的博客 585

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

服务器重启后,cinder-volume服务状态down

devstack服务器重启后,openstack有些服务无法启动。 使用systemctl restart devstack@*重启服务后,nova服务启动。 执行: cinder service-list 开始cinder服务up, 查询日志: sudo journalctl -a -u devstack@c-vol.service | grep “ERROR” 显示: Aug 25 12:04:05 computer cinder-volume[5124]: ERROR cinder.utils [N

m0_49212388的博客 3046
上一篇: go-基于list方式的redis消息队列
下一篇: gorm-使用mysql事务
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

云原生与数据笔记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值