从 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. CentOS 7服务器下Nginx安装配置

    一.安装编译工具及库文件 $ yum -y install make zlib zlib-devel gcc gcc-c++ libtool openssl openssl-devel pcre pc ...

  2. Centos7卸载nginx及php、php-fpm方法

    Centos7卸载nginx及php.php-fpm方法 2016年12月01日 18:17:22 阅读数:20824 本文环境:Centos7.yum方式安装的nginx和php.php-fpm 之 ...

  3. leetcode30 串联所有单词的子串

    先对words中的单词排列组合,然后对s滑窗操作:部分样例超时,代码如下: class Solution { public: vector<int> findSubstring(strin ...

  4. Jsp +Js + Jquery + EasyUI + Servlet + Lucene,完成分页

    package loaderman.fy.action; import java.io.IOException; import java.io.PrintWriter; import java.uti ...

  5. Pattern Evaluation

    对相关性patten质量的常用分析指标有以下这些 其中,X^2 跟 lift不是null-invariant的,也就是说当~A~B项较多时,这两个指标不是很可靠. 据Jiawei Han所言,Kulc ...

  6. 侧方、s弯道、坡起相关

    侧方: 方向盘上端对准路中箭头直行,当前面箭头头部尖角刚刚消失,停车,挂倒档,倒,当箭头尾部快要消失时右打死,侧身看左后视镜(这时可以稍微踩一下离合控制速度为低速),当出现库底角回正,坐直,当左侧第一 ...

  7. 初识消息中间件之 ==> ActiveMQ

    一.消息队列概述 消息(Message)是指在应用间传送的数据.消息可以非常简单,比如只包含文本字符串,也可以更复杂,可能包含嵌入对象. 消息队列(Message Queue)是一种应用间的通信方式, ...

  8. MFS分布式文件系统

    一.MFS概述: MooseFS(moose 驼鹿)是一款网络分布式文件系统.它把数据分散在多台服务器上,但对于用户来讲,看到的只是一个源.MFS也像其他类unix文件系统一样,包含了层级结构(目录树 ...

  9. pm2 使用

    详见:https://www.cnblogs.com/chyingp/p/pm2-documentation.html

  10. Dozer映射

    1.为什么要映射 一个映射的框架在一个分层的体系架构中非常有用,特别是你在创建一个抽象的分层去包装一些特殊数据的变化 vs 这些数据传输到其它层(外部服务的数据对象.领域的数据对象.数据传输对象.内部 ...