目的 借鉴主流私有云管理软件, 基于Drupal实现开源虚拟化KVM虚拟机云计算化管理。【应用背景】深圳大学图书馆目前部署的KVM虚拟化应用是通过系统自带的管理工具进行管理, 不仅管理效率低, 而且数据安全性也不高。方法 通过在Drupal平台下开发自定义模块, 并结合PHP扩展SSH2, 调用KVM管理程序Libvirt API, 构建KVM虚拟机管理系统。结果 实现KVM虚拟机系统化管理, 可弥补主流私有云软件对服务器性能要求过高, 及无法管理现有服务器的局限性。结论 本系统不仅实现了虚拟机的系统化管理, 而且具备管理现有环境中虚拟机的能力, 具有良好的扩展性和独立性。
[Objective] Based on the mainstream private cloud management software and Drupal to virtualize cloud computing KVM system. [Context] The KVM application operated by Shenzhen University at present is managed through the system own management tool, which is not only less efficient, but also low security in data. [Methods] Developing custom modules, combing with PHP-SSH2, taking KVM middleware Libvirt API, then building KVM system.[Results] The KVM system is achieved, and the limitation of high requirements for mainstream private cloud severs and inability to manage the existing servers is made up. [Conclusions] This system can achieve the systemized management, while it also has the ability to manage existing virtual machines, and has excellent expansibility and independency.
私有云属于云计算的一种, 所谓云计算, 就是具备“ 标准化” 、“ 自动化” 、“ 虚拟化” 三大特征于一体的IT服务管理解决方案, 其主要目的是为了提高IT构架的灵活性、改善IT系统的使用体验, 以降低IT的总体拥有成本。云计算根据其所服务的范畴不同, 可以分为“ 公有云” 和“ 私有云” 。
“ 私有云” 是针对单个机构特别定制, 主要特点就是对分散的资源进行集中统一管理, 例如一些有众多分支机构的大型企业、政府和事业单位等[1]。本文介绍了基于Drupal框架, 通过自定义模块实现的私有云架构, 并说明其工作机制、实现方法以及系统特点。
深圳大学图书馆部署的KVM[2]虚拟化应用通过以下两种方式进行管理:
(1) virt-manager图形界面方式, 管理功能单一化, 且不具有扩展性、C/S架构受网络限制。
(2) Libvirt[3]API命令行管理方式, 不仅在操作安全、服务质量上存在缺陷, 而且这样的管理方式效率不高, 对运维人员的技术以及工作状态要求也相对较高。
目前主流的私有云管理软件[4]主要有OpenStack、Eucalyptus、OpenNebula、ConVirt等, 虽然功能比较强大, 但是对服务器和其他硬件要求比较高, 以及存在无法管理现有虚拟机的弊端。
为解决以上问题, 本文提出了既可以加载管理现有环境中的虚拟化应用, 也可以在此基础上部署新的虚拟化应用架构的解决方案。在具体的功能上借鉴主流私有云软件(实现方法本文不做详细介绍)。
目前几种主流的私有云软件的系统架构如下:
(1) OpenStack通过Agent的方式管理计算资源。在每一个计算节点上, 都需要运行nova-network服务和nova-compute服务。
(2) Eucalyptus通过Agent的方式管理计算资源。在每一个计算节点上, 要运行一个eucalyptus-nc的服务。该服务在集群控制器(CC)上注册后, 云控制器(CLC)即可通过集群控制器(CLC)将需要运行的虚拟机映像文件(EMI)复制到该计算节点上运行。
(3) OpenNebula和ConVirt的管理方式采用无代理模式, 即当用户需要启动或者关闭某个虚拟机时, 通过SSH登录到计算节点, 在计算节点上直接运行相对应的虚拟化管理命令。
以上几种虚拟化软件其他方面的测试总结如下:
(1) 若在私有环境中安装以上软件, 配置难度系数比较大, 且基本上都无法直接满足自我需求。
(2) 二次开发难度相当大, 由于软件本身设计相当复杂, 需要对其源代码进行大量、深入的研究, 所以有些需要“ 私人定制” 的应用没有强大的技术支持根本无法实现。
(3) 以上管理软件普遍存在一个问题: 无法或很难在现有环境中部署, 需要系统管理人员对系统管理知识、KVM虚拟化系统以及相应管理软件的开发语言都非常熟悉。
(4) 企业版收费, 社区版功能受限, 技术支持一般。
基于深圳大学图书馆虚拟化的管理方式以及虚拟机部署情况, 根据对Drupal[5]的系统结构以及KVM虚拟化技术的研究, 构建Drupal+KVM组成的私有云管理平台, 通过Drupal中丰富的API结合PHP扩展SSH2[6](Secure Shell2, SSH2函数包括服务器连接、文件传递、命令执行等多个模块), 通过二次开发模块(即图1中自定义模块), 实现中间件Libvirt在Drupal中的成功调用, 在功能上借鉴以上几种虚拟化软件, 进而实现Drupal对KVM虚拟机的高效化、程序化、逻辑化、界面化管理, 最终形成Drupal和Libvirt结合的KVM私有云管理系统。
图1给出了基于Drupal的KVM私有云管理系统框架, 由三部分组成:
(1) 管理服务器, 即私有云管理平台服务器, 安装Drupal以及PHP扩展— — SSH2, 由Drupal完成管理的角色。在同类软件中Drupal具有最强的定制能力和灵活性, 它综合了强大并可自由配置的功能, 能支持从个人博客(Personal Weblog)到大型社区驱动(Community-Driven)的网站等各种不同应用的项目。其中, 节点模块、用户模块、系统配置模块、内容过滤模块、区块模块是Drupal的系统模块, 自定义模块(私有云模块)是实现私有云功能的模块, 主要由8个模块组成, 每个模块的具体功能在3.3节中详细介绍。
(2) 管理中间件, KVM管理中间件Libvirt提供了一种虚拟机监控程序不可知的 API安全管理运行于主机上的来宾操作系统, Libvirt本身不是一种工具, 它是一种可以建立工具以管理来宾操作系统的API。
(3) 节点服务器, 一系列可被管理的KVM节点服务器。KVM需要运行在Linux操作系统内核版本2.6.16以上。
本系统的目的是通过在Drupal中开发的私有云模块调用Libvirt中间件, 将节点服务器根据用户的自我需求组成一个或多个云。此架构中, 节点服务器(第三部分)作为虚拟机实例的载体, 同一个“ 云” 内的实例可在不同节点之间进行自动或手动迁移, 不同“ 云” 之间的节点也可以相互切换。管理服务器(第一部分)的作用是将节点进行合并形成“ 云” , 并提供对节点以及实例的操作, 比如: 节点管理、实例管理、实例迁移等。中间件(第二部分)是第一部分和第三部分进行信息交换的介质, 有关实例操作的各种指令都需通过调用Libvirt实现, 可单独安装一台Libvirt中间件管理服务器, 也可直接调用每一个节点中的Libvirt对其进行管理。
系统运行流程如图2所示:
本架构采用无代理模式, 设置独立Libvirt中间件服务器, 具体运行步骤如下:
(1) 当Client向管理服务器(Drupal)提交Command (目标节点+指令)后, 管理服务器通过ssh2_connect连接Libvirt服务器, 并发送相应的指令。
(2) Libvirt在启动过程中运行一个Libvirtd守护进程。Libvirt接收Client通过管理服务器发来的目标节点和指令; 连接目标节点的Libvirtd; 目标节点的Libvirtd调用相对应指令的API(高级Libvirt API可划分为5个部分: 虚拟机监控程序连接API、域API、网络API、存储卷API、存储池API)。
(3) KVM收到其Libvirt的指令后执行相应操作并将执行结果返回给Libvirt。
(4) Libvirt将获取到的信息返回给管理服务器, 并将获取到的返回信息以文件的形式存储, 下一次操作将对该文件进行更新, 同时起到同步备份的效果。
(5) Drupal处理信息(信息的格式化处理、写数据库等); 管理服务器将处理后的信息生成相应页面返回给Client, 同时日志写入Watchdog数据库。
本私有云系统的实现首先需要将管理服务器和虚拟机所在的物理节点进行连接, 并通过相应模块的功能以实现虚拟机的统一管理。设计8个私有云模块, 分别命名为: kvm_view、operation、pm_add、pm_view、pm_top、pool、vm_install、vm_top, 如图3所示。以上每个模块实现不同的功能, 互不冲突, 缺一不可。不同模块之间且存在一定的依赖关系。
从图3中可以看出它们自下向上的依赖关系。将图3中各个模块的功能做进一步的说明, 如表1所示。需要扩展的功能可在相应的模块中添加。
本系统将Drupal扩展成为一个信息管理系统, 开发和部署基于Drupal 7.22框架。Drupal集成了基础的管理功能, 比如数据库的规划与监理、用户管理、访问管理、日志系统、表单开发与应用、Ajax调用等, 为系统开发节省了大量时间, 且系统模块经过了大量的测试, 也更加高效、安全。中间件Libvirt版本不低于0.6.3可管理kvm-83-164.el5以上版本虚拟机, 即可兼容不同KVM版本。
为保证本系统的正常运行, 除了图1中自定义模块(私有云模块)外, 还必须开启以下Drupal系统模块: Block、Node、User、Menu、System、Field; Drupal贡献模块: CAS(完成系统的登录验证)。以上模块不需要开发, 系统安装后启用即可。
目前, 深圳大学在生产环境系统共管理约300TB数据, TRUST区由2台DELL R720服务器(2* 6核CPU、64GB内存)组成, 运行有62台虚拟机。DMZ区由2台IBM X3950服务器(8* 4核CPU、256GB内存)组成, 运行有105台虚拟机。
(1) 性能监控方面, 通过系统性能监控页面, TRUST区物理服务器的CPU使用率平峰期20%左右(图4(a)), 访问高峰期达到45%左右; DMZ区物理服务器的CPU使用率平峰期19%左右(图4(b)), 访问高峰期达到40%左右。该系统可较出色地均衡节点之间的性能。
(2) 功能方面, 包括物理节点的添加/删除, 虚拟机创建、克隆、备份、迁移、启动/关闭, 磁盘/网卡的添加/删除, 存储池管理等(见图5)。可进行的扩展有: 增加KVM虚拟机高可用[7]功能、批量部署、应用部署等, 在以后的应用中可逐渐加以完善。
截止目前, 本系统是国内高校首例结合Drupal的私有云管理架构系统, 实现了Libvirt的大部分功能。本系统将原有的虚拟化管理方式由C/S转为B/S架构, 通过逻辑化的处理, 避免了管理人员因失误或错误造成的意外后果。系统还具备以下优点:
(1) 数据自动备份。Libvirt返回结果给Drupal的同时对系统进行备份, 包括实例配置文件、节点、实例信息等。
(2) 新建虚拟机根据所在云中的物理机节点的性能自动分配。
(3) 此架构系统可以直接在已有生产环境中在线部署, 具有较强的可适应性和灵活性。
(4) 可将该系统扩展成一个多元化的管理平台, Libvirt Internal Drivers[8]具备VMware、Xen、Microsoft Hyper-V等虚拟化程序的Hypervisor Drivers, 通过相应虚拟化的 Libvirt Hypervisor Driver可以对运行在其平台下的虚拟机直接进行管理。
本系统具备私有云管理平台的大部分功能。最重要的是适合管理现有环境中虚拟机的能力, 可在线管理生产环境中的虚拟化系统, 而且此架构下的管理服务器即使宕机, 也不会影响原生产环境, 具有极高的独立性。私有云的建设不是一蹴而就, 而是一个长期的建设过程。由于本系统是将信息以文件的形式存储在管理服务器, 因此在读写方面存在一定的不足, 未来希望通过Cache的形式得以解决。在功能方面虽然具备了私有云的基本功能, 但是虚拟机的高可用、批量部署等重要功能还未实现, 在接下来的开发中将会加以完善。
[1] |
|
[2] |
|
[3] |
|
[4] |
|
[5] |
|
[6] |
|
[7] |
|
[8] |
|