KVM的B/S架构虚拟化管理系统

云计算的提出为信息技术学术界和产业界的发展提供了一个全新的思路。虚拟化作为云计算Iaas层的关键技术,近年来也得到了迅速发展。20世纪60年代,IBM就开始研究虚拟化技术,使得大型机的资源能得被多用户使用。经过几十年的发展,虚拟化技术已经日渐成熟,诞生了如VMware,virtual PC,Xen和KVM(kernel based virtualmachine)等一批成熟的虚拟化产品。与其他虚拟化产品相比,KvM的最大优势是完全开源。KVM是基于内核的完全虚拟化,在与其他虚拟化产品效率对比中表现出色,但是其管理系统仍然只有C/S架构的,C/S架构本身的缺点造成了系统资源的浪费。而且用户进行管理工作之前,需要预先安装管理软件;而且不同的管理软件对操作系统和硬件资源还有不同的要求。相比起来,B/S模式的管理系统就灵活很多,只要有浏览器的终端都可以用来进行管理工作,提高了管理效率,节省了客户端资源占用。

  本文实现了一个基于KVM虚拟化产品的B/S架构的虚拟化管理系统。通过调用KVM的libvirt开发接口,利用J2EE技术,系统管理员可在任何地方通过浏览器登陆系统,进行虚拟机和虚拟存储的管理工作。最后通过实际测试表明B/S架构的优越性。

  1.系统组成部分

  基于KVM的虚拟化管理系统,主要包括客户端、web服务器、虚拟化服务器集群和共享存储服务器4个模块。其中客户端是具有浏览器的上网设备,操作系统可以是Linux、windows甚至嵌入式操作系统;web服务器上安装web容器tomcat,操作系统采用“nux或windows,将完成管理工作的J2EE工程放在web容器里;虚拟化服务器集群上统一安装Linux操作系统,KVlⅥ虚拟化软件和lib—virt接口,并与web服务器建立ssh无密码连接;共享存储服务器是一个磁盘阵列,安装freenas后通过IP网络向虚拟化集群提供数据存储服务。

  用户通过jsp页面登陆后进行相关操作,操作参数传递给web服务器,web服务器与管理目标服务器建立ssh连接,通过调用libvirt接口进行虚拟化集群的管理工作,并将操作结果通过jsp页面呈现给用户。用户还可以通过调用spice插件,用图形界面的方式查看虚拟机的工作情况。整个系统结构如图1所示。

点击查看原图

图1 系统架构

  1.1 KVM(Kernel based virtual machine)

  KVM即基于内核的虚拟化,依赖于“Linux内核,其性能优越,接近单机操作系统。由于其优越的性能和开源性,得到业界的一致认可并在近年来取得很大的发展。KVM使用软件模拟的方式实现完全虚拟化,通过将客户操作系统的I/0指令提交给宿主操作系统(即Linux操作系统)上的QEMU,QEMU将操作指令转换为对宿主机的I/0操作这种方式来实现虚拟化,然后宿主操作系统调用驱动程序访问硬件。通过这种方式对硬件进行了模拟,实现起来比较简洁,而且效率较高|。

  1.2 SPICE(simple procotol for independent computing environment)

  spice是一个开源的远程桌面协议,可以用于在服务器、远程计算机和瘦客户端等设备上部署虚拟桌面,与微软的Remote Desktop Protocol相似,支持windows和Linux操作系统。

  spice包括两部分:spice server和spice client。通过在虚拟机里安装spice Server进行相应的配置后,就可以在客户端通过spice client插件远程链接该虚拟机,以图形界面形式进行操作。

  1.3 Libvirt接口

  Libvirt是一套开源的、用C语言开发的支持虚拟化函数库编程接口,用一种单一方式管理不同的虚拟化提供方式和管理工具,适用于主流虚拟化工具包括Xen、KVM和vmware等,支持与Java、python、C/C++等开发语言的绑定。Linux下常用的虚拟化管理工具Virt-manager和virt—install都是基于libvirt开发。

  1.4 Freenas

  Freenas是一款免费的NAS(网络附加存储)服务器软件,它能将普通PC或服务器的硬盘资源变成网络存储服务器。该软件基于FreeBSD,Samba及PHP,支持FTP/NFS/RSYNC/CIFS/AFP/UNISON/SSH协议及web界面的设定工具。Freems还可以被安装在移动存储设备中,使用方便灵活,在组建网络存储服务器方面应用广泛。

  2.J2EE工程架构

  系统实现的核心是完成管理工作并和用户交互的J2EE工程。J2EE工程架构如图2所示。

点击查看原图

