从 volume  创建流程看 cinder-* 子服务如何协同工作
 
对于 Cinder 学习来说,Volume 创建是一个非常好的场景,涉及各个 cinder-* 子服务,下面是流程图
 
 
1、客户(可以使OpenStack 最终用户,也可以是其他程序)向 API (cinder-api)发送请求:帮我创建一个volume
 
2、API对请求做一些必要的处理后,向Messaging(RabbitMQ)发送了一条消息:让Scheduler创建一个volume
 
3、Scheduler (cinder-scheduler) 从Messaging 获取到 API 发给他的请求,然后执行调度算法,从若干个存储节点中选出节点A
 
4、Scheduler 向Messaging 发送了一条消息:让存储节点A 创建这个volume
 
5、存储节点A 的Volume(cinder-volume)从Messaging中获取到Scheduler发给他的消息,然后通过driver在volume provider上创建volume
 
上面是创建volume最核心的几个步骤,当然也省略了很多细节,我们会在后面详细讨论。
 
Cinder 的设计思想
 
Cinder 延续了Nova 以及其他组件的设计思想
 
API前端服务
 
    cinder-api 作为 Cinder 组件对外的唯一窗口,向用户暴露Cinder能够提供的功能,当客户需要执行volume相关的操作,能且只能向 cinder-api发送REST请求。这里的客户包括终端用户、命令行和OpenStack其他组件。
 
设计API前端服务的好处在于:
 
    1、对外提供统一的接口,隐藏实现细节
    2、API提供REST 标准调度服务,便于第三方系统集成
    3、可以通过运行多个API服务实例轻松实现API的高可用,比如运行多个cinder-api进程
 
Scheduler 调度服务
 
    Cinder 可以有多个存储节点,当需要创建volume时,cinder-scheduler会根据存储节点的属性和资源使用情况选择一个最合适的节点来创建volume。
 
调度服务就好比是一个开发团队中的项目经理,当接到新的开发任务时,项目经理会根据任务的难度、当前每个队员的工作负荷、队员的技能水平等因素,将任务分配给最合适的开发人员。
 
Worker 工作服务
 
调度服务只管分配任务,真正执行任务的是Worker 工作服务。
 
在Cinder中,这个Worker 就是cinder-volume了,这种Scheduler 和 Worker 之间只能上的划分使得OpenStack非常容易扩展:当存储资源不够时可以增加存储节点(增加Worker)。当客户的请求量太大调度不过来时,可以增加Scheduler。
 
Driver框架
 
OpenStack作为开发的 Infrastructure As A Service 云操作系统,支持业界各种优秀哦技术,这些技术可能是开源免费的,也可能是商业收费的。
 
这种开放的架构使得OpenStack保持技术上的先进性,具有很强的竞争力,同时又不会造成厂商的锁定(Lock-in)。那OpenStack的这种开放性体现在哪里呢?一个重要的方面就是采用基于Driver 的框架。
 
以Cinder 为例,存储节点支持多种 volume provider ,包括 LVM、NFS、Ceph、GlusterFS、以及EMC、IBM等商业存储系统。cinder-volume为这些volume provider 定义了统一的driver 接口,volume provider 只需要实现这些接口,就可以driver 的形式即插即用到OpenStack中,下面是 cinder driver 的架构示意图:
 
 
在 cinder-volume 的配置文件  /etc/cinder/cinder.conf 中,volume_driver 配置项设置该存储节点使用哪种 volume provider的driver。下面的示例表示使用的是LVM。
 
[stack@DevStack-Rocky-Controller-31 ~]$ cat /etc/cinder/cinder.conf | grep '_dri'
volume_driver = cinder.volume.drivers.lvm.LVMVolumeDriver
 
 

