Openstack 03 - Nova Compute
1.前言
非常早之前就開始着手写Openstack 系列的博客了,在写了总体架构和Keystone之后,准备写Nova,可是每次写到一半,自己心里就认为不踏实,由于似乎我并没有真正理解Nova,或者说根本就没理解Compute的真正意义。Nova 也许并不只不过Openstack总体架构中的一个组件那么简单。今天准备開始写Nova。可是我依然认为距离全然理解Nova另一段距离,但我打算先写出来。读者可以一起探讨。
2.背景
之前与同事在讨论云计算的时候,他说云计算事实上是一个伪命题。由于根本不存在什么云,这些概念是说给外行或者不懂技术的客户听的。云本质上就是一个操作系统。作用是调度各类基础资源。以服务的形式暴露出来。想想我们的计算机操作系统。不也是把硬盘、网络、CPU这些作为基础资源暴露出来,供上层应用来调用嘛.我对这个观点表示深深地认同,真正的专家是把高深的概念用通俗的方式解释出来,解开云计算神奇的面纱。我们再次审视我们每天所谓的云,事实上就是一个大型的分布式、高可用的基础资源管理系统。云计算的计算概念是怎样理解呢?个人认为计算即调度。云操作系统不只要可以管理资源。并且必须知道何时提供多少资源,这样才可以让云智能起来,说得通俗点就是资源的调度过程,用一个高大上的词汇就是智能。比方在Openstack中。假设集成了KVM和VMWare。那么用户在创建资源的时候,Openstack必须知道哪个节点资源的占用情况,从而讲任务分配到空暇的节点,甚至可以在资源池之间自己主动漂移。
这才是计算最本质的东西。
当然Nova 还须要管理实例的生命周期的各个状态,比方虚拟机的创建,挂起。停止,重新启动等等。
不过眼下不支持动态扩容,由于扩容须要重新启动实例,这须要高可用特性的支持.
3.Nova
Nova 是Openstack整个体系中的计算组件。从背景一节中。我提出了计算即调度的概念。那么Nova 必须要与存储,网络等模块打交道(当然还有keystone),与此同一时候,Nova 并没有详细实现虚拟化(详细的虚拟化是KVM,VMWare,Xen),Nova 通过librivt调用详细的虚拟化平台。
所以我们就非常easy得出结论,nova的架构例如以下:
总结下来,nova的主要组件例如以下:
- API Server (nova-api)
- Message Queue (rabbit-mq server)
- Compute Workers (nova-compute)
- Network Controller (nova-network)
- Volume Worker (nova-volume)
- Scheduler (nova-scheduler)
以下逐一介绍下各个组件的基本功能:
API Server(nova-api)
API Server对外提供一个与云基础设施交互的接口,也是外部可用于管理基础设施的唯一组件。管理使用EC2 API通过web services调用实现。
然后API Server通过消息队列(Message Queue)轮流与云基础设施的相关组件通信。作为EC2 API的第二种选择,OpenStack也提供一个内部使用的“OpenStack API”。
Message Queue(Rabbit MQ Server)
OpenStack 节点之间通过消息队列使用AMQP(Advanced Message Queue Protocol)完毕通信。Nova 通过异步调用请求响应,使用回调函数在收到响应时触发。由于使用了异步通信。不会实用户长时间卡在等待状态。这是有效的,由于很多API调用预期的行为都非常耗时,比如载入一个实例,或者上传一个镜像。
Compute Worker(nova-compute)
Compute Worker处理管理实例生命周期。他们通过Message Queue接收实例生命周期管理的请求,并承担操作工作。在一个典型生产环境的云部署中有一些compute workers。
一个实例部署在哪个可用的compute worker上取决于调度算法。
Network Controller(nova-network)
Network Controller 处理主机地网络配置。
它包含IP地址分配、为项目配置VLAN、实现安全组、配置计算节点网络。
Volume Workers(nova-volume)
Volume Workers用来管理基于LVM(Logical Volume Manager)的实例卷。Volume Workers有卷的相关功能。比如新建卷、删除卷、为实例附加卷,为实例分离卷。卷为实例提供一个持久化存储,由于根分区是非持久化的,当实例终止时对它所作的不论什么改变都会丢失。当一个卷从实例分离或者实例终止(这个卷附加在该终止的实例上)时,这个卷保留着存储在其上的数据。当把这个卷重附载入同样实例或者附加到不同实例上时,这些数据依然能被訪问。
一个实例的关键数据差点儿总是要写在卷上。这样可以确保能在以后訪问。这个对存储的典型应用须要数据库等服务的支持。
Scheduler(nova-scheduler)
调度器Scheduler把nova-API调用映射为OpenStack组件。
调度器作为一个称为nova-schedule守护进程执行。通过恰当的调度算法从可用资源池获得一个计算服务。
Scheduler会依据诸如负载、内存、可用域的物理距离、CPU构架等作出调度决定。nova scheduler实现了一个可插入式的结构。
当前nova-scheduler实现了一些主要的调度算法:
◾随机算法:计算主机在全部可用域内随机选择
◾可用域算法:尾随机算法相仿,可是计算主机在指定的可用域内随机选择。
◾简单算法:这样的方法选择负载最小的主机执行实例。负载信息可通过负载均衡器获得。
关于这部分的源代码解读。请參考博客:
1) Scheduler 源代码解析
http://blog.csdn.net/gaoxingnengjisuan/article/details/15615743
2)Nova-Schedluer 的调度
http://lynnkong.iteye.com/blog/1699413
这里着重须要强调下,Nova 虚拟机的创建,启动过程,请參考这篇:
1)openstack之虚拟机的创建流程
http://www.tuicool.com/articles/MbIRN3
2)openstack 虚拟机启动
http://www.aboutyun.com/thread-6882-1-1.html
4.总结
Nova 模块是非常核心的部分,理解起来须要结合架构设计来理解,注意与其它模块的交互。
Openstack 03 - Nova Compute的更多相关文章
- OpenStack 之 Nova Compute 的代码结构图
nova-compute 的代码结构图 如上图所看到的, 类图中最重要的三个Category Manager: 核心的业务类.提供实际的业务操作.比如启动虚拟机等等. Service: 每一个serv ...
- OpenStack:安装Nova
>安装Nova1. 安装# apt-get install nova-novncproxy novnc nova-api \ nova-ajax-console-proxy nova-cert ...
- OpenStack之Nova模块
Nova简介 nova和swift是openstack最早的两个组件,nova分为控制节点和计算节点,计算节点通过nova computer进行虚拟机创建,通过libvirt调用kvm创建虚拟机,no ...
- Openstack之Nova创建虚机流程分析
前言 Openstack作为一个虚拟机管理平台,核心功能自然是虚拟机的生命周期的管理,而负责虚机管理的模块就是Nova. 本文就是openstack中Nova模块的分析,所以本文重点是以 ...
- 1898 ERROR nova.compute.manager
2018-06-10 21:03:54.045 1898 ERROR nova.compute.manager [instance: 15a6c26f-b8af-4a3e-a3df-8552c16e0 ...
- openstack setup demo Compute service
本文包含以下部分 Compute service overview Install and configure controller node Prerequisites Install and co ...
- OpenStack核心组件-nova计算服务
1. nova介绍 Nova 是 OpenStack 最核心的服务,负责维护和管理云环境的计算资源.OpenStack 作为 IaaS 的云操作系统,虚拟机生命周期管理也就是通过 Nova 来实现的. ...
- Openstack计算Nova组件
欢迎来到虚拟机的世界,如果我们将Openstack环境里运行在各个无力节点上的各种服务看座生命体,而不是死的指令集合,那么就是一个虚拟机的世界. Openstack的计算组件,也就是Nova项目实现了 ...
- openstack核心组件——nova计算服务(7)
云计算openstack核心组件——nova计算服务(7) 一.nova介绍: Nova 是 OpenStack 最核心的服务,负责维护和管理云环境的计算资源.OpenStack 作为 ...
随机推荐
- python接口自动化16-multipart/form-data上传图片
前言 在提交表单操作的时候,经常会遇到图片上传的操作,图片上传是一个单独的接口,本篇以禅道为例,介绍如何上传图片 上传接口 1.以禅道上提交bug为例,在选择图片时,点确定按钮,就是上传图片了 2.用 ...
- (重置adb.exe)android关于The connection to adb is down, and a severe error has occured.这个问题的解决办法
转自:http://www.sjsjw.com/kf_mobile/article/3_24710_14072.asp 这里补充一个更简单的方法(和下面的方法一样的效果): 有时在打开模拟器的时候会出 ...
- SQL中关于where后面不能放聚合函数(如sum等)的解决办法
我们在编写较为复杂的SQL语句的时候,常常会遇到需要将sum()放到where后面作为条件查询,事实证明这样是无法执行的,执行会报[此处不允许使用分组函数]异常. 那么如何解决呢,使用HAVING关键 ...
- Mac配置PHP开发环境
安装环境如下: Mac OS 10.10.1 Apache 2.4.9 PHP 5.5.14 MySQL 5.6.22 Apache配置 在Mac OS 10.10.1中是自带Apache软件的,我们 ...
- matlab从文件夹名中获得该文件夹下所图像文件名
function [s,nameC]=get_FileNameFromFolderPath(path) % 函数调用:[s,nameC]=get_FileNameFromFolderPath(path ...
- SIGSEGV异常时打印函数调用链
C语言写的程序跑飞了,怎样打印出函数调用链呢? linux_dev_framework软件包中的trace_exception_test.c就是一个实现演示样例. 该程序有益产生一个内存訪问异常,然后 ...
- Java多线程学习(吐血超具体总结)
林炳文Evankaka原创作品. 转载请注明出处http://blog.csdn.net/evankaka 写在前面的话:此文仅仅能说是java多线程的一个入门.事实上Java里头线程全然能够写一本书 ...
- 自建一个Java Spring MVC项目
用IDEA Intellij,本来创建的是SpringMVC项目,但是下载的时候,太慢了.所以还是用的Maven项目. 选择Maven 项目->Archetype->Web applica ...
- python基础之模块 序列化
什么是序列化(picking)? 我们把变量从内存中变成可存储或传输的过程称之为序列化. 序列化之后,就可以把序列化后的内容写入磁盘,或者通过网络传输到别的机器上. 反过来,把变量内容从序列化的对象重 ...
- Android批量图片加载经典系列——Volley框架实现多布局的新闻列表
一.问题描述 Volley是Google 2013年发布的实现Android平台上的网络通信库,主要提供网络通信和图片下载的解决方案,比如以前从网上下载图片的步骤可能是这样的流程: 在ListAdap ...