1 OpenStack组件架构简介
上图 VM是虚拟机,围绕 VM 的那些长方形代表 OpenStack 不同的模块(OpenStack 叫服务,后面都用服务这个术语),下面来分别介绍。
- **Nova:**管理 VM 的生命周期,是 OpenStack 中最核心的服务;
- **Neutron:**为 OpenStack 提供网络连接服务,负责创建和管理L2、L3 网络,为 VM 提供虚拟网络和物理网络连接;
**- Glance:**管理 VM 的启动镜像,Nova 创建 VM 时将使用 Glance 提供的镜像;
**- Cinder:**为 VM 提供块存储服务。Cinder 提供的每一个 Volume 在 VM 看来就是一块虚拟硬盘,一般用作数据盘;
**- Swift:**提供对象存储服务。VM 可以通过 RESTful API 存放对象数据。作为可选的方案,Glance 可以将镜像存放在 Swift 中;Cinder 也可以将 Volume 备份到 Swift 中;
**- Keystone:**为 OpenStack 的各种服务提供认证和权限管理服务。简单的说,OpenStack 上的每一个操作都必须通过Keystone 的审核;
**- Ceilometer:**提供 OpenStac k监控和计量服务,为报警、统计或计费提供数据;
**- Horizon:**为 OpenStack用户提供一个 Web 的自服务 Portal;
2 核心组件内部架构
2.1Nova 组件内部架构
- API-nova API
1、负责接收和响应客户的 API 调用,如:OpenStack API,Amazon EC2 API;
- Compute Core
1、Nova scheduler:虚拟机调度服务;
2、Nova compute :调用 Hypervisor API 实现虚机生命周期管理;
3、Hypervisor:虚机管理最底层,常用的 Hypervisor 有 KVM,Xen,VMWare 等;
4、Nova conductor:访问数据库,更新数据库状态;
-Console interface
1、Nova-console:访问虚拟机控制台;
2、Nova-consoleauth:请求token认证;
3、Nova-cert:提供x509证书支持;
-Database
1、通常使用mysql;
- Message Queue
1、Nova各个子服务之间通信;
2、默认是用 RabbitMQ
Cinder 包含如下几个组件:
- cinder-api接收 API 请求,调用 cinder-volume 执行操作。
- cinder-volume管理 volume的服务,与 volume provider 协调工作,管理 volume 的生命周期。运行 cinder-volume服务的节点被称作为存储节点。
- cinder-schedulerscheduler 通过调度算法选择最合适的存储节点创建volume。
- volume provider数据的存储设备,为 volume 提供物理存储空间。
- cinder-volume支持多种 volume provider,每种 volume provider 通过自己的 driver 与cinder-volume协调工作。
- Message QueueCinder各个子服务通过消息队列实现进程间通信和相互协作。因为有了消息队列,子服务之间实现了解耦,这种松散的结构也是分布式系统的重要特征。
- Database Cinder 有一些数据需要存放到数据库中,一般使用MySQL。数据库是安装在控制节点上的,比如在我们的实验环境中,可以访问名称为“cinder”的数据库。
2.2 组件间如何协同工作
下面以Nova为例(其余组件类似)介绍组件内部如何协同工作的:
- 客户发送请求:“创建一个虚机”;
- API 向 Messaging发送“创建一个虚机”的消息;
- Scheduler从 Messaging获取该消息后执行调度算法,选出节点 A;
- Scheduler 向 Messaging 发送一条消息:“在计算节点 A 上创建这个虚机”
- 节点 A 从 Messaging 中获取 Scheduler 的消息,然后在本节点的 Hypervisor 上启动虚机;
- 在创建过程中,Compute 需要查询或更新数据库信息,会通过 Messaging 向 Conductor发送消息,Conductor负责数据库访问。