zoukankan      html  css  js  c++  java
  • Openstack 03

    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 模块是非常核心的部分,理解起来须要结合架构设计来理解,注意与其它模块的交互。





    
  • 相关阅读:
    [模板] 循环数组的最大子段和
    [最短路][几何][牛客] [国庆集训派对1]-L-New Game
    [洛谷] P1866 编号
    1115 Counting Nodes in a BST (30 分)
    1106 Lowest Price in Supply Chain (25 分)
    1094 The Largest Generation (25 分)
    1090 Highest Price in Supply Chain (25 分)
    树的遍历
    1086 Tree Traversals Again (25 分)
    1079 Total Sales of Supply Chain (25 分 树
  • 原文地址:https://www.cnblogs.com/jhcelue/p/7308100.html
Copyright © 2011-2022 走看看