企业级Linux 服务器的自动化构建
2014-01-03古卫涛
古卫涛
(西安邮电大学,西安,710121)
0 引言
在日新月异的当代,我们不得不承认计算机参与企业日常业务管理已成为企业现代化建设不可缺少的一个重要因素。企业对于信息处理的手段日益先进,运作的效率也逐渐提高,同时,企业对其电子化的信息系统的依赖程度也越来越高。目前,开源系统Linux 在大中型企业的应用逐渐普及,许多企业的应用服务都是构筑在其之上。Linux 是一套免费使用和自由传播的类Unix 操作系统,是一个基于POSIX 和UNIX 的多用户、多任务、支持多线程和多CPU 的操作系统。它能运行主要的UNIX 工具软件、应用程序和网络协议。通过服务构筑的自动化,能够大幅度减少人工成本,完善公司制度,提高系统的稳定性。
1 软件开发中的自动化
随着软件技术的迅速发展,传统的软件开发遇到以下瓶颈:第一,软件开发中的低效率、低质量和高成本等问题;第二,软件运行中的维护和升级难度随实际需求的应用的变化越来越快;第三,异构系统之间的集成无统一标准,难以实现集成。人们对自动化软件的需求越来越高,但自动化程度高的软件开发起来十分的困难。基于此,可以对软件开发的自动化有着这样的想象:在软件开发过程中尽力减少人力的劳动,把复杂的编制程序交给电脑完成,从开发流程上减少认为工作步骤,实现开发过程的半自动化。
想像一下,为企业开发新的软件系统的时候,首先通过需求分析、功能设计、系统设计、到编码的实现、测试、实施等一个漫长的过程,每一个过程,都需要调查、分析、实现和测试几个阶段,软件开发的项目周期便得不可预估。用户的需求往往是模糊多变的,通过分析来确定软件功能往往需要很长的时间。如果再需求分析上花费太多的时间,那么软件即使开发出来,也有能已经被市场所淘汰。
因此,软件开发里敏捷开发这一概念现在非常流行。简单的说,敏捷开发是一种以人为核心、迭代、循序渐进的开发方法。在敏捷开发中,软件项目的构建被切分成多个子项目,各个子项目的成果都经过测试,具备集成和可运行的特征。换言之,就是把一个大项目分为多个相互联系,但也可独立运行的小项目,并分别完成,在此过程中软件一直处于可使用状态。为了实现这种短期内快递迭代的开发方式,自动化技术就很重要。
以Linux 为中心的服务器技术发展速度非常快,因此搭建好的Linux 系统在若干年的使用过程中,丝毫不变的情况是非常少见的,在软件开发里也是同样。运用IT 技术的各行各业和各个企业对软件的要求每天也不一样。使用的技术也是日新月异。
CI(Continuous Integration)是敏捷开发所使用自动化工具之一。代表性的开源代码有Jenkins。
这样软件开发者提交完新功能之后,包含新技能的软件就被自动生成,测试,并将测试结果报告给开发者,进行及时的修正。一次提交太多的功能,测试中会发生大量的问题,导致软件非常不稳定。开发者不得不进行大量的返工作业。而通过敏捷开发的逐步迭代,可以保证软件质量的稳步提高。软件开发自动化不仅能缩短开发周期,提高软件质量,而且能大幅度降低软件在使用中的维护和升级难度。
2 服务器自动构建的意义
一般的企业系统开始运用时,都是在服务器上手动配置软件,然后进行功能验证。一些复杂的系统运用,从开始准备到真正到正式运行,需要很长时间。而且手动搭建的系统,会有一些意外的设定,导致系统不能稳定工作。因此,作为系统运动的第一步:服务器的构筑,如果能够自动化,那么就可可以快递的搭建一个稳定的服务器。同样的构建,以自动化的方式实现,最短的时间内实现缩短了周期,并且系统具有更高的稳定性和可扩展性。
系统全体构成图及自动构建流程图
3 虚拟化API 的libvirt
libvirt 提供一种虚拟机监控程序不可知的 API 来安全管理运行于主机上的来宾操作系统。libvirt 本身不是一种工具, 它是一种可以建立工具来管理来宾操作系统的 API。libvirt 本身构建于一种抽象的概念之上。它为受支持的虚拟机监控程序实现的常用功能提供通用的 API。libvirt 起初是专门为 Xen 设计的一种管理 API,后来被扩展为可支持多个虚拟机监控程序。libvirt 以一组 API 的形式存在,旨在供管理应用程序使用(见图 1 )。libvirt 通过一种特定于虚拟机监控程序的机制与每个有效虚拟机监控程序进行通信,以完成 API 请求。
图1 libvirt 比较和用例模型
使用 libvirt,我们有两种不同的控制方式。第一种如 图1所示,其中管理应用程序和域位于同一节点上。管理应用程序通过 libvirt 工作,以控制本地域。当管理应用程序和域位于不同节点上时,便产生了另一种控制方式。需要进行远程通信如图2。该模式使用一种运行于远程节点上、名为 libvirtd 的特殊守护进程。当在新节点上安装 libvirt 时该程序会自动启动,且可自动确定本地虚拟机监控程序并为其安装驱动程序。该管理应用程序通过一种通用协议从本地 libvirt 连接到远程 libvirtd。对于QEMU,协议在 QEMU 监视器处结束。QEMU 包含一个监测控制台,它允许检查运行中的来宾操作系统并控制虚拟机(VM)各部分。
图2 使用 libvirtd 控制远程虚拟机监控程序
使用系统命令或者API 来构筑Linux KVM 虚拟化系统。具体来说,就是virt-install,virsh 等等。这些命令也是通过调用libvirt 的API,对libvirt 进程发命令,来实现对虚拟机,虚拟网络以及虚拟磁盘进行操作。如果掌握了libvirt 的API 的使用发话,通过phython 等编程语言也可以进行操作。
4 Linux 服务器手动构建和自动构建比较
4.1 手动构建
每一个VM 在生成的时候都需要对手动对OS 及APP 进行大量的设定,这些设定中,大量都是固定且繁琐的,但非常容易出错,一旦设置错误,将会影响后期系统的正常运行。而且在软件敏捷开发的反复迭代过程中,经常需要重新构建服务器及对新功能进行测试,手动构建的工作量非常庞大。
4.2 自动构建
根据系统运行的需要,提前配置好各种设定文件,在生成虚拟机的过程中自动配置OS 和APP 设定文件。这样可以保证每次配置好的服务器是稳定而一致的。而且在敏捷开发的迭代过程中,可以反复使用,节省大量人力。
构建虚拟机
例:
#virt -install --name vm01
vcpus 2 --ram 1024
--disk path=/var/lib/libvirt/images/vm01.img,size=16,sparse=false
--network network:defrault
--graphics vnc
--os-variant rhel6
--location http://192.168.122.1/iso/rhel64
?
--osvariant 可以设定为[rhel6]或者[win7],来安装不同的Guest OS。指定后,可以通过Guest OS 的种类自动适配最优的虚拟机构成。
可以设定的种类可以通过下面这个命令查看。
# virt-install -os-variant list
-location 可以指定Guest OS 的安装媒体位置。上面这个例子中安装的是Web 服务器里的RHEL6.4.如果使用安装光盘的话,可以通过—cdrom 来指定。
在Host Linux 的桌面,执行上面这个例子,就可以开始安装RHEL6.4 了。
用脚本来实现虚拟机的自动操作
通过virsh 命令可以实现虚拟机的启动/停止等操作。
?
例如,如果要将Host Linux 关机的时候,那就要先将运行中的各个虚拟机置成休止状态,之后,Host Linux 再启动的时候,再次启动虚拟机,并复原虚拟机的运行状态。
如果虚拟机很多的时候,就需要自动化了。
实际运用中,可以写一个下面的脚本。
# mkdir /root/bin
# vi /root/bin/vmctl.sh
# chmod u+x /root/bin/vmctl.sh
Vmctl.sh 内容详见附录。
5 总结
本文从软件开发自动化的角度,介绍了服务器自动化构筑。其中,服务器构筑自动化可以说是各种自动化研究的第一步,通过服务构筑的自动化,可以大幅减少人工成本,提高系统的稳定性,缩短系统构筑时间。今后还将在软件开发自动化方面进行深入的研究工作。
[1] 余洪春 ,构建高可用Linux 服务器(第2 版),机械工业出版社,2012
[2] 华豫民 ,电信企业资源配置的范畴与层次[J].通信企业管理,2008
[3] 杜明智,构建基于linux服务器的小型网络.[J].科技传播,2010