开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第13天,点击查看活动详情 这也是第16篇文章
Nova作用
重点: 计算、存储、网络。
处理OpenStack中instance生命周期的所有活动,是一个负责管理计算资源、网络、认证、可拓展性的平台。
注意点
Nova不具有虚拟化能力。它使用Libvirt API与Hypervisors交互。
也就是说,Nova并不关心虚拟化实现的细节,你只需要为它提供一个可用的接口。同时,它可以把很多云服务集成起来。
组件
Nova-api(API Server)
Rabbit MQ Server(Message Queue)
消息交换,使用AMQP(Advanced Message Queue Protocol)完成通信 协议核心:
- 大规模消息的交换
- 基于内容的路由
Nova-Compute(Computer Worker)
通过MQ接收实例生命周期管理的请求,并进行操作。
Nova-Network(Network Controller)
处理主机的网络配置。如ip地址分配、VLAN、安全组、计算节点网络等
Nova-Volume
管理基于LVM(logical Volume Manager)的实例卷。操作如新建、删除、增加、分离。
Nova-schedular
使用调度算法
Libvirt
概览
- 对于开源的半虚拟化的实现,如KVM LXC QEMU UML Xen,通过Libvirt来接入。
- 对于XenServer Hyper-V VMWare ESX,Nova会通过独立的软件管理模块去实现。
也就是说Libvirt可为各种虚拟化工具提供一套方便 可靠的编程接口。
虚拟云实现步骤
- 虚拟化技术实现
- 虚拟机管理 在 域(domain)中进行,从不同的角度考虑,分安全域和可用域
- 集群资源管理
Libvirt主要支持功能
- 虚拟机管理 包括不同领域的生命周期操作,支持多种设备类型的热插拔操作。
- 远程机器支持和存储管理 只要是运行了Daemon,所有Libvirt功能都可以使用。
可以管理不同类型的存储,创建不同格式的文件镜像。
- 网络接口管理
- 虚拟NAT和基于路由的网络
Libvirt体系结构
- 在Libvirt之上,在虚拟机之下;
- 典型的实现是嵌入到Libvirt中。
RabbitMQ
注意点
- 它是一种处理消息验证、转换、路由的架构模式,目的是实现解耦。
- RabbitMQ并不是Nova必备,它也可以被别的选项替代,只是目前来说它效果最好。 它也可以用于其他服务,不止Nova。
交换的数据类型
- 系统内进行消息传递和信息共享 任务之间、模块之间、接口之间
- 用户程序
AMQP
目标
实现端到端的通信
实现通信的元素(元/对象)是什么/数据传输的单位是什么?
消息
实现通信的实体
- 交换器(Exchange)
- 队列
- 消息
任何一个组件的失效都会导致消息中断,所以这三个组件创建之初就被打上“Durable”的标签,业务中断后也会立即恢复。
关于交换器
- 由消费者创建,并可与其他应用程序共享服务。
- 接收消息之后通过路由表将消息准确且安全地转发至相应消息队列
- 每个交换器通过唯一的Exchange ID 进行识别
按存活时间:类型分三种:
- 持久
- 临时
- 自动删除
按功能,类型分三种:
- 广播式(fanout,数字逻辑中的“扇出”) 不分析接收到的Routing_key
- 直接式(直连,不一定是一对一) 路由算法:一个routing_key完全匹配一个binding_key。
!!注意:绑定的关键字将队列和交换器绑定到一起。所以可能会出现一次绑定,多个转发。
- 主题式
进是一对多,出是一对一