zoukankan      html  css  js  c++  java
  • 学习OpenStack-Nova计算服务

    一、Nova计算服务的概念

    ·计算服务是OpenStack最核心的服务之一,负责维护和管理云环境的计算资源,它在OpenStack项目中代号是Nova

    ·Nova自身并没有提供任何虚拟化能力,它提供计算服务,使用不同的虚拟化驱动来与底层支持的Hypervisor(虚拟机管理器)进行交互。所有的计算实例(虚拟服务器)由Nova进行实例生命周期(从创建到销毁/释放)的调度管理(启动、挂起、停止、删除等)

    ·Nova需要Keystone、glance、neutron、cinder和swift等其他服务的支持,能与这些服务集成,实现如加密磁盘、裸金属计算实例等

    Nova服务和其他服务的区别,例如Glance镜像服务

    Glance服务:对自己服务范围提供管理,提供自己的服务

    Nova服务:本身不能提供服务,需要和其他核心服务集成,进行调用,最终实现需求

    二、Nova系统架构

    DB:用于数据存储的sql数据库

    API:用于接收HTTP请求、转换命令、通过消息队列或HTTP与其他组件通信的nova组件

    Scheduler:用于决定哪台计算节点承载计算实例的nova调度器

    Network:管理IP转发、网桥或虚拟局域网的nova网络组件

    Compute:管理虚拟机管理器(KVM)与虚拟机之间通信的nova计算组件

    Conductor:处理需要协调(构建虚拟机或调整虚拟机大小)的请求,或者处理对象转换,避免越权

    ·只要跟虚拟机生命周期相关的操作,nova-api都可以相应

    ·Nova-api对接收到的HTTP API请求做以下处理:

    1)检查客户端传入的参数是否合法有效

    2)调用nova其他服务来处理客户端HTTP请求

    3)格式化nova其他子服务返回结果并返回给客户端

    ·Nova-api是外部访问并使用nova提供的各种服务的唯一途径,也是客户端和nova之间的中间层

    三、Nova组件-API

    ·API是客户访问nova的http接口,它由nova-api服务实现,nova-api服务接收和响应来自最终用户的计算api请求。作为openstack对外服务的最主要接口,nova-api提供了一个集中的可以查询所有api 的端点。

    ·所有对nova的请求都首先由nova-api处理。API提供REST标准调用服务,便于与第三方系统集成。

    ·最终用户不会直接改送RESTful API请求,而是通过openstack命令行、dashboard和其他需要跟nova交换的组件来使用这些API。

    ·只要跟虚拟机生命周期相关的操作,nova-api都可以相应

    ·Nova-api对接收到的HTTP API请求做以下处理:

    1) 检查客户端传入的参数是否合法有效

    2) 调用nova其他服务来处理客户端HTTP请求

    3) 格式化nova其他子服务返回结果并返回给客户端

    ·Nova-api是外部访问并使用nova提供的各种服务的唯一途径,也是客户端和nova之间的中间层

    四、Nova组件-Scheduler

    ·Scheduler可译为调度器,由nova-scheduler服务实现,主要解决的是如何选择在哪个计算节点上启动实例的问题。它可以应用多种规则,如果考虑内存使用率、CPU负载率、CPU构架(intel/amd)等多种因素,根据一定的算法,确定虚拟机实例能够运行在哪一台计算服务器上。Nova-scheduler服务会从队列中接收一个虚拟机实例的请求,通过读取数据库的内容,从可用资源池中选择最合适的计算节点来创建新的虚拟机实例。

    ·创建虚拟机实例时,用户会提出资源需求,如CPU、内存、磁盘各需要多少。OpenStack将这些需求定义在实例类型中,用户只需指定使用哪个实例类型

    调度器的类型:

    ·随机调度器:从所有正常运行nova-compute服务的节点中随机选择

    ·缓存调度器:是随机调度器的一种特殊类型,在随机调度器的基础上,将主机资源信息缓存在本地内存中,然后通过后台的定时任务,定时从数据库中获取最新的主机资源信息,周期性同步而不是实时获取主机资源信息。

    ·过滤器调度器:根据指定的过滤条件以及权重选择最佳的计算节点,又称为筛选器。

    过滤器调度器调度过程:

    ·通过指定的过滤器选择满足条件的计算节点,比如内存使用率,可以使用多个过滤器依次进行过滤。

    ·对过滤之后的主机列表进行权重计算并排序,选择最优的计算节点来创建虚拟机实例。

    调度器与DB的交互过程:

    ·scheduler组件决定的是虚拟机实例部署在哪台计算节点上并调度,在调度之前,会先向数据库获取宿主机资源信息作为依据;

    ·之后可通过过滤器和权重选择最合适的节点调度,或者指定节点直接调度;

    ·计算节点的 libvirt 工具负责收集宿主机的虚拟化资源,根据已创建的实例再次统计资源,将资源信息更新到数据库中,整个更新资源信息的过程是周期性执行的,而不是实时的;

    ·所以存在一个问题,当刚创建完一个实例,随即又需要创建时,数据库还未来得及更新宿主机的最新状态,那么调度器依据的信息就不正确,有可能所选的节点资源并不够用,而导致调度失败。

    ·这同时也是缓存调度器的缺陷,无法实时获取租主机资源信息。我们可在调度完成时,直接将资源信息返回给数据库,更新数据库状态,解决这个问题。

    过滤器

    ·当过滤调度器需要执行调度操作时,会让过滤器对计算节点进行判断,返回ture或false,按照主机列表中的顺序依次过滤。

    ·scheduler_available_filters 选项用于配置可用过滤器,默认是所有nova自带的过滤器都可以使用。

    ·scheduler_default_filters 选项用于指定nova-schedule 服务真正使用的过滤器。

    过滤器类型:

    ·RetryFilter(再审过滤器)
    主要作用是过滤掉之前已经调度过的节点(类比污点)。如A、B、C都通过了过滤,A权重最大被选中执行操作,由于某种原因,操作在A上失败了。Nova-filter 将重新执行过滤操作,再审过滤器直接过滤掉A,以免再次失败。

    ·AvailabilityZoneFilter(可用区域过滤器)
    主要作用是提供容灾性,并提供隔离服务,可以将计算节点划分到不同的可用区域中。Openstack默认有一个命名为nova的可用区域,所有计算节点一开始都在其中。用户可以根据需要创建自己的一个可用区域。创建实例时,需要指定将实例部署在那个可用区域中。通过可用区过滤器,将不属于指定可用区的计算节点过滤掉。

    ·RamFilter(内存过滤器)
    根据可用内存来调度虚拟机创建,将不能满足实例类型内存需求的计算节点过滤掉,但为了提高系统资源利用率, Openstack在计算节点的可用内存允许超过实际内存大小,可临时突破上限,超过的程度是通过nova.conf配置文件中ram_ allocation_ ratio参数来控制的, 默认值是1.5。(但这只是临时的)
    Vi /etc/nova/nova . conf
    Ram_ allocation_ ratio=1 .5

    ·DiskFilter(硬盘过滤器)
    根据磁盘空间来调度虚拟机创建,将不能满足类型磁盘需求的计算节点过滤掉。磁盘同样允许超量,超量值可修改nova.conf中disk_ allocation_ ratio参数控制,默认值是1.0,(也是临时的)
    Vi /etc/nova/nova.conf
    disk_ allocation_ ratio=1.0

    ·CoreFilter(核心过滤器)
    根据可用CPU核心来调度虚拟机创建,将不能满足实例类型vCPU需求的计算节点过滤掉。vCPU也允许超量,超量值是通过修改nova.conf中cpu_ allocation_ratio参数控制,默认值是16。
    Vi /etc/nova/nova. conf
    cpu_allocation_ ratio=16.0

    ·ComputeFilter(计算过滤器)
    保证只有nova-compute服务正常工作的计算节点才能被nova-scheduler调度,它是必选的过滤器。

    ·ComputeCapabilitiesFilter(计算能力过滤器)
    根据计算节点的特性来过了,如不同的架构。

    ·ImagePropertiesFilter(镜像属性过滤器)
    根据所选镜像的属性来筛选匹配的计算节点,通过元数据来指定其属性。如希望镜像只运行在KVM的Hypervisor上,可以通过Hypervisor Type属性来指定。

    ·服务器组反亲和性过滤器
    要求尽量将实例分散部署到不同的节点上,设置一个服务器组,组内的实例会通过此过滤器部署到不同的计算节点。适用于需要分开部署的实例。

    ·服务器组亲和性过滤器
    此服务器组内的实例,会通过此过滤器,被部署在同一计算节点上,适用于需要位于相同节点的实例服务

  • 相关阅读:
    How to use epoll? A complete example in C
    分享:libzip 0.11 发布,C 语言的 zip 压缩开发包
    linux AIO (异步IO) 那点事儿
    通过引用计数解决野指针的问题(C&C++)
    [原]浅谈几种服务器端模型——反应堆模式(epoll 简介) _Boz 博客园
    基于EPOLL写的HTTP服务器(加入了线程池)_没落都城_新浪博客
    jQuery检测浏览器名称和版本信息
    Jquery.ajax中dataType不可少
    jquery 手风琴效果
    ie下ajax错误:由于出现错误 c00ce56e 而导致此项操作无法完成
  • 原文地址:https://www.cnblogs.com/Xing88/p/14186111.html
Copyright © 2011-2022 走看看