一、nova介绍

nova是openstack 最核心的服务,负责维护和管理云环境的计算资源。 管理 VM 的生命周期

二、nova架构

nova 的架构比较复杂,包含很多组件。

这些组件以子服务(后台 deamon 进程)的形式运行,可以分为以下几类:

1、API

nova-api:接收和响应客户的 API 调用。

2、Computer Core

1)nova-scheduler:管理虚机的核心服务,通过调用 Hypervisor API 实现虚机生命周期管理

2)nova-compute:管理虚机的核心服务,通过调用Hypervisor API实现虚机圣母那个周期管理

3)Hypervisor:计算节点上跑的虚拟化管理程序,虚机管理最底层的程序。 不同虚拟化技术提供自己的 Hypervisor。 常用的 Hypervisor 有 KVM,Xen, VMWare 等

4)nova-conductor:nova-compute 经常需要更新数据库,比如更新虚机的状态。出于安全性和伸缩性的考虑,nova-compute 不直接访问数据库,而是将这个任务委托给 nova-conductor。

3、Console Interface

1)nova-console:用户可以通过多种方式访问虚机的控制台

(1)nova-novncproxy:基于Web浏览器的VNC访问

(2)nova-apicehtml5proxy:基于Html5浏览器的SPICE访问

(3)nova-x***vncproxy:基于JAVA客户端的VNC访问

2)nova-consoleauth:负责对访问虚机控制台请求提供Token认证

3)nova-cert:提供x590证书支持

4、DateBase

1)mysql:Nova 会有一些数据需要存放到数据库中,一般使用 MySQL。

5、消息队列

1)Nova 包含众多的子服务,这些子服务之间需要相互协调和通信。为解耦各个子服务,Nova 通过 Message Queue 作为子服务的信息中转站。

三、nova物理部署方案

对于 Nova,这些服务会部署在两类节点上:计算节点和控制节点。

计算节点上安装了 Hypervisor,上面运行虚拟机。nova-compute 也需要放在计算节点上。

控制节点上安装了nova的其他子服务。

mysql单独部署。

四、从虚机创建流程看 nova-* 子服务如何协同工作

1、客户(可以是 OpenStack 最终用户,也可以是其他程序)向 API(nova-api)发送请求:“帮我创建一个虚机”

2、API 对请求做一些必要处理后,向 Messaging(RabbitMQ)发送了一条消息:“让 Scheduler 创建一个虚机”

3、Scheduler(nova-scheduler)从 Messaging 获取到 API 发给它的消息,然后执行调度算法,从若干计算节点中选出节点 A

4、Scheduler 向 Messaging 发送了一条消息:“在计算节点 A 上创建这个虚机”

5、计算节点 A 的 Compute(nova-compute)从 Messaging 中获取到 Scheduler 发给它的消息,然后在本节点的 Hypervisor 上启动虚机。

6、在虚机创建的过程中,Compute 如果需要查询或更新数据库信息,会通过 Messaging 向 Conductor(nova-conductor)发送消息,Conductor 负责数据库访问。

五、子服务详解

1、nova-api

nova-api会对接收到的 HTTP API 请求(跟虚拟机生命周期相关的操作)会做如下处理:

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

2)调用 Nova 其他子服务的处理客户端 HTTP 请求

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

2、nova-conductor

在操作虚机的过程中nova-compute 需要获取和更新数据库中 instance 的信息。 为了不让其直接访问数据库,而是通过nova-conductor访问。

这样做有两个显著好处:

1)更高的系统安全性

2)更好的系统伸缩性

3、nova-scheduler

nova-scheduler的作用是选择在哪个计算节点上启动instance;

1)Filter scheduler 是 nova-scheduler 默认的调度器,调度过程分为两步:

  1. 通过过滤器(filter)选择满足条件的计算节点(运行 nova-compute)

  2. 通过权重计算(weighting)选择在最优(权重值最大)的计算节点上创建 Instance。

2)filter

RetryFilter:刷掉之前已经调度过的节点

AvailabilityZoneFilter:为提高容灾性和提供隔离服务,可以将计算节点划分到不同的Availability Zone中

RamFilter: 将不能满足 flavor 内存需求的计算节点过滤掉

DiskFilter: 将不能满足 flavor 磁盘需求的计算节点过滤掉

CoreFilter: 将不能满足 flavor vCPU 需求的计算节点过滤掉