图2 J2EE工程架构

  客户层实现用户和系统的交互,用户通过Web浏览器登录系统,并通过页面提交操作参数。浏览器负责用户请求接收和服务器返回信息的显示。

  struts控制器负责接收和处理用户请求,并将相应请求转发到业务逻辑层,然后从业务逻辑层接收结果并返回给客户层进行显示。

  业务逻辑层是J2EE工程的核心,负责接收stmts传递的用户请求,调用底层libvirt API完成相应的操作,并将处理结果经Web层展现给用户。

  将管理虚拟化的J2EE工程放在中心服务器(即web服务器)的tomcat容器里,这台web服务器应该与虚拟化集群在同一局域网中以保证连接速度。用户通过前台jsp页面登陆管理系统,web服务器接收到用户的请求参数后,与管理目标服务器通过ssh建立连接,用户即可进行相关的管理操作。在web服务器接收到用户管理操作参数后,将参数转换为libvirt接口认可的xml格式文件的参数,然后发送给管理目标服务器,目标服务器接收到参数后调用Libvirt接口,执行相关操作。具体实现过程如下:

  用户提交请求参数:用户登录成功后,可以进行如下四方面管理:用户管理、存储磁盘、虚拟机管理和集群管理。通过用户管理可以修改用户登录密码,定期修改密码可以增强安全性;通过存储管理可以添加或删除资源池,查看、删除或者新建虚拟磁盘;通过虚拟机管理,可以查

看和修改虚拟机信息,并通过spice查看虚拟机图形界面;集群管理可以查看集群中的物理机信息,并可以将虚拟机迁移到另一台物理机上。用户操作通过表单形式提交给Web服务器。

  Web服务器转换请求参数并发送给目标服务器:web服务器通过servIet接收到用户请求参数,转换为字符串,然后将参数组合为ml格式的libvirt配置文件,然后与目标服务器建立ssh连接,通过配置文件将需要进行的操作传递给目标服务器。

  目标服务器进行相关管理操作并向web服务器返回结果:目标服务器收到配置文件参数后,调用libvirt接口将操作参数传人,进行相应的操作。然后将操作结果返回给Web服务器。

  Web服务器将操作结果返回给用户:web服务器接收到返回结果后,进行相应的封装后传递给前台页面,显示给用户。如果用户的请求是图形界面查看虚拟机,则Web服务器将虚拟机的参数传递给客户端后,客户端与目标服务器直接建立连接。

  3.系统设计功能

  用户登录后可以进行如下四方面管理工作:用户管理、存储管理、虚拟机管理和集群管理。系统功能框图如图3所示。

   点击查看原图

图3 系统功能结构   

  3.1用户管理

  用户名和密码通过加密后写在配置文件里,用户提交登录请求后web服务器读取配置文件并进行登录验证,验证通过即可进行权限内的相关管理操作。用户可以定期修改密码,以增强安全性。超级用户可以对用户进行管理,包括添加、删除用户,为用户分配权限等,但是超级用户本身不能对虚拟化集群直接进行管理。通过这种权限分离的方式提高系统的安全性。

  3.2虚拟存储管理

  创建虚拟磁盘之前需要先创建资源池,然后在资源池中创建虚拟磁盘。虚拟磁盘就是提供给虚拟机用的存储空间,是位于共享存储之上的虚拟逻辑磁盘空间。用户登录之后,存储管理界面提供的管理操作包括:新建和删除资源池,新建和删除虚拟磁盘。新建和删除虚拟磁盘的时候,将虚拟磁盘名作为参数传递给web服务器,创建虚拟磁盘时提交表单包括磁盘名称和磁盘大小。表单提交给servlet进行处理。

  3.3虚拟机管理

  创建虚拟机之后,KVM会给每个虚拟机分配一个UUD(universally unique identifier),用于唯一标识该虚拟机。KVM每次启动的时候,都会为每个虚拟机分配一个ID。通过UUID或者ID都可以唯一找到该虚拟机。虚拟机管理进行的操作包括:新建和删除虚拟机,查看和修改虚拟机配置信息,启动、挂起和关闭虚拟机,导出虚拟机模板,从模板创建虚拟机,显示虚拟机界面(spice)。本系统将虚拟机的ID作为参数进行传递。首先用户将操作指令和虚拟机ID传递给web服务器,web服务器封装后传递给目标服务器,然后接受目标服务器执行后的返回结果,再传递给用户显示。

  在调用spice通过图形界面方式查看虚拟机中,首先检测spice插件是否正确安装,如果没有正确安装,提示用户下载并安装。如果正确安装,在拦截到查看指令后,从网页启动spice插件。并将虚拟机参数传递给spice,输入密码即可查看虚拟机的界面。

  3.4 集嚣管理

  集群管理包括物理主机管理和集群调度。物理机管理包括向虚拟化集群添加和删除物理机,通过SNMP(simplenetwork management protocol)协议收集物理机信息,维护活动物理机列表;集群调度采用虚拟机迁移来实现,采用中心任务调度算法,根据管理节点服务器(即Web服务器)通过SNⅧ协议收集到的主机状态信息,在物理机负载过高时,将其上的部分虚拟机迁移到其他物理机上,也可以将负载量很小的物理机上的虚拟机迁移到其他主机上,然后关闭该物理机以节省电能。 


    4.关键技术

    4.1 封装ssh连接类

    系统中用到建立ssh连接的地方比较多,因此通过对连接类进行封装可以有效减少代码量,提高可读性。

    封装ssh连接类需要用到两个类:org. libvirt包下的Connect和LibvirtException类。实现封装的类如下:

  public class SSHConnect{

    private static final String SSHURLl=“

qemu+ssh://”;

   private static final String SSHURL2=“/system”;

   public static Connect getSSHConnect(String userIp,

boolean flag){

   Connect conn=null;

   try{

   conn = new Connect (SSHURL1+userIp+

SSHURL2,fIag);

   }catch(LibvirtException e){

   e.printstackTrace();

   System.out.println(e.getError());

   return:

   }

   return conn:

   }

   public static void close(Connect conn){

   if(conn!=null){

   try{

   conn.close();

   }catch(LibvirtException e){

   e.printStackTrace();

   Systern.out.println(e_getError());

   }

   }

   }

  }

  4.2 Ajax(Asynchronous JavaScript and XML)技术



    考虑到不同的用户同时对一台服务器进行管理的可能性,本系统在向服务器读取数据的时候都是实时读取的,这就要用到Ajax技术。

  Ajax即异步JavaScript和XML,是一种创建交互式网页应用的网页开发技术。其工作原理是,在用户和服务器之间增加了了一个中间层——Ajax引擎.使用户操作与服务器响应异步化,部分操作由Ajax直接完成,无需向服务器提交数据。在用户需要从服务器读取新数据时由Ajax引擎代为向服务器提交请求,然后将读取结果发送给用户。在使用Ajax擎后,用户从感觉上几乎所有的操作都会很快响应没有页面重载的等待,也没有页面跳转。其工作原理如图5所示。

 

  点击查看原图

