生活的美妙在于,不知道一下秒是惊艳还是伤神,时光流转,珍惜现在的拥有的时光
全部博文(276)
分类: 虚拟化
2016-03-11 10:29:33
|
|
. oVirt 简介
oVirt,又称Open Virtualization,是基于KVM上的开源IAAS的项目,项目起源于Qumranet(开发KVM的公司)。在2008年被红帽收购后,原有的虚拟化管理软件从c#改成java,在2011年开源为oVirt项目。
作为一款开源管理软件,oVirt的支持厂家有:红帽,IBM,Intel,思科,Canonical,NetApp和SUSE。oVirt研讨会(oVirt Workshop)已经举办两届,最近一届是在2013年5月8日在上海Intel研发中心举办。
二. oVirt vs Open Stack
oVirt的目的是提供一套符合市场规范的KVM虚拟化管理软件,尽可能的开发和利用KVM的特点。相对而言,同样作为红帽的IAAS项目,Open Stack要比oVirt有名很多,二者的功能也有重复的部分,因此有很多人具有疑问:红帽是否会因为二者功能重复而保留Open stack,废弃oVirt。答案是否定的,理由如下:
1. 二者目的不同:oVirt是面向KVM的,虽然由于其支持libvirt,理论上还支持xen和virtualbox,但是目前社区内默认其主要针对KVM,可以充分的利用KVM的特性;Open Stack是面向多种系统虚拟机,通过抽象虚拟资源和虚拟机来实现一整套数据中心方案。在对KVM的支持上,Open stack不如oVirt。
2. 二者具有互补性:Open Stack成立与2012年,很多功能参考了oVirt相关组件,因为二者的目的不同,二者具有很多互补性,例如:oVirt的虚拟存储可以为Open Stack提供较好的存储资源;oVirt可以为Open Stack的NOVA提供给比KVM本机更多的信息;oVirt的镜像系统可以为Open stack提供很好的镜像管理系统。
如上的理由来源于IBM Linux开源中心Jean Staten Healy的报告,个人认为oVirt跟OpenStack竞争的未来前途有两条:一是Open stack对KVM支持发展的足够好,以至于oVirt无法媲美,那么红帽对oVirt支持肯定会下降;二是Open Stack如果具体去兼容所有的Hypervisor必然会导致项目庞大,不便于管理,将KVM的支持完全交给oVirt也是很好的方式。
三.oVirt架构
oVirt由两部分组成:Engine和Node。如图1所示,oVirt 中的 Engine 通过 HTTP 协议向外提供 HTTP API,同时提供内建的网页服务供用户和系统管理员使用。系统管理员通过网页可以创建、修改虚拟机及相关设备或用户权限,用户在拥有权限的情况下可以操作自己的虚拟机,并通过 VNC 或 SSH 登陆自己的虚拟机。Engine 在整个系统中充当管理者的角色并对外提供管理服务,它挂载了自己的数据库记录整个系统中所有的虚拟机配置,各个节点的自身状态,系统的网络状态,存储器状态。管理的逻辑,状态及策略全部在 Engine 中设置与实现。Node 只负责功能上的实现,不进行任何状态的记录和任何策略的实现。Engine 与 Node 之间的关系十分像 Linux 中驱动程序与应用程序的功能分割关系:驱动仅仅负责功能的实现,如设备的读、写、开启与关闭,如何使用这些功能留给应用层。同样 Node 仅仅负责实现虚拟机器与设备的创建与修改,资源的共享与保护,如何使用这些功能交给 Engine处理。Node 暴露两种基于网络的 API 与 Engine 交互,XMLRPC 与 REST。Engine 通过这些接口控制各个 Node 上功能的启动。当然用户也可以调用这些 API 进行第三方程序的开发。
图1. oVirt系统结构图
oVirt 里的 Node 可以由一个普通的 Linux 上安装 VDSM(Virtual Desktop Server Manager) 构成,也可以由一个专为 oVirt 定制的 Linux 系统构成。在定制的情况下,Node 上的许多文件系统都是 ramdisk( 基于内存的 Linux 磁盘设备 ),系统重启后其中的内容消失,从而保证了 Node 的无状态性。Engine/Node 的设计不仅方便将来的开发,更简化了用户的安装使用,在定制的情况下 Node 可以快速大量部署。(注:如上主要内容来自
http://www.ibm.com/developerworks/cn/cloud/library/1209_xiawc_ovirt/)
四. 部署和安装
1)oVirt Engine编译安装
官方文档见,实践中发现ovirt-engine 文件夹下README.developer中要详细很多。建议参考README.developer中编译安装,官方文档有些有点过时,但是在依赖库的配置上还是很有用。
对于安装依赖的库,需要解释的几点是:
1. JAVA:安装openjdk 1.7版本,原有版本如果不对需要使用alternative重新设置环境。
2. JBOSS: 这是一款网络服务器,如果无法从源上安装,下载解压后,编译安装时都需要制定JBOSS的路径(具体请见JBOSS_HOME的环境变量),oVirt的网络服务都是由这款软件提供的。
3. Apache-maven:类似makefile,项目没有使用java标准的ant管理,而是使用maven,因此需要提供这个工具。
4. PostgreSQL:数据库,不解释。
5. Python-XXX,安装运行过程可能会出现各种缺少python库的情况,缺少的源上找,找不到的网上下载安装,类似的例子有:Import daemon(或其他) error之类的,去找python-daemon或python-***之类的包就是了。
6. 安装和运行时模式:不要在root模式下安装运行,如果遇到问题看看jboss有没有改成777模式。
7. 如果出现数据库问题:
a) 请在当前用户下建立数据库: createdb –U <用户名> -w <数据库名称>
b) 遇到缺少plpgsql语言可以使用:createlang plpgsql <数据库名称>
8. 配置和运行:假设安装目录是$OVIRT_HOME
a) $OVIRT_HOME/bin/engine-setup配置
b) $OVIRT_HOME/share/services/ovirt-engine/ovirt-engine.py执行
c) 通过访问,管理端接口。
2)oVirt Node部署
目前oVirt Node有两种部署方式:
1. 普通linux安装kvm+libvirtd+vdsm:
a) 直接从源上安装kvm libvirtd
b) 编译安装vdsm很简单:clone到源码./autobuild.sh即可
c) 过程中若出现缺少python库请在python.org上查询,下载, 安装即可。
2. 定制linux安装:一个小的主机镜像,提供libvirtd/vdsm服务,相比于普通Linux发行版专注于提供虚拟化功能。这样系统镜像可以做的很小,而且在很大程度上减少了系统的额外开销。 Ovirt-node编译没有尝试过,具体见
(http://www.ibm.com/developerworks/cn/linux/l-cn-ovirt/)
五.Ovirt方案特点
目前oVirt方案的特点:
a) 对宿主机节点的管理,支持基于数据中心,集群的管理,比较有特色的一个功能是可以管理ilo idarc等硬件管理卡;
b) 对虚拟机的管理,可以完成虚拟机的创建、快照、删除、基于模版的克隆等常见操作
c) 迁移,在线及离线迁移虚拟机;
d) 高可用,当一台宿主机宕机,在另外一台宿主机上自动开启虚机;
e) 宿主机、虚拟机性能查看及统计;
f) 支持nfs,iscsi,fc等存储方式;
g) 支持多端口的网口绑定;
h) 提供一个命令行,可以完成图形界面的大部分功能;
i) 活动目录集成;
j) 提供python api接口,可以api编程;
k) 没有授权限制;
和vmware相比,目前没有的功能:
l) 稳定目前较差,经常出现崩溃,连接出现问题;
m) 易用性较差,设计不人性化;
n) 没有cpu 内存很精细的调节限制功能;
o) 没有FT(Fault Tolerance)功能;
p) 宿主机、虚拟机性能查看及统计功能很简单,远没有vmware丰富;
q) 不支持分布式交换机;
目前使用经验还少,主要是网上的一些评价,个人的建议还得一段时间熟悉~
六. oVirt代码架构
1. engine运行架构:
Ovirt-engine运行架构如图所示:
总体而言,ovirt-engine运行核心是jboss,jboss是一种网络服务端软件,ovirt-engine相当于在JBOSS上包装了一层应用,在ovirt-engine设置时生成可以供JBOSS调用的deployment-----engine.ear,engine.ear就是jboss网页控制界面。Ovirt-engine启动时先配置好JBOSS需要引入的deployment,然后再调用启动JBOSS。
如下介绍一些在运行过程中非常重要的文件或文件夹(针对3.3版本,3.4有变化):
1) engine.ear包地址:/var/lib/ovirt-engine/deployments/engine.ear,这是jboss调用deployment的地址,ls –l可以看到其链接到/usr/share/ovirt-engine/engine.ear文件夹中。由此可以看到两个比较重要的文件夹如下:
2) /var/lib/ovirt-engine文件夹:ovirt-engine生成的供jboss调用的文件夹
3) /usr/share/ovirt-engine/文件夹:ovirt-engine安装的主要文件夹。
4) 启动文件:/usr/share/ovirt-engine/services/ovirt-engine/ovirt-engine.py,安装好之后通过/etc/init.d/ovirt-engine或services命令较好,因为ovirt-engine需要用ovirt用户启动,ovirt用户不能登录。
5) 主界面文件:
/usr/share/ovirt-engine/engine.ear/root.war/WEB-INF/ovirt-engine.jsp
6) 网络地址解析配置文件夹 /etc/httpd/conf.d/: 这个文件夹是针对网络地址解析的配置文件,ovirt-engine默认在里面加入z-ovirt-engine-proxy.conf解析相应地址。
7) ovirt-engine配置jboss调用APPs的变量:ENGINE-APPS变量,可以在/etc/ovirt-engine/engine.conf.d/中增加conf文件配置ENGINE-APPS等其他变量。
8) log文件夹/var/log/ovirt-engine: 其中engine.log是ovirt-engine运行本身的log,server.log是ovirt-engine调用jboss时,jboss生成的log。
Ovirt-reports是ovirt的报表功能的包,可以通过git://gerrit.ovirt.org/ovirt-reports获得,由上图可以看到ovirt-reports是ovirt-engine的一个拓展包,其功能主要有两个:
1) 编译生成ovirt-engine-reports.war:
这个编译过程很复杂,所以过程可以通过阅读包中自带的ovirt-engine-reports-setup脚本得到,自动安装经常出问题,下面具体说下如何手动编译。
a. 下载jasperserver软件包:jasperreports-server-cp-5.5.0-bin.zip解压到随便一个目录中(不妨称之为$jasperver)。ovirt-reports是基于jasperserver的,相当于在jasperserver中增加了一个ovirt为名的报表模板。
b. 获得jboss的指定路径。
c. 进入$jasperser/buildomatic: 将sample_conf/postgresql_master.properties拷贝到当前目录,重命名为default_master.properties,并修改appServerType为jboss-as-7,appServerDir为jboss路径, dbUsername和dbPasswd为postgres数据库的用户名和密码。
d. 修改完了之后执行./js-install-ce.sh即可在jboss路径的standalone/deployments/下生成jasperserver.war文件夹和postgressql-9.2-1002.jdbc4.jar, 以及在jboss文件夹下modules下生成jaspersoft文件夹
e. 导入ovirt-reports:编译完ovirt-reports(配置完mvn后,在reports目录下make就行)执行./js-import.sh –input-dir $reports/reports/respository_files –update, 并拷贝$reports/reports/jars/* 到jasperserver.war下WEB-INF下就完成了reports到jasperserver的导入。
f. 将jasperserver.war拷贝成/usr/share/ovirt-engine/ovirt-engine-reports.war,并将jaspersoft拷贝到/usr/share/ovirt-engine/modules, 将postgressql-9.2-1002.jdbc4.jar拷贝到/var/lib/ovirt-engine/deployments就完成了部署
2) 修改ovirt-engine某些环境变量,让ovirt-engine-reports可以访问到。具体包括两个
a. 在/etc/httpd/conf.d/中增加z-ovirt-engine-reports-proxy.conf文件以解析具体路径使得localhost/ovirt-engine-reports能准确定位到ovirt-engine-reports.war
b. 在/etc/ovirt-engine/engine.conf.d中增加50-ovirt-engine-reports.conf, 在ENGINE_APPS变量中增加ovirt-engine-reports让jboss启动时加载reports的部署。
3) 常见问题:
a) 在普通用户下使用js-install或js-import出问题:原因是之前曾经装个jasperserver导致/tmp/下dataSnapshot,main,jasperserver等文件夹属于root用户,普通用户无法在其中增加文件,也就导致了安装中createBeanName报jave.io.Exception:Permission Denied问题。
b) Js-install数据库连接问题:确定postgres数据库下有没有dbName提到的用户名和密码,如果没有可以su postgres,使用createuser –P –s –d –l命令新增用户名和密码
c) Js-install会在当前系统中增加三个数据库供js,sugarcrm,foodmart使用,因此从其他系统拷贝过来的ovirt-engine-reports.war在当前系统肯定会遇到数据库问题,最好在当前系统install生成ovirt-engine-reports.war