古衛(wèi)濤
(西安郵電大學(xué),西安,710121)
在日新月異的當(dāng)代,我們不得不承認(rèn)計(jì)算機(jī)參與企業(yè)日常業(yè)務(wù)管理已成為企業(yè)現(xiàn)代化建設(shè)不可缺少的一個(gè)重要因素。企業(yè)對(duì)于信息處理的手段日益先進(jìn),運(yùn)作的效率也逐漸提高,同時(shí),企業(yè)對(duì)其電子化的信息系統(tǒng)的依賴程度也越來(lái)越高。目前,開源系統(tǒng)Linux 在大中型企業(yè)的應(yīng)用逐漸普及,許多企業(yè)的應(yīng)用服務(wù)都是構(gòu)筑在其之上。Linux 是一套免費(fèi)使用和自由傳播的類Unix 操作系統(tǒng),是一個(gè)基于POSIX 和UNIX 的多用戶、多任務(wù)、支持多線程和多CPU 的操作系統(tǒng)。它能運(yùn)行主要的UNIX 工具軟件、應(yīng)用程序和網(wǎng)絡(luò)協(xié)議。通過(guò)服務(wù)構(gòu)筑的自動(dòng)化,能夠大幅度減少人工成本,完善公司制度,提高系統(tǒng)的穩(wěn)定性。
隨著軟件技術(shù)的迅速發(fā)展,傳統(tǒng)的軟件開發(fā)遇到以下瓶頸:第一,軟件開發(fā)中的低效率、低質(zhì)量和高成本等問(wèn)題;第二,軟件運(yùn)行中的維護(hù)和升級(jí)難度隨實(shí)際需求的應(yīng)用的變化越來(lái)越快;第三,異構(gòu)系統(tǒng)之間的集成無(wú)統(tǒng)一標(biāo)準(zhǔn),難以實(shí)現(xiàn)集成。人們對(duì)自動(dòng)化軟件的需求越來(lái)越高,但自動(dòng)化程度高的軟件開發(fā)起來(lái)十分的困難?;诖耍梢詫?duì)軟件開發(fā)的自動(dòng)化有著這樣的想象:在軟件開發(fā)過(guò)程中盡力減少人力的勞動(dòng),把復(fù)雜的編制程序交給電腦完成,從開發(fā)流程上減少認(rèn)為工作步驟,實(shí)現(xiàn)開發(fā)過(guò)程的半自動(dòng)化。
想像一下,為企業(yè)開發(fā)新的軟件系統(tǒng)的時(shí)候,首先通過(guò)需求分析、功能設(shè)計(jì)、系統(tǒng)設(shè)計(jì)、到編碼的實(shí)現(xiàn)、測(cè)試、實(shí)施等一個(gè)漫長(zhǎng)的過(guò)程,每一個(gè)過(guò)程,都需要調(diào)查、分析、實(shí)現(xiàn)和測(cè)試幾個(gè)階段,軟件開發(fā)的項(xiàng)目周期便得不可預(yù)估。用戶的需求往往是模糊多變的,通過(guò)分析來(lái)確定軟件功能往往需要很長(zhǎng)的時(shí)間。如果再需求分析上花費(fèi)太多的時(shí)間,那么軟件即使開發(fā)出來(lái),也有能已經(jīng)被市場(chǎng)所淘汰。
因此,軟件開發(fā)里敏捷開發(fā)這一概念現(xiàn)在非常流行。簡(jiǎn)單的說(shuō),敏捷開發(fā)是一種以人為核心、迭代、循序漸進(jìn)的開發(fā)方法。在敏捷開發(fā)中,軟件項(xiàng)目的構(gòu)建被切分成多個(gè)子項(xiàng)目,各個(gè)子項(xiàng)目的成果都經(jīng)過(guò)測(cè)試,具備集成和可運(yùn)行的特征。換言之,就是把一個(gè)大項(xiàng)目分為多個(gè)相互聯(lián)系,但也可獨(dú)立運(yùn)行的小項(xiàng)目,并分別完成,在此過(guò)程中軟件一直處于可使用狀態(tài)。為了實(shí)現(xiàn)這種短期內(nèi)快遞迭代的開發(fā)方式,自動(dòng)化技術(shù)就很重要。
以Linux 為中心的服務(wù)器技術(shù)發(fā)展速度非???,因此搭建好的Linux 系統(tǒng)在若干年的使用過(guò)程中,絲毫不變的情況是非常少見的,在軟件開發(fā)里也是同樣。運(yùn)用IT 技術(shù)的各行各業(yè)和各個(gè)企業(yè)對(duì)軟件的要求每天也不一樣。使用的技術(shù)也是日新月異。
CI(Continuous Integration)是敏捷開發(fā)所使用自動(dòng)化工具之一。代表性的開源代碼有Jenkins。
這樣軟件開發(fā)者提交完新功能之后,包含新技能的軟件就被自動(dòng)生成,測(cè)試,并將測(cè)試結(jié)果報(bào)告給開發(fā)者,進(jìn)行及時(shí)的修正。一次提交太多的功能,測(cè)試中會(huì)發(fā)生大量的問(wèn)題,導(dǎo)致軟件非常不穩(wěn)定。開發(fā)者不得不進(jìn)行大量的返工作業(yè)。而通過(guò)敏捷開發(fā)的逐步迭代,可以保證軟件質(zhì)量的穩(wěn)步提高。軟件開發(fā)自動(dòng)化不僅能縮短開發(fā)周期,提高軟件質(zhì)量,而且能大幅度降低軟件在使用中的維護(hù)和升級(jí)難度。
一般的企業(yè)系統(tǒng)開始運(yùn)用時(shí),都是在服務(wù)器上手動(dòng)配置軟件,然后進(jìn)行功能驗(yàn)證。一些復(fù)雜的系統(tǒng)運(yùn)用,從開始準(zhǔn)備到真正到正式運(yùn)行,需要很長(zhǎng)時(shí)間。而且手動(dòng)搭建的系統(tǒng),會(huì)有一些意外的設(shè)定,導(dǎo)致系統(tǒng)不能穩(wěn)定工作。因此,作為系統(tǒng)運(yùn)動(dòng)的第一步:服務(wù)器的構(gòu)筑,如果能夠自動(dòng)化,那么就可可以快遞的搭建一個(gè)穩(wěn)定的服務(wù)器。同樣的構(gòu)建,以自動(dòng)化的方式實(shí)現(xiàn),最短的時(shí)間內(nèi)實(shí)現(xiàn)縮短了周期,并且系統(tǒng)具有更高的穩(wěn)定性和可擴(kuò)展性。
系統(tǒng)全體構(gòu)成圖及自動(dòng)構(gòu)建流程圖
libvirt 提供一種虛擬機(jī)監(jiān)控程序不可知的 API 來(lái)安全管理運(yùn)行于主機(jī)上的來(lái)賓操作系統(tǒng)。libvirt 本身不是一種工具, 它是一種可以建立工具來(lái)管理來(lái)賓操作系統(tǒng)的 API。libvirt 本身構(gòu)建于一種抽象的概念之上。它為受支持的虛擬機(jī)監(jiān)控程序?qū)崿F(xiàn)的常用功能提供通用的 API。libvirt 起初是專門為 Xen 設(shè)計(jì)的一種管理 API,后來(lái)被擴(kuò)展為可支持多個(gè)虛擬機(jī)監(jiān)控程序。libvirt 以一組 API 的形式存在,旨在供管理應(yīng)用程序使用(見圖 1 )。libvirt 通過(guò)一種特定于虛擬機(jī)監(jiān)控程序的機(jī)制與每個(gè)有效虛擬機(jī)監(jiān)控程序進(jìn)行通信,以完成 API 請(qǐng)求。
圖1 libvirt 比較和用例模型
使用 libvirt,我們有兩種不同的控制方式。第一種如 圖1所示,其中管理應(yīng)用程序和域位于同一節(jié)點(diǎn)上。管理應(yīng)用程序通過(guò) libvirt 工作,以控制本地域。當(dāng)管理應(yīng)用程序和域位于不同節(jié)點(diǎn)上時(shí),便產(chǎn)生了另一種控制方式。需要進(jìn)行遠(yuǎn)程通信如圖2。該模式使用一種運(yùn)行于遠(yuǎn)程節(jié)點(diǎn)上、名為 libvirtd 的特殊守護(hù)進(jìn)程。當(dāng)在新節(jié)點(diǎn)上安裝 libvirt 時(shí)該程序會(huì)自動(dòng)啟動(dòng),且可自動(dòng)確定本地虛擬機(jī)監(jiān)控程序并為其安裝驅(qū)動(dòng)程序。該管理應(yīng)用程序通過(guò)一種通用協(xié)議從本地 libvirt 連接到遠(yuǎn)程 libvirtd。對(duì)于QEMU,協(xié)議在 QEMU 監(jiān)視器處結(jié)束。QEMU 包含一個(gè)監(jiān)測(cè)控制臺(tái),它允許檢查運(yùn)行中的來(lái)賓操作系統(tǒng)并控制虛擬機(jī)(VM)各部分。
圖2 使用 libvirtd 控制遠(yuǎn)程虛擬機(jī)監(jiān)控程序
使用系統(tǒng)命令或者API 來(lái)構(gòu)筑Linux KVM 虛擬化系統(tǒng)。具體來(lái)說(shuō),就是virt-install,virsh 等等。這些命令也是通過(guò)調(diào)用libvirt 的API,對(duì)libvirt 進(jìn)程發(fā)命令,來(lái)實(shí)現(xiàn)對(duì)虛擬機(jī),虛擬網(wǎng)絡(luò)以及虛擬磁盤進(jìn)行操作。如果掌握了libvirt 的API 的使用發(fā)話,通過(guò)phython 等編程語(yǔ)言也可以進(jìn)行操作。
每一個(gè)VM 在生成的時(shí)候都需要對(duì)手動(dòng)對(duì)OS 及APP 進(jìn)行大量的設(shè)定,這些設(shè)定中,大量都是固定且繁瑣的,但非常容易出錯(cuò),一旦設(shè)置錯(cuò)誤,將會(huì)影響后期系統(tǒng)的正常運(yùn)行。而且在軟件敏捷開發(fā)的反復(fù)迭代過(guò)程中,經(jīng)常需要重新構(gòu)建服務(wù)器及對(duì)新功能進(jìn)行測(cè)試,手動(dòng)構(gòu)建的工作量非常龐大。
根據(jù)系統(tǒng)運(yùn)行的需要,提前配置好各種設(shè)定文件,在生成虛擬機(jī)的過(guò)程中自動(dòng)配置OS 和APP 設(shè)定文件。這樣可以保證每次配置好的服務(wù)器是穩(wěn)定而一致的。而且在敏捷開發(fā)的迭代過(guò)程中,可以反復(fù)使用,節(jié)省大量人力。
構(gòu)建虛擬機(jī)
例:
#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 可以設(shè)定為[rhel6]或者[win7],來(lái)安裝不同的Guest OS。指定后,可以通過(guò)Guest OS 的種類自動(dòng)適配最優(yōu)的虛擬機(jī)構(gòu)成。
可以設(shè)定的種類可以通過(guò)下面這個(gè)命令查看。
# virt-install -os-variant list
-location 可以指定Guest OS 的安裝媒體位置。上面這個(gè)例子中安裝的是Web 服務(wù)器里的RHEL6.4.如果使用安裝光盤的話,可以通過(guò)—cdrom 來(lái)指定。
在Host Linux 的桌面,執(zhí)行上面這個(gè)例子,就可以開始安裝RHEL6.4 了。
用腳本來(lái)實(shí)現(xiàn)虛擬機(jī)的自動(dòng)操作
通過(guò)virsh 命令可以實(shí)現(xiàn)虛擬機(jī)的啟動(dòng)/停止等操作。
?
例如,如果要將Host Linux 關(guān)機(jī)的時(shí)候,那就要先將運(yùn)行中的各個(gè)虛擬機(jī)置成休止?fàn)顟B(tài),之后,Host Linux 再啟動(dòng)的時(shí)候,再次啟動(dòng)虛擬機(jī),并復(fù)原虛擬機(jī)的運(yùn)行狀態(tài)。
如果虛擬機(jī)很多的時(shí)候,就需要自動(dòng)化了。
實(shí)際運(yùn)用中,可以寫一個(gè)下面的腳本。
# mkdir /root/bin
# vi /root/bin/vmctl.sh
# chmod u+x /root/bin/vmctl.sh
Vmctl.sh 內(nèi)容詳見附錄。
本文從軟件開發(fā)自動(dòng)化的角度,介紹了服務(wù)器自動(dòng)化構(gòu)筑。其中,服務(wù)器構(gòu)筑自動(dòng)化可以說(shuō)是各種自動(dòng)化研究的第一步,通過(guò)服務(wù)構(gòu)筑的自動(dòng)化,可以大幅減少人工成本,提高系統(tǒng)的穩(wěn)定性,縮短系統(tǒng)構(gòu)筑時(shí)間。今后還將在軟件開發(fā)自動(dòng)化方面進(jìn)行深入的研究工作。
[1] 余洪春 ,構(gòu)建高可用Linux 服務(wù)器(第2 版),機(jī)械工業(yè)出版社,2012
[2] 華豫民 ,電信企業(yè)資源配置的范疇與層次[J].通信企業(yè)管理,2008
[3] 杜明智,構(gòu)建基于linux服務(wù)器的小型網(wǎng)絡(luò).[J].科技傳播,2010