图4 Ajax工作原理  

  4.3用spice查看虚拟机

  在创建虚拟机的时候,将图形设备选择为spice,添加spice server并设置端口号,将显卡设备选择为视频卡QXL设备。Web服务器在接收到查看图形界面请求后,首先进行客户操作系统的判断,并检测用户是否正确安装spice,如果没有安装则根据用户操作系统提示用户下载安装spice包。

  如果spice正确安装,则通过网页启动spice,并将相应参数传人,即可打开虚拟机的图形界面。

  4.4 提供类应用软件试图

  为了使管理的步骤更加清晰和兼顾用户使用习惯,本系统设计类似应用软件的用户交互界面。首先将操作拆分成各个步骤,并为每一步骤设计一个jsp页面,然后使用Css+div建立一个可拖动的层,然后采用ifr锄e技术将操作步骤对应的jsp页面加载到层中显示,用Javascript控制层中内容的切换和数据的缓存,需要与服务器及时交互的数据则采用Ajax技术实时获取。在一个操作完成后将表单数据整合并提交。

  5.系统性能测试

  以VMware的vCenter server/vClient为例,与本系统性能做一个比较,测试环境为包含6台服务器的集群。用pc做客户端进行测试,CPU为双核2.9GHz,内存为2G,Windows Xp系统使用内存约350M。使用的系统资源情况分别如图6和图7所示。

 

点击查看原图   

图5 VMware 客户端资源使用   

点击查看原图

图6 B/S架构客户端资源使用

  由图可见,C/S架构客户端CPU利用率约为50%,内存使用为350M左右,而使用B/S架构系统的客户端CPU平均使用率约为20%,内存使用为190M左右。管理节点采用的是2个64位CPU,主频2.5GHz,内存8G,硬盘100G。安装hyper_V和作web服务器时系统资源使用情况见表1。

 

表1 管理节点消耗的系统资源对比

点击查看原图

  由此可见,B/S架构管理系统能极大降低系统资源的消耗。这一特点在集群规模增大时会体现的更加明显,因此对大规模虚拟化集群部署有重要的参考价值。

  6.结束语

  基于KVM的B/S架构虚拟化管理系统,将虚拟化管理工作由C/S模式转向了B/S模式,用户在管理虚拟化集群之前不用先安装客户端,直接通过浏览器登陆即可进行管理,管理工作不用限定在特定的客户机上,也不用限定在特定的网络环境中。由于web服务器取代了管理中心服务器,使系统的资源消耗更少,管理方式更加灵活。本系统在WindowS和Linux下经过测试,运行良好

此条目发表在virtual machine分类目录,贴了标签。将固定链接加入收藏夹。