O046、掌握Cinder 的设计思想的更多相关文章

  1. 掌握 Cinder 的设计思想 - 每天5分钟玩转 OpenStack(46)

    上一节介绍了 Cinder 的架构,这节讨论 Cinder 个组件如何协同工作及其设计思想. 从 volume 创建流程看 cinder-* 子服务如何协同工作 对于 Cinder 学习来说,Volu ...

  2. 使用Unity3D的设计思想实现一个简单的C#赛车游戏场景

    最近看了看一个C#游戏开发的公开课,在该公开课中使用面向对象思想与Unity3D游戏开发思想结合的方式,对一个简单的赛车游戏场景进行了实现.原本在C#中很方便地就可以完成的一个小场景,使用Unity3 ...

  3. spring事务管理器设计思想(二)

    上文见<spring事务管理器设计思想(一)> 对于第二个问题,涉及到事务的传播级别,定义如下: PROPAGATION_REQUIRED-- 如果当前没有事务,就新建一个事务.这是最常见 ...

  4. javascript继承机制的设计思想(ryf)

    我一直很难理解Javascript语言的继承机制. 它没有"子类"和"父类"的概念,也没有"类"(class)和"实例" ...

  5. 09A-独立按键消抖实验01——小梅哥FPGA设计思想与验证方法视频教程配套文档

    芯航线--普利斯队长精心奉献   实验目的: 1.复习状态机的设计思想并以此为基础实现按键消抖 2.单bit异步信号同步化以及边沿检测 3.在激励文件中学会使用随机数发生函数$random 4.仿真模 ...

  6. 08-FPGA状态机设计实例——小梅哥FPGA设计思想与验证方法视频教程配套文档

    芯航线--普利斯队长精心奉献   实验目的:1.学习状态机的相关概念 2.理解一段式.两段式以及三段式状态机的区别以及优缺点 实验平台:芯航线FPGA核心板 实验原理: 状态机全称是有限状态机(fin ...

  7. FPGA重要设计思想

    FPGA重要设计思想   1.速度和面积互换原则.以面积换速度可以实现很高的数据吞吐率,其实串/并转换.就是一种以面积换速度的思想 2.乒乓操作. 3.串/并转换的思想. 高速数据处理的重要技巧之一. ...

  8. 模仿JavaAppArguments.java示例,编写一个程序,此程序从命令行接收多个数 字,求和之后输出结果,写出其的设计思想、程序流程图、源程序代码。

    一 设计思想 首先现在file中建立一个类,并把任务名和类名写上(注意类名的大写):第二步则是参数的输入,并且定义求和变量:第三步则是对参数数据类型的要求,要把字符类型转化为整数类型并输出(这也是本道 ...

  9. Businessworks的设计思想

    Businessworks的设计思想基于一下三篇ATA: <从Eclipse平台看交易平台化>,强调微内核和扩展机制实现 <Google Guice平台模块化开发的果汁>,讨论 ...

随机推荐

  1. sql_monitor实时监控

    1 检查数据库是否启用了监控功能 1)检查参数:CONTROL_MANAGEMENT_PACK_ACCES SQL> show parameter CONTROL_MANAGEMENT_PACK ...

  2. vs2017中信号与槽连接

    在vs2012里和在Qt Creator里添加信号和槽不一样,这里把两种环境下怎么添加详细说明一下 1.在vs2012里添加信号和槽 新建一个qt的项目QtDemo 在qtdeom.h里添加槽 pri ...

  3. P5020 货币系统

    P5020 货币系统 题解 仔细分析... 这道题其实就是求所给数组中有多少个数字不能被该数组中的数字自由组合表示出来 比如样例1 3,10 不能被该集合里的数字表示出来,所以他们组成目标集合 6=3 ...

  4. 在Ubuntu 16.04 LTS下编译安装OpenCV 4.1.1

    目录 一 安装前的准备 二 编译并安装OpenCV 4.1.1 注:原创不易,转载请务必注明原作者和出处,感谢支持! OpenCV目前(2019-8-1)的最新版本为4.1.1.本文将介绍如何在Ubu ...

  5. easuUI之datebox日期选择框

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <hea ...

  6. vue-cli2.x版本安装vue-cli建项目

    全局安装vue-cli 命令行输入: vue-cli版本在3以下 npm install --global vue-cli 安装vue-cli后,可以查看一下是否安装成功vue --version, ...

  7. Java 8 新特性之 Stream 流基础体验

    Java 8 新特性之 Stream 流基础体验 package com.company; import java.util.ArrayList; import java.util.List; imp ...

  8. Pytorch构建ResNet

    学了几天Pytorch,大致明白代码在干什么了,贴一下.. import torch from torch.utils.data import DataLoader from torchvision ...

  9. Android MVC MVP MVVM (一)

    示例效果 一共三个控件,EditText,Button,TextView 成功显示账号信息,查询失败显示错误信息. <?xml version="1.0" encoding= ...

  10. 关于keildownload键变为灰色不能使用的问题

    有时候  有些朋友可能会遇到这样的问题 突然间download键变成灰色,导致不能将程序下载到芯片中 遇到中问题如果不是软件卡了  那就是可能一不小心点错了,关掉了下载条件“约定” 可以点“魔术棒” ...