oVirt 架构
标准的oVirt部署包含三件事情,主要是:
- 用于部署,监视,移动,停止和创建虚拟机镜像,配置存储,网络等的ovirt-engine。
- 一个或多个主机(节点),我们在其上运行虚拟机(VM)
- 一个或多个存储节点,它们保存与这些VM相对应的映像和ISO
此外,通常将身份服务部署在引擎上,以便为用户和管理员验证ovirt引擎。
这些节点是安装了VDSM和libvirt的Linux发行版,以及一些额外的软件包,可以轻松实现网络和其他系统服务的虚拟化。迄今为止支持的Linux发行版是Fedora 17或oVirt-node,它基本上是一个简化的发行版,其中只包含足够的组件以允许虚拟化。
存储节点可以使用块或文件存储,并且可以是本地或远程的,可以通过NFS访问。像Gluster这样的存储技术通过POSIXFS存储类型得到支持。存储节点被分组到存储池中,这可以确保高可用性和冗余。在超深亚微米存储术语进行了详细介绍。
下面的不同图表和描述代表了oVirt项目的架构及其不同的组件。
整体架构
下图显示了oVirt项目中的不同组件:
这些主要组件是:
- 引擎(ovirt-engine) - 管理oVirt主机,并允许系统管理员创建和部署新的虚拟机
- 管理员门户 - 系统管理员用于执行高级操作的引擎顶部的基于Web的UI应用程序。
- 用户门户 - 一个简化的基于Web的UI应用程序,用于简化管理用例。
- REST API - 允许应用程序执行虚拟化操作的API,由命令行工具和python SDK使用
- CLI / SDK - 命令行界面和SDK提供了一种通过脚本操作与引擎进行通信的方式。
- 数据库 - 引擎使用Postgres数据库为ovirt部署的配置提供持久性。
- 主机代理(VDSM) - oVirt引擎与VSDM进行通信以请求节点上的VM相关操作
- 访客代理 - 访客代理在虚拟机内运行,并向oVirt引擎提供关于资源使用情况的信息。通信是通过虚拟串行连接完成的。
- AD / IPA - 目录服务。引擎使用它们接收用户和组的信息,以便与ovirt的权限机制一起使用。
- DWH(数据仓库) - 数据仓库组件使用Talend对从数据库提取的数据执行ETL,并将其插入历史数据库。
- 报告引擎 - 使用Jasper Reports根据历史数据库中的数据生成关于系统资源使用情况的报告
- SPICE客户端 - 允许用户访问虚拟机的实用程序。
下面的部分将给出每个这样的组件的描述和体系结构方面的内容。
发动机
oVirt引擎是一个基于JBoss的Java应用程序(以前是C#),它作为一个Web服务运行。该服务直接与主机上的VDSM进行通信,以部署,启动,停止,迁移和监视VM,还可以从模板创建新的存储映像。
它是基于领先的性能,可扩展性和安全基础架构技术的服务器和桌面虚拟化的大规模集中式管理。
引擎提供的一些功能:
- VM生命周期管理
- 通过功能/ AAA进行验证
- 网络管理 - 添加逻辑网络,并将它们连接到主机
- 存储管理 - 管理存储域(NFS / iSCSI / Local)和虚拟VM磁盘
- 高可用性 - 在其他主机上自动从故障主机重新启动来宾虚拟机
- 实时迁移 - 在主机之间移动运行的虚拟机,停机时间为零
- 系统调度程序 - 根据资源使用/策略持续负载平衡虚拟机
- 节电器 - 在非高峰时间将虚拟机集中在更少的服务器上
- 维护管理器 - 在计划维护时段期间不需要为虚拟机停机。
- 映像管理 - 基于模板的配置,自动精简配置和快照
- 监控 - 针对系统中的所有对象 - 虚拟机客户,主机,网络,存储等
- 导出/导入 - 使用OVF文件导入和导出虚拟机和模板
- V2V - 将虚拟机从VMware和RHEL / Xen环境转换到oVirt环境
下图显示了oVirt引擎组件中的不同图层:
引擎核心架构
下图显示了引擎核心中的不同组件:
发动机核心的主要部件是:
- DB Broker - 负责所有与数据库相关的操作
- VDS Broker - 负责所有需要与VDSM通信的操作
- LDAP代理 - 已过时并未使用
- 后端Bean - 一个Singleton bean,负责运行,查询和监视不同的实体
主机代理(VDSM)
VDSM是Python开发的一个组件,它涵盖了oVirt Engine用于主机,虚拟机,网络和存储管理所需的所有功能。
- VDSM API基于XML-RPC(计划迁移到REST API)。这就是ovirt-engine如何与VDSM通信。
- 配置主机,网络和共享存储
- 使用libvirt进行VM生命周期操作
- 多线程,多进程
- 通过virtio-serial与客座代理通话
- 为可扩展至数百个节点的LVM添加定制集群支持
- 在受支持的存储类型(本地目录,FCP,FCoE,iSCSI,NFS,SAS)上实现分布式映像存储库
- 多主机系统,一个并发元数据编写器
- 在数据写入器中线性缩放
挂钩机制
- 允许管理员定义脚本来修改虚拟机操作,例如。添加额外的选项,如CPU固定,看门狗设备,直接LUN访问等。
- 在完成整合之前,允许oVirt扩展为新的KVM功能
- 测试新的kvm / libvirt / linux功能的简单方法
- 挂钩机制在VDSM使用libvirt启动虚拟机启动之前调用。
- 挂钩更改VM定义,VDSM将此定义传递给libvirt以启动VM。
下图说明了VM生命周期中的Hook机制:
MOM整合
VDSM与MoM集成。MOM的行为是使用策略配置的。通过这些策略,用户可以优化主机的内存过载或安全操作。为了控制它的妈妈实例,vdsm提供了一个妈妈配置文件和一个妈妈策略文件来设置妈妈的默认行为。启动时,vdsmd会导入妈妈并使用配置和策略文件对其进行初始化。从那时起,妈妈通过API.py中定义良好的API与vdsm进行交互,并控制主机上运行的每个虚拟机的内存气球。MOM实例在vdsm守护程序中作为线程运行。
基于Web的用户界面
下图提供了oVirt用户界面体系结构的高级概述:
- Google Web Toolkit:基于Java的SDK,提供用于构建Web应用程序的工具和API
- GWT平台:遵循GWT 最佳实践(幻灯片)的Model-View-Presenter框架
- GWT注入:GWT的依赖注入框架
- oVirt GWT-Common:模块包含小部件,抽象和基础级别等常用组件。
- oVirt UI插件:允许在运行时通过基于JavaScript的插件扩展WebAdmin UI的功能
下图显示了一个典型的GWT开发工作流程:
oVirt UI围绕以下概念而设计:
- Web浏览器作为应用程序平台,能够通过基于JavaScript的应用程序提供丰富的用户体验
- 依赖注入和事件总线来采用松散耦合的组件架构
- 模型 - 视图 - 演示者用于演示文稿(视图)和相关业务逻辑之间的清晰分离(演示者)
REST API
用于与oVirt Engine集成的RESTful API:
- 为所有API函数公开REST接口
- REST代表REpresentational State Transfer
- 围绕HTTP动词建模实体动作
- 得到
- 放
- POST
- 删除
- 仍然对某些状态更改使用“操作”
- 自我描述 - 实体导航和操作
REST概念:
- 客户端服务器
- 无状态
- 可缓存
- 统一的界面
CLI / SDK
CLI和SDK正在使用上面提到的REST API。
SDK:
- 基于Python的SDK允许对不同的实体执行操作
- 完整的协议抽象
- 完全符合oVirt API架构
- 自动完成
- 自我描述
- 直观且易于使用
- 自动生成
CLI:
- 基于Python的CLI允许查询和执行不同实体上的操作
- 完整的协议抽象
- 完全符合oVirt API架构
- 针对每项操作的高度描述性帮助
- 直观且易于使用
- 自动生成
报表引擎
- 基于Jasper报告
- Jasper允许导入/导出报告定义
- 丰富的报表引擎
- 报表调度
- 过滤器
- 导出为各种格式
- 报告创建工作室
DWH
DWH(数据仓库)组件包含:
- 基于talendforge.org的ETL
- 从运营数据库定期轮询
- 数据类型
- 配置版本跟踪
- 统计 - 每小时/每日汇总
- API是基于视图的
客人代理
访客代理为oVirt引擎提供附加信息,例如访客内存使用情况,访客IP地址,安装的应用程序和sso。
建筑细节:
- Python代码,可用于Linux和Windows客户端
- 通信是通过virtio-serial完成的
- Windows的SSO基于XP的gina模块和Windows 7的凭证提供程序
- RHEL 6的SSO基于支持KDE和Gnome的PAM模块