使用Eucalyptus打造自己的云測(cè)試平臺(tái)(CentOS+Apache+MySQL)
原創(chuàng)【51CTO精選譯文】編者導(dǎo)讀:雖然云計(jì)算不是一般人能玩得起的,但作為開發(fā)者或系統(tǒng)/安全運(yùn)維人員,可能會(huì)需要隨時(shí)測(cè)試一個(gè)應(yīng)用/服務(wù)在云平臺(tái)上的伸縮性表現(xiàn)。這種時(shí)候,我們就可以通過(guò)架設(shè)一個(gè)云測(cè)試平臺(tái)來(lái)滿足這方面的需求。本文將教你如何通過(guò)四臺(tái)機(jī)器,配合一系列的開源軟件,來(lái)搭建自己的云測(cè)試環(huán)境。
云計(jì)算旨在為應(yīng)用程序按需提供方便和可擴(kuò)展的計(jì)算資源和IT服務(wù),它也為測(cè)試平臺(tái)帶來(lái)了一種新的解決方案?;谠频臏y(cè)試平臺(tái)提供自動(dòng)橫向和縱向擴(kuò)展的測(cè)試基礎(chǔ)設(shè)施,剔除了傳統(tǒng)測(cè)試平臺(tái)的許多不足和挑戰(zhàn)。
傳統(tǒng)的測(cè)試環(huán)境通常是生產(chǎn)環(huán)境的按比例縮小版本。要建立一個(gè)測(cè)試環(huán)境需要大量的時(shí)間和精力,因?yàn)榘惭b過(guò)程包括大量艱巨的任務(wù),如購(gòu)買合適的硬件基礎(chǔ)設(shè)施(包括應(yīng)用服務(wù)器,數(shù)據(jù)庫(kù)服務(wù)器,Web服務(wù)器等),安裝需要的軟件(如應(yīng)用,數(shù)據(jù)庫(kù),測(cè)試工具,如果需要的話還有監(jiān)控工具)。
本文介紹如何使用各種開源技術(shù)在云中搭建一個(gè)測(cè)試平臺(tái),你可以使用它作為一個(gè)指導(dǎo)建立你自己的云測(cè)試平臺(tái)。下面是我搭建測(cè)試平臺(tái)用到的開源技術(shù):
- 安裝CentOS 5.2的機(jī)器:它們將作為云,集群和節(jié)點(diǎn)控制器。(文檔)
- Eucalyptus 1.5.1:一個(gè)開源基礎(chǔ)設(shè)施,它是計(jì)算機(jī)集群上云計(jì)算的實(shí)現(xiàn)。(下載)
- Apache Tomcat 6.0.14:它是最流行的開源Servlet容器。(下載)
- Jakarta JMeter 2.3.2:這個(gè)開源工具的目的是執(zhí)行負(fù)載測(cè)試和功能行為分析,以及測(cè)量應(yīng)用程序性能,主要是Web應(yīng)用程序。(下載)
- MySQL 5.0:它是最流行的關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng),提供多用戶訪問(wèn)的數(shù)據(jù)庫(kù)。(下載)
- 預(yù)封裝的CentOS 5.2鏡像:它作為創(chuàng)建Tomcat,JMeter和MySQL鏡像的基礎(chǔ)鏡像。
- JPetStore Web應(yīng)用程序:這個(gè)簡(jiǎn)單的應(yīng)用程序是J2EE平臺(tái)在現(xiàn)實(shí)應(yīng)用程序設(shè)計(jì)中的一個(gè)工作示范。(項(xiàng)目地址)
在動(dòng)手之前,你需要了解云計(jì)算和Eucalyptus工作原理的基本知識(shí)。
云測(cè)試環(huán)境組件
我們的實(shí)驗(yàn)環(huán)境由四臺(tái)機(jī)器組成,一臺(tái)是2GB內(nèi)存的機(jī)器,其它三臺(tái)內(nèi)存均是1GB,如圖1所示。全部安裝CentOS 5.2:
- Eucalyptus云和集群相關(guān)的RPM包安裝在2GB內(nèi)存的機(jī)器上,擔(dān)任云和集群控制器;
- 其余三臺(tái)機(jī)器作為節(jié)點(diǎn)控制器,只安裝節(jié)點(diǎn)RPM軟件包;
- 其中一臺(tái)機(jī)器安裝JMeter作為JMeter主服務(wù)器(關(guān)于Eucalyptus安裝說(shuō)明,請(qǐng)參考Eucalyptus管理員指南)。
圖 1 云測(cè)試環(huán)境由四臺(tái)機(jī)器組成
下面的鏡像是在搭建測(cè)試環(huán)境時(shí)要使用到的:
- Tomcat鏡像:用于應(yīng)用程序部署。
- MySQL鏡像:用于數(shù)據(jù)庫(kù)部署。
- JMeter鏡像:用于測(cè)試和監(jiān)控。
#p#
為云測(cè)試環(huán)境創(chuàng)建鏡像
這一部分我們將介紹如何創(chuàng)建前面列出的三種鏡像,包含必要的步驟和相關(guān)腳本。你可以從任意CentOS 5.2機(jī)器創(chuàng)建鏡像,在開始之前,我們需要一個(gè)預(yù)封裝的CentOS 5.2鏡像。
創(chuàng)建Tomcat鏡像
預(yù)封裝的CentOS鏡像已經(jīng)掛載到本地目錄,第一步是創(chuàng)建一個(gè)掛載鏡像的目錄,打開命令提示符窗口,執(zhí)行下面的命令:
# 創(chuàng)建目錄 mkdir /mnt/Mount
接下來(lái)將預(yù)封裝的CentOS 5.2鏡像掛載到創(chuàng)建的目錄上。
# 掛載鏡像 mount -o loop /mnt/Mount # 掛載Proc mount -t proc none /mnt/Mount/proc/
將Tomcat安裝到掛載目錄中(例如,將Tomcat文件夾放入/mnt/Mount/home),為了確保Tomcat隨系統(tǒng)自動(dòng)啟動(dòng),請(qǐng)執(zhí)行以下步驟:
1、在/etc/rc.local文件(/mnt/Mount/etc/rc.local)中包含JAVA_HOME和PATH變量;
2、在/etc/rc.local文件中添加Tomcat的啟動(dòng)腳本;
rc.local文件最終看起來(lái)如下:
#!/bin/sh # 本腳本將在所有其他init腳本執(zhí)行 之后 執(zhí)行 touch /var/lock/subsys/local export JAVA_HOME=/home/jdk1.6.0_13 export PATH=/home/jdk1.6.0_13/bin:$PATH:$HOME/bin /home/apache-Tomcat-6.0.18/bin/startup.sh
我們用于測(cè)試的Web應(yīng)用程序是JPetStore,將jpetstore.war放入/webapps/文件夾,現(xiàn)在鏡像包含所有必要的軟件和腳本了。
接下來(lái)卸載鏡像,切換到命令提示符窗口,執(zhí)行下面的命令:
# 卸載proc umount /mnt/Mount/proc # 卸載鏡像 umount -d /mnt/Mount
現(xiàn)在得到的鏡像包含Tomcat 6和Web應(yīng)用程序,我們可以將它上傳到云中了,關(guān)于上傳和運(yùn)行鏡像的說(shuō)明,請(qǐng)參考Eucalyptus鏡像管理文檔。
創(chuàng)建JMeter鏡像
創(chuàng)建JMeter鏡像的步驟和前面創(chuàng)建Tomcat鏡像的步驟一樣,將預(yù)封裝的CentOS 5.2鏡像掛載到指定文件夾:
# 掛載鏡像 mount -o loop /mnt/Mount # 掛載Proc mount -t proc none /mnt/Mount/proc/
將JMeter 2.3.2文件移動(dòng)到/mnt/Mount/home文件夾下。JMeter主服務(wù)器安裝在一臺(tái)物理Linux機(jī)器上,JMeter實(shí)例作為從服務(wù)器。首先,將主服務(wù)器添加到從服務(wù)器的“已知主機(jī)”列表中;然后為主服務(wù)器生成一個(gè)無(wú)密碼密鑰,并將其添加到從鏡像,將主服務(wù)器上產(chǎn)生的id_dsa放在從鏡像的指定文件夾中(如/mnt/Mount/home)。每當(dāng)從實(shí)例啟動(dòng)時(shí),在已知主機(jī)列表中就會(huì)有主服務(wù)器的IP。
當(dāng)JMeter從實(shí)例啟動(dòng)時(shí),主服務(wù)器的jmeter.properties文件需要更新它的IP地址,為了自動(dòng)添加IP地址,我們使用了一個(gè)Shell腳本,在掛載文件夾中創(chuàng)建一個(gè)腳本文件(/mnt/Mount/home):
#---------- 找到slave的IP地址 ----- OS=`uname`
IP="" # store IP
JMETER_Prop_File=""
Master=""
KeyPath="/id_dsa" # Master's Passphrase less key.
case $OS in
Linux) IP=`ifconfig | grep 'inet addr:'| grep -v '127.0.0.1' | cut -d: -f2 | awk '{ print $1}'`;;
FreeBSD|OpenBSD) IP=`ifconfig | grep -E 'inet.[0-9]' | grep -v '127.0.0.1' | awk '{ print $2}'` ;;
SunOS) IP=`ifconfig -a | grep inet | grep -v '127.0.0.1' | awk '{ print $2} '` ;;
*) IP="Unknown";;
esac
#---------------- 將slave的IP寫入master的屬性文件 -----
ssh -i $KeyPath root@$Master "sed -e 's/remote_hosts=/remote_hosts=$IP,/1' $JMETER_Prop_File/jmeter.properties>$JMETER_Prop_File/test.chk"
ssh -i $KeyPath root@$Master "cp $JMETER_Prop_File/test.chk $JMETER_Prop_File/jmeter.properties"
ssh -i $KeyPath root@$Master "rm -rf $JMETER_Prop_File/test.chk"
將上面的代碼保存為.sh文件,在rc.local文件中添加實(shí)例啟動(dòng)時(shí)需要自動(dòng)啟動(dòng)的服務(wù)路徑。
#!/bin/sh # 本腳本將會(huì)在其他init腳本之后執(zhí)行 touch /var/lock/subsys/local chmod 600 //id_dsa / export JAVA_HOME=//java export PATH=//java/bin:$PATH:$HOME/bin //jmeter2.3.2/bin/jmeter-server service vsftpd start
接下來(lái)卸載掉鏡像,方法和前面一樣。
#p#
創(chuàng)建MySQL鏡像
創(chuàng)建MySQL鏡像的步驟和創(chuàng)建Tomcat鏡像的步驟一樣,掛載CentOS 5.2預(yù)封裝鏡像到指定文件夾:
# 掛載鏡像 mount -o loop /mnt/Mount # 掛載Proc mount -t proc none /mnt/Mount/proc/
修改根掛載點(diǎn)(如/mnt/Mount),然后執(zhí)行下面的命令:
cd /mnt/Mount chroot .
命令執(zhí)行完后,如果顯示下面的命令提示符,則表示掛載點(diǎn)修改成功:
bash-3.2#
接下來(lái)安裝MySQL需要的RPM包,包括依賴包。
安裝完所有RPM包后,從root退出。
bash-3.2#exit exit [root@localhost centos]#
如果你還不知道遠(yuǎn)程訪問(wèn)MySQL數(shù)據(jù)庫(kù)的方法,請(qǐng)參考“如何開啟MySQL數(shù)據(jù)庫(kù)的遠(yuǎn)程訪問(wèn)”教程。
/etc/init.d/mysqld start
為了讓MySQL也隨系統(tǒng)自動(dòng)啟動(dòng),在/etc/rc.local文件中添加啟動(dòng)腳本。
接下來(lái)配置JPetStore使用新的MySQL實(shí)例:
driver=org.gjt.mm.mysql.Driver url=jdbc:mysql://:3306/JPETSTORE username= password=
當(dāng)實(shí)例啟動(dòng)和運(yùn)行時(shí),你可以按照我們的要求,將JPetStore的默認(rèn)數(shù)據(jù)庫(kù)修改為MySQL,在Tomcat鏡像中,更新JPetStore的database.properties文件。
啟動(dòng)所有實(shí)例,確保每個(gè)實(shí)例都獲得了一個(gè)IP地址。啟動(dòng)好后,你就可以在這些云實(shí)例上執(zhí)行性能測(cè)試,測(cè)試方法和在物理機(jī)上執(zhí)行性能測(cè)試沒(méi)有區(qū)別。
小結(jié)
和物理測(cè)試環(huán)境相比,將測(cè)試環(huán)境搭建在云中有許多優(yōu)勢(shì),我們?cè)谖锢頊y(cè)試環(huán)境和云測(cè)試環(huán)境中執(zhí)行了多輪測(cè)試,物理測(cè)試機(jī)和云測(cè)試實(shí)例的配置都一樣,根據(jù)測(cè)試結(jié)果顯示,基于云的解決方案降低了搭建測(cè)試環(huán)境需要的時(shí)間和精力,而它們之間的性能差異是微不足道的。
原文:http://www.developer.com/open/article.php/3909156/article.htm
作者:Rini Susan和Vikas Valikan
【編輯推薦】