ComputeFilter: 保证只有 nova-compute 服务正常工作的计算节点才能够被 nova-scheduler调度。

3)Weight

经过前面一堆 filter 的过滤,nova-scheduler 选出了能够部署 instance 的计算节点。 如果有多个计算节点通过了过滤,那么最终选择哪个节点呢?

Scheduler 会对每个计算权重值,目前 nova-scheduler 的默认实现是根据计算节点空闲的内存量计算权重值。空闲内存越多,权重越大,instance 将被部署到当前空闲内存最多的计算节点上。

4、nova-compute

nova-compute 在计算节点上运行,负责管理节点上的 instance。nova-compute 与 Hypervisor 一起实现 OpenStack 对 instance 生命周期的管理。

nova-compute 的功能可以分为两类:

定时向 OpenStack 报告计算节点的状态;

实现 instance 生命周期的管理(launch、shutdown、reboot、suspend、resume、terminate、resize、migration、snapshot等);

nova-compute 创建 instance 的过程可以分为 4 步:

(1)为 instance 准备资源

分配内存、磁盘空间和 vCPU 网络资源

(2)创建 instance 的镜像文件

首先将该 image 下载到计算节点(没有命中缓存的时候)

然后将其作为 backing file(可能需要格式转化) 创建 instance 的镜像文件。

(3)创建 instance 的 XML 定义文件

(4)创建虚拟网络并启动虚拟机

六、虚机管理的场景

如上图所示,我们把对 Instance 的管理按运维工作的场景分为两类:常规操作和故障处理。

1、常规操作中,Launch、Start、Reboot、Shut Off 和 Terminate 都很好理解。 下面几个操作重点回顾一下:

Launch:新建一个instance。

Start:instance启动

Reboot:instance重启(软重启和硬重启)

软重启:只是重启操作系统,整个过程中,instance依然处于运行状态;

硬重启:是重启instance,相当于关机后在重启;

Shut Off:instance关机

Terminate:instance删除

Resize:通过应用不同的 flavor 调整分配给 instance 的资源。

Lock/Unlock:可以防止对 instance 的误操作。

Pause/Suspend/Resume:暂停当前 instance,并在以后恢复。

Pause 和 Suspend 的区别在于 Pause 将 instance 的运行状态保存在计算节点的内存中,而 Suspend 保存在磁盘上。

Pause 的优点是 Resume 的速度比 Suspend 快;缺点是如果计算节点重启,内存数据丢失,就无法 Resume 了,而 Suspend 则没有这个问题。

Snapshot:备份 instance 到 Glance。产生的 image 可用于故障恢复,或者以此为模板部署新的 instance。

2、故障处理有两种场景:计划内和计划外。

1)计划内是指提前安排时间窗口做的维护工作,比如服务器定期的微码升级,添加更换硬件等。

对于计划内的故障处理,可以在维护窗口中将 instance 迁移到其他计算节点。涉及如下操作:

Migrate:将 instance 迁移到其他计算节点。迁移之前,instance 会被 Shut Off,支持共享存储和非共享存储。

Live Migrate:与 Migrate 不同,Live Migrate 能不停机在线地迁移 instance,保证了业务的连续性。也支持共享存储和非共享存储(Block Migration)

Shelve/Unshelve Shelve 将 instance 保存到 Glance 上,之后可通过 Unshelve 重新部署。

Shelve 操作成功后,instance 会从原来的计算节点上删除。

Unshelve 会重新选择节点部署,可能不是原节点。

2)计划外是指发生了没有预料到的突发故障,比如强行关机造成 OS 系统文件损坏,服务器掉电,硬件故障等。

计划外的故障按照影响的范围又分为两类:Instance 故障和计算节点故障

(1)Instance 故障只限于某一个 instance 的操作系统层面,系统无法正常启动。可以使用如下操作修复instance:

Rescue/Unrescue:用指定的启动盘启动,进入 Rescue 模式,修复受损的系统盘。成功修复后,通过 Unrescue 正常启动 instance。

Rebuild:如果 Rescue 无法修复,则只能通过 Rebuild 从已有的备份恢复。Instance 的备份是通过 snapshot 创建的,所以需要有备份策略定期备份。

(2)计算节点故障:无法与节点的nova-compute通信,其上运行的所有instance都会受到影响。这个时候可以使用如下操作修复instance:

Evacuate:利用共享存储上 Instance 的镜像文件在其他计算节点上重建 Instance。所以提前规划共享存储是关键。

转载于:https://blog.51cto.com/10630401/2121675

openstack组件之nova相关推荐

  1. Openstack组件部署 — Nova overview

    目录 目录 前文列表 前言 Compute service overview Nova 的组件 nova-api service nova-api-metadata service nova-comp ...

  2. 介绍OpenStack(T版)组件之一nova

    介绍OpenStack组件之一nova 介绍nova nova架构 nova中各个组件介绍 API Scheduler(调度器) 调度器的类型 过滤器的类型 权重 compute计算组件 conduc ...

  3. Openstack组件部署 — Overview和前期环境准备

    目录 目录 前言 软件环境 Openstack 简介 Openstack 架构 Openstack Install Overview 创建Node虚拟机 环境准备 基础设置 Install OpenS ...

  4. Openstack组件实现原理 — Nova 体系结构

    目录 目录 前文列表 Nova体系结构 虚拟机实例化流程 前文列表 Openstack组件部署 - Overview和前期环境准备 Openstack组建部署 - Environment of Con ...

  5. openstack“T版“nova组件部署

    文章目录 NOVA组件 Nova计算服务 Nova系统架构 Nova组件介绍 API Scheduler OpenStack-nova组件部署 NOVA组件 Nova计算服务 Nova系统架构 Nov ...

  6. Openstack组件实现原理 — Keystone认证功能

    前言 Keystone实现始终围绕着Keystone所实现的功能来展开,所以在理解其实现之前,建议大家尝试通过安装Keystone这一个过程来感受Keystone在Openstack架构中所充当的角色 ...

  7. Openstack组件部署 — Networking service_Compute Node

    目录 目录 前文列表 安装组件 配置通用组件 配置自服务网络选项 配置Linux 桥接代理 配置Nova使用网络 完成安装 验证操作Execute following commands on Cont ...

  8. OpenStack组件——Keystone身份认证

    1.keystone介绍 keystone 是OpenStack的组件之一,用于为OpenStack家族中的其它组件成员提供统一的认证服务,包括身份验证.令牌的发放和校验.服务列表.用户权限的定义等等 ...

  9. OpenStack组件——Keyston身份认证服务

    OpenStack组件--Keyston身份认证服务 一.Keystone身份服务简介 1.1.概述:主要功能 1.2.管理对象 1.3keystone认证过程⭐⭐⭐ 二.Keystone身份认证服务 ...

最新文章

  1. 【T07】不要低估tcp的性能
  2. tf.clip_by_value() 用法
  3. maven创建webapp项目
  4. .bin 文件用excel文件打开_用PYTHON读写excel文件
  5. android版本sdk api对应,Android API Level与sdk版本对照表
  6. 从头开始复习css之2D变换
  7. 第二阶段冲刺 站立会议03
  8. Java---利用程序实现在控制台聊天
  9. efuse 加密文件 linux,乐鑫关于“故障注入”和 “eFuse 保护”的安全建议 (CVE-2019-17391)...
  10. Node单线程的特点
  11. 【计算机三级数据库技术】三级数据库技术应用题集锦
  12. muduo 异步日志实现
  13. win10计算机的数字小键盘,让Win10登录时默认开启数字小键盘
  14. ASP.NET MVC 5 - 入门
  15. [week15] ZJM 与霍格沃兹 —— 字符串哈希
  16. 这一周我学习了什么(一)
  17. iphone11返回上一级手势怎么设置_iPhone11怎么返回手势操作
  18. 路由器与交换机的区别?
  19. 【实验分享】通过Console口登录到Cisco设备
  20. 共模干扰与差模干扰(及其消除)

热门文章

  1. debian/ubuntu下安装java8
  2. 本日吐槽!“人傻钱多”的P2P公司是否是程序员的合适选择(群聊天记录的娱乐)...
  3. Nginx配置和内核优化 实现突破十万并发
  4. 关于 SAP 标准教程编号的说明
  5. Duwamish深入剖析-配置篇
  6. Python技术学习之Django框架设计思想
  7. C#进阶系列——WebApi 接口参数不再困惑:传参详解
  8. 心血来潮学python
  9. 骑行广州大学城 外环十大校门
  10. 从GNOME切换到KDE了