从 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. react 闲谈

    从事前端一段时间了,公司用的框架都是vue,但是不知为何对react却情有独钟,这是不是所谓的吃着碗里的看着锅里的 哈哈哈 从头好好总结下react吧 小白一个 大神勿喷 瞎说一 react是由两部分 ...

  2. 转 layer的Icon样式以及一些常用的layer窗口使用

    转载地址:http://blog.csdn.net/beauxie/article/details/60959971 本文搜集的是本人在实际开发中所用到的layer窗口,未用到的layer按钮,请参考 ...

  3. WPF学习笔记 - 如何用WPF创建单实例应用程序

    使用一个已命名的(操作系统范围的)互斥量. bool mutexIsNew; using(System.Threading.Mutex m = new System.Threading.Mulex(t ...

  4. pm2 使用

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

  5. Python multiprocess模块(上)

    multiprocess模块 一. Process模块介绍 1. 直接使用Process模块创建进程 (1)主进程和子进程 (2)if __name__ == "__main__" ...

  6. node 笔记整理

    node 合并多个请求的数据 function getList1(num) { var url= "netease/search?keyword=独孤天下&type=song& ...

  7. 在VM虚拟机Windows Server r2上部署安装Microsoft Dynamics CRM 2016 步骤详解(一)

    应公司需求,最近在学微软的Dynamics CRM.在搭建环境的过程中也遇到了一些雷坑,在这里分享一下安装部署过程当中所遇到的一些问题, 安装Microsoft Dynamics CRM 2016的几 ...

  8. 使用checked和unchecked来对整数溢出进行检测和忽略

    在C#中,整数int32的取值为-2147483648~2147473647(可以通过int.MaxValue和int.MinValue获得)当超出这个范围后,编译器不会进行检查,仍然会进行运算,但得 ...

  9. C学习笔记-函数

    函数的定义 返回值类型 函数名([[参数类型 参数名1],[参数类型 参数名2],···,[参数类型 参数n]]) { //执行语句 return 返回值; } 返回值类型:用于限定函数返回值的数据类 ...

  10. C学习笔记-字符串的格式化输出和输入

    存储方式 字符串是内存中一段连续的char空间,以'\0'结尾 字符串就是0结尾的连续char的内存 '\0' <=> 0 <=> null printf函数,putchar函 ...