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