简介
oVirt是一种开源分布式虚拟化解决方案,旨在管理整个企业基础架构。 oVirt使用受信任的KVM管理程序,并基于其他几个社区项目构建,包括libvirt,Gluster,PatternFly和Ansible。
功能
为管理员和非管理员用户提供丰富的基于Web的用户界面
主机,存储和网络配置的集成管理
在主机和存储之间实时迁移虚拟机和磁盘
主机发生故障时虚拟机的高可用性
架构
(1)ovirt-engine用于部署,监视,移动,停止和创建VM映像,配置存储,网络等。我们运行虚拟机(VM)的一个或多个主机(节点)一个或多个存储节点,其保存与这些VM对应的图像和ISO。此外,通常在引擎旁边部署身份服务,以对ovirt-engine的用户和管理员进行身份验证。
(2)节点是安装了VDSM和libvirt的Linux发行版,以及一些额外的软件包,可以轻松实现网络和其他系统服务的虚拟化。迄今为止受支持的Linux发行版是Fedora 17或oVirt-node,它基本上是一个精简版本,包含足够的组件以允许虚拟化。
(3)存储节点可以使用块或文件存储,可以是本地或远程,通过NFS访问。 POSIXFS存储类型支持Gluster等存储技术。存储节点分组为存储池,可确保高可用性和冗余。 Vdsm存储术语页面包含更多详细信息。
oVirt 逻辑结构图
从总体框架上说明了 oVirt 的工作流程。对外,oVirt 中的 Engine 通过 HTTP 协议向外提供 HTTP API,同时提供内建的网页服务供用户和系统管理员使用。系统管理员通过网页可以创建、修改虚拟机及相关设备或用户权限,用户在拥有权限的情况下可以操作自己的虚拟机,并通过 VNC 或 SSH 登陆自己的虚拟机。
Engine 在整个系统中充当管理者的角色并对外提供管理服务,它挂载了自己的数据库记录整个系统中所有的虚拟机配置,各个节点的自身状态,系统的网络状态,存储器状态。管理的逻辑,状态及策略全部在 Engine 中设置与实现。
Node 只负责功能上的实现,不进行任何状态的记录和任何策略的实现。Engine 与 Node 之间的关系十分像 Linux 中驱动程序与应用程序的功能分割关系:驱动仅仅负责功能的实现,如设备的读、写、开启与关闭,如何使用这些功能留给应用层。同样 Node 仅仅负责实现虚拟机器与设备的创建与修改,资源的共享与保护,如何使用这些功能交给 Engine 处理。Node 暴露两种基于网络的 API 与 Engine 交互,XMLRPC 与 REST。Engine 通过这些接口控制各个 Node 上功能的启动。当然用户也可以调用这些 API 进行第三方程序的开发。
oVirt 里的 Node 可以由一个普通的 Linux 上安装 VDSM(Virtual Desktop Server Manager) 构成,也可以由一个专为 oVirt 定制的 Linux 系统构成。在定制的情况下,Node 上的许多文件系统都是 ramdisk( 基于内存的 Linux 磁盘设备 ),系统重启后其中的内容消失,从而保证了 Node 的无状态性。Engine/Node 的设计不仅方便将来的开发,更简化了用户的安装使用,在定制的情况下 Node 可以快速大量部署。
VDSM 对存储器的管理
每一个 Node 上都会运行一个 VDSM,实现网络、存储器、虚拟机的创建与修改的功能。VDSM 的大部分代码用在了存储系统上,其功能包括数据的组织,集群下的数据共享与保护,故障恢复。通常情况下每一个物理机器当作一个 Node,运行一个 VDSM,Node 本身只携带少量存储器用以保存配置。一个集群中通常有一个 Engine 和数个 Node,这些 Node 通过网络连接到 SAN(Storage Area Network) 上,VDSM 把 Node 上运行的虚拟机存储数据保存在 SAN 上,Node 本身为无状态的节点,重新启动后状态消失,从而保证了系统整体的可用性,一般情况下不会因用户的操作而使 Node 失效。一旦问题发生,通常一次重启既可恢复工作状态。
最后总结一下VDSM得功能:libvirtd是管理虚拟化得工具,vdsm理解为是一个代理软件,rhvm的ovirt-engine与vdsm通信,vdsm把请求发给node节点上的vdsm。oVirt-engine与node节点都与要安装vdsm,oVirt-engine是管理端,node是被管理端。
参考文章:
https://www.ibm.com/developerworks/cn/cloud/library/1209_xiawc_ovirt/