引.言
当前我们正处于大众创新、万众创业的时代背景中,云计算技术强大的整合能力能够给商业模式带来更多的创新。随着云计算技术的普及,在一定程度上也帮助到各企业完善基础设施、快速构建科技系统架构,但云计算平台的建设不是简单的软、硬件集成项目,它的种种特性依赖于它底层繁多的组件,在享受技术便利的同时需要接受其运维的复杂性,作为运维人员我们该如何与其相处呢?
面对云计算如此庞大且复杂的平台架构,一定要抱着“弱水三千,只取一瓢”的学习精神,OpenStack本身是由一系列软件开源项目组合而成,毕竟是当年NASA(美国国家航空航天局)和Rackspace众大神合作研发,千万不要勉强自己一口吃个胖子,我们学习过程可以通过对OpenStack平台进行一步步拆解,先从单个组件开始学习原理特性,按照这些特性再去尝试解读源代码,本次分享主要是对OpenStack Nova组件功能特性进行讲解。
概览OpenStack组件逻辑架构
OpenStack逻辑架构图
由上图可以看到Nova 处于 OpenStack 架构的中心,其他组件都为 Nova 提供支持(注意官方不是随便画的)在此仅为让大家清楚Nova地位举足轻重,本节重点讲它,不作拓展。
Nova是什么?
Nova 是 OpenStack 最核心的服务模块
负责维护和管理云环境的计算资源。OpenStack 作为 IaaS 的云操作系统,虚拟机生命周期管理也就是通过 Nova 来实现的。
Nova是OpenStack的计算服务
负责维护和管理的网络和存储,提供计算服务。
Nova组件介绍
由上图我们可以看到Nova又包含了一众组件和功能,莫急先看下它们之间是如何通信的:
-
Nova包括多个服务器进程,每个进程执行不同的功能。面向用户的界面是一个RESTAPI,而内部的Nova组件通过RPC消息传递机制进行通信(通过消息队列通信)。
-
Nova-api处理REST请求,通常涉及数据库读/写,可选地将RPC消息发送给其他Nova服务;
-
Nova-compute通过Nova-conductor请求代理给DB。
下面为大家准备出Nova组件详细信息:
华为Stack Database的应用参考:
1、关键组件Nova-Conductor介绍
-
OpenStack G版本引进;
-
对数据库操作会使用到,解耦其他组件(Nova-compute)数据库访问;
-
负责Nova复杂流程控制,如创建、冷迁、热迁、虚拟机规格调整以及虚拟机重建;
-
其他组件的依赖。如Nova-compute需要依赖Nova-conductor启动成功后才能启动成功;
-
其他组件的心跳定时写入,Nova-compute,Nova-conductor,Nova-scheduler,Nova-console,Nova-consoleauth;
-
可水平扩展。
2、关键组件Nova-Scheduler介绍
Nova配置文件/etc/Nova/Nova.conf中调度算法默认的驱动类是FilterScheduler。
Scheduler原理
-
过滤:过滤器(filter)负责筛选满足条件的计算节点;
-
称重:通过权重(weight)计算选择最优的计算节点;
-
一种情况除外:指定计算节点(本文不涉及)。
下面我们还原一下Nova-Scheduler工作过程:
① 过滤:
6台计算节点通过过滤器(filter)进行层层过滤,2和4被刷掉了,1、3、5、6计算权重,5得分最高被选中(暂以考试成绩好为优者)。
② 称重:
权值计算默认为内存权值(支持CPU权重),6台计算节点,通过主机拥有的剩余内存来进行权值计算,内存剩余越多,权值越小,最终4为最优(实际为得分越低越为优)。
3、关键组件Nova-compute介绍
-
虚拟机各生命周期操作的真正执行者(会调用对应的hypervisor的driver);
-
底层对接不同虚拟化的平台(kvm,vmware,xen,FusionCompute,hyperv等);
-
内置周期性任务,完成资源刷新,虚拟机状态同步等功能;
-
资源管理模块(resource_tracker)配合插件机制,完成资源的统计。Claim模块完成资源的分配和释放。
Nova-compute中的周期性任务
Nova-compute资源管理图解
由上图可看出:
-
底层周期性任务调用driver获取原始资源信息。(Hypervisor周期性执行任务,获取原始资源信息)
-
原始资源信息在Nova-compute的经过资源管理对象resource_tracker经过计算后保存在在本地的self.compute对象中,并最后将该内容持久化到数据库中。(Nova-compute将收集的原始资源信息通过计算->内存记录结果->结果上传->数据库落盘)
-
Nova-scheduler每次调度时从数据库中获取该资源信息,并更新到内存的host_state_map对象中,后面的资源扣除会在该内存对象中进行。(发生调度,资源信息变化,更新到内存对象中,并在内存对象中完成资源扣除)
-
在虚拟机的生命周期中会触发资源的分配和释放。
-
每个资源可以通过插件式管理,便于扩展。
-
资源更新的地方需要加锁控制,避免资源竞争导致资源扣除不准确。
Nova组件服务间的布局
服务间随着规模的扩大,最终会因最大规模限制或者安全问题而要求服务再分离以及隔离。
小规模部署-服务间关系示意图(即通信路径)——在同一消息总线上通信。
拓展:Cell组件
-
G版本引进;
-
目的:防止Nova集群大规模部署,导致数据库和消息队列出现瓶颈的情况发生
-
根Cell0的Nova-api提供全局服务,每个cell独有Nova-cells、Database、AMQP、以及Nova-conductor,其余组件服务为全局服务;
-
由华为云开源社区提供级联方案——(级联与被级联层)
大规模部署-服务间关系示意图(即通信路径)
-
将服务分割成多个Cell;
-
消息总线按照Cell DB相同的线路进行拆分;
-
每个Cell有专用的数据库和消息队列;
-
由super conductor负责区分每个Cell中conductor位置及用途;
Nova典型的操作
文章作者:苏栋强
排版设计:王蔚棋
手绘插画:岳 媛
在看不好意思,那就点个赞吧
原创文章,作者:EBCloud,如若转载,请注明出处:https://www.sudun.com/ask/33423.html