黃靖茹,李釗興,裴喜龍,2,徐志宇,2
(1.同濟(jì)大學(xué)電子與信息工程學(xué)院;2.同濟(jì)大學(xué)計(jì)算機(jī)與信息技術(shù)國(guó)家級(jí)實(shí)驗(yàn)教學(xué)示范中心,上海 201804)
openEuler 是一個(gè)開源免費(fèi)的Linux 發(fā)行版系統(tǒng)[1],旨在通過(guò)開放的社區(qū)形式與全球開發(fā)者共同構(gòu)建一個(gè)開放、多元和架構(gòu)包容的軟件生態(tài)體系。openEuler 同時(shí)也是一個(gè)創(chuàng)新系統(tǒng),倡導(dǎo)客戶在系統(tǒng)上提出創(chuàng)新想法、開拓新思路、實(shí)踐新方案。
openEuler 是企業(yè)系統(tǒng)(Enterprise OS),其可以提供企業(yè)級(jí)應(yīng)用要素,如穩(wěn)定的環(huán)境、長(zhǎng)期的升級(jí)更新支持、強(qiáng)大的保守性、大規(guī)模系統(tǒng)的適用性等。與大多數(shù)操作系統(tǒng)一樣,openEuler 在發(fā)行每個(gè)版本前都需要經(jīng)過(guò)嚴(yán)格測(cè)試,驗(yàn)證系統(tǒng)是否滿足需求,并對(duì)不足之處進(jìn)行改進(jìn)。測(cè)試人員一般通過(guò)靜態(tài)分析和軟件測(cè)試技術(shù)檢測(cè)系統(tǒng)缺陷[2-4],而系統(tǒng)故障具有很強(qiáng)的隨機(jī)性[5-6]。每個(gè)版本迭代時(shí),系統(tǒng)測(cè)試都需要投入大量資源,因此如何以成本較低的方式構(gòu)造出一個(gè)隨機(jī)環(huán)境,既能使openEuler 隨機(jī)運(yùn)行,又能有相對(duì)專業(yè)的人員將出現(xiàn)故障的情況描述清楚,并反饋給開發(fā)人員至關(guān)重要。雖然目前已針對(duì)許多系統(tǒng)開發(fā)了性能測(cè)試,如RTLinux[7-8]、Android[9-10]等,但關(guān)于openEuler 的平臺(tái)及其性能測(cè)試很少。
隨著大數(shù)據(jù)和人工智能的發(fā)展,數(shù)據(jù)規(guī)模不斷擴(kuò)大,利用單一設(shè)備進(jìn)行測(cè)試面臨巨大挑戰(zhàn)[11-12]。在分布式環(huán)境下可以利用廉價(jià)主機(jī)組成集群進(jìn)行大規(guī)模測(cè)試,以提高系統(tǒng)的可用性,因此目前對(duì)分布式測(cè)試的研究日益增加。為對(duì)openEuler 的性能進(jìn)行高質(zhì)高效的分布式測(cè)試,同時(shí)盡量以低廉的成本推進(jìn)版本的更新與迭代,本文設(shè)計(jì)了一個(gè)實(shí)驗(yàn)平臺(tái),通過(guò)開源學(xué)習(xí)社區(qū)和大規(guī)模學(xué)生實(shí)驗(yàn)匯集個(gè)人智慧[13],使問(wèn)題得到及時(shí)反饋與解決。本文主要介紹實(shí)驗(yàn)平臺(tái)的開發(fā)過(guò)程,包括軟硬件配置、內(nèi)網(wǎng)穿透以及實(shí)驗(yàn)平臺(tái)的使用方法。該實(shí)驗(yàn)平臺(tái)是針對(duì)操作系統(tǒng)性能進(jìn)行分布式測(cè)試,因此本文提出了基本的測(cè)試指標(biāo)。此外,開發(fā)人員也可以根據(jù)具體需求定制方案及對(duì)應(yīng)指標(biāo),具有很強(qiáng)的開放性和拓展性。
3 塊樹莓派(Raspberry Pi,RPi),外加硬盤、SD 卡、電源等,組成一個(gè)陣列。由于編譯openEuler 的計(jì)算機(jī)存儲(chǔ)不得低于50GB,為滿足后續(xù)開發(fā)需要,本實(shí)驗(yàn)平臺(tái)選擇128GB SD 卡作為每個(gè)RPi 的主存儲(chǔ),并通過(guò)USB 口連接移動(dòng)硬盤(Hard Disk)作為輔助存儲(chǔ)。
Fig.1 Hardware configuration圖1 硬件配置
圖1 為3 塊RPi 組成的硬件配置示意圖,每塊RPi 都需要連接電源和接入同一交換機(jī)(Switch),使其處在同一個(gè)局域網(wǎng)中,再通過(guò)廣域網(wǎng)(WAN)連到互聯(lián)網(wǎng)(Internet)。從集群分工的角度而言,一塊RPi 作為集群(Cluster)的主節(jié)點(diǎn)(Master),其他兩塊作為從節(jié)點(diǎn)(Workers),作為主節(jié)點(diǎn)的RPi 負(fù)責(zé)整個(gè)集群的存儲(chǔ)和對(duì)外訪問(wèn)的控制。
需要安裝的軟件包括openEuler、Ceph 存儲(chǔ)[14]、Seafile云盤[15]、Frp[16]等。圖2 為軟件配置示意圖。
Fig.2 Software configuration圖2 軟件配置
openEuler 是整個(gè)集群的操作系統(tǒng),對(duì)于第一塊RPi(Rpi_0)而言,需要從官網(wǎng)直接獲取openEuler 的img 鏡像文件;對(duì)于剩下兩塊RPi(Rpi_1 和Rpi_2)而言,需利用openEuler 官方提供的源碼,在操作系統(tǒng)為openEuler 的Rpi_0中編譯得到img 鏡像文件。Ceph 負(fù)責(zé)具體存儲(chǔ)分配[17-18],構(gòu)成openEuler Ceph 集群,整個(gè)集群安裝Seafile 后,便于進(jìn)行云存儲(chǔ)管理[19-20]。當(dāng)集群處于同一局域網(wǎng)時(shí),利用Frp開放內(nèi)網(wǎng)IP,使用戶可以在互聯(lián)網(wǎng)上進(jìn)行訪問(wèn)。為測(cè)試集群的性能,由測(cè)試管理服務(wù)訪問(wèn)內(nèi)網(wǎng)。
3 塊RPi 均需以openEuler 作為操作系統(tǒng)。出于測(cè)試openEuler 性能的目的,在不同硬件下需要按照不同方式安裝系統(tǒng),以下主要介紹兩種方式,均需在openEuler 的環(huán)境下進(jìn)行。
在openEuler 的RPi 版本下載官方openEuler 鏡像,將其燒錄到一張SD 卡中,在其中一塊RPi 上建立openEuler操作系統(tǒng)環(huán)境,版本為20.03 LTS SP1。
實(shí)驗(yàn)平臺(tái)的開發(fā)圍繞openEuler 進(jìn)行了多方面的性能測(cè)試,其中穩(wěn)定性的測(cè)試方法有以下兩種:在openEuler 環(huán)境下構(gòu)建自身編譯環(huán)境形成鏡像文件和構(gòu)建專門的測(cè)試程序。
由于一款操作系統(tǒng)的穩(wěn)定性(兼容、數(shù)據(jù)包完整性等)測(cè)試從進(jìn)行C/C++編譯、鏈接等開發(fā)過(guò)程便已開始,因此官網(wǎng)鏡像與自編鏡像一起工作有助于判斷環(huán)境文檔、腳本等是否完整。編譯環(huán)境會(huì)影響編譯構(gòu)建的結(jié)果,rpm 打包也受環(huán)境影響,因此在openEuler 自身環(huán)境下編譯構(gòu)建可以測(cè)試系統(tǒng)穩(wěn)定性。
openEuler 是一款復(fù)雜應(yīng)用環(huán)境的操作系統(tǒng),內(nèi)核和C/C++語(yǔ)言庫(kù)是耦合在一起的,內(nèi)核啟動(dòng)后,首先會(huì)將C/C++庫(kù)作為動(dòng)態(tài)鏈接庫(kù)載入內(nèi)存,如果要對(duì)操作系統(tǒng)內(nèi)核進(jìn)行測(cè)試,需在應(yīng)用程序上實(shí)施一些針對(duì)內(nèi)核的C/C++程序測(cè)試。在openEuler 系統(tǒng)搭建完成后,可以有針對(duì)性地編寫測(cè)試內(nèi)核的程序。
目前有很多分布式軟件利用不同策略對(duì)每個(gè)節(jié)點(diǎn)進(jìn)行管理和維護(hù),安裝這些專業(yè)軟件不僅是搭建分布式環(huán)境的必要條件,也可以測(cè)試其與openEuler 系統(tǒng)的兼容性。此外,在分布式系統(tǒng)下,整個(gè)系統(tǒng)的穩(wěn)定性不僅與單臺(tái)計(jì)算機(jī)的性能有密切關(guān)系,計(jì)算機(jī)之間的存儲(chǔ)、時(shí)延等也會(huì)影響整體性能。因此,相關(guān)軟件的安裝能使測(cè)試重點(diǎn)更多地集中在操作系統(tǒng)表現(xiàn)上,有利于專業(yè)人員發(fā)現(xiàn)故障。
2.3.1 Ceph 安裝
在安裝Ceph 軟件之前系統(tǒng)環(huán)境需要滿足一定條件,包括配置eperl 源、關(guān)閉防火墻、配置主機(jī)名、配置NTP、配置免密登錄和關(guān)閉SELinux,其中配置NTP 是為了使集群中的存儲(chǔ)節(jié)點(diǎn)時(shí)差縮小,否則Ceph 會(huì)產(chǎn)生警報(bào)。
正式安裝Ceph 軟件時(shí),需要配置MON、MGR 和OSD 節(jié)點(diǎn)。由于OSD 節(jié)點(diǎn)實(shí)際存儲(chǔ)數(shù)據(jù)的進(jìn)程,因此在每個(gè)存儲(chǔ)節(jié)點(diǎn)上都需要進(jìn)行配置;MON 節(jié)點(diǎn)負(fù)責(zé)維護(hù)整個(gè)集群的狀態(tài),MGR 監(jiān)控集群的狀態(tài)并將一些數(shù)據(jù)暴露給外界,因此MON 節(jié)點(diǎn)和MGR 節(jié)點(diǎn)只需要在Master 節(jié)點(diǎn)配置。Ceph 同時(shí)提供塊、文件和對(duì)象存儲(chǔ)服務(wù),后續(xù)可利用Ceph 提供的接口根據(jù)需要選擇合適的服務(wù)。
2.3.2 Seaflie 安裝
安裝Seafile 的前期需要關(guān)閉防火墻,以便安裝MySQL或MariaDB 數(shù)據(jù)庫(kù)。進(jìn)行基本配置后還需要配置nginx 反向代理Seahub,同時(shí)啟動(dòng)Seafile 和Seahub 并訪問(wèn)nginx 監(jiān)聽的IP 地址和端口號(hào)。
操作系統(tǒng)的開發(fā)測(cè)試環(huán)境一般布置得比較集中,以便于管理,易于采集出現(xiàn)故障的現(xiàn)場(chǎng)信息,甚至在恢復(fù)(Recover)的現(xiàn)場(chǎng)直接調(diào)試軟件,例如SSH 和遠(yuǎn)程桌面均需要在局域網(wǎng)下通過(guò)IP 地址進(jìn)行連接。本文對(duì)實(shí)驗(yàn)環(huán)境的最重要訴求為隨時(shí)隨地訪問(wèn)參與測(cè)試的機(jī)器。目前實(shí)驗(yàn)系統(tǒng)均處于同一局域網(wǎng)中,為使外網(wǎng)能訪問(wèn)到局域網(wǎng)內(nèi)部設(shè)備,一般需要將設(shè)備的私有IP 變?yōu)楣W(wǎng)IP。然而,為每一臺(tái)機(jī)器都申請(qǐng)一個(gè)公網(wǎng)IP 十分困難,也不必要,本文實(shí)驗(yàn)平臺(tái)通過(guò)內(nèi)網(wǎng)穿透實(shí)現(xiàn)這一目的。
實(shí)現(xiàn)內(nèi)網(wǎng)穿透的方法很多[21],本文使用Frp 進(jìn)行反向代理的方案,該方案需要一臺(tái)帶有公網(wǎng)IP 的云服務(wù)器,本實(shí)驗(yàn)選擇阿里云服務(wù)器。不同應(yīng)用占用的端口不同,例如SSH 需要使用22 號(hào)端口,遠(yuǎn)程桌面的RDP 占用3389 號(hào)端口,自建Web 服務(wù)一般占用80/443 端口,將工作站作為上外網(wǎng)的代理服務(wù)器則需要1080 端口等,因此可以通過(guò)開放不同的端口釋放不同的功能。
利用Frp 進(jìn)行反向代理的優(yōu)點(diǎn)是完全可控,可隨意配置端口進(jìn)行穿透,還可以實(shí)現(xiàn)端口復(fù)用。多個(gè)服務(wù)都是通過(guò)公網(wǎng)服務(wù)器的某個(gè)端口暴露,速度與云服務(wù)器帶寬有關(guān)。frp 工具分為frps(server)和frpc(client)兩個(gè)包,分別安裝于公網(wǎng)云服務(wù)器和需要被外網(wǎng)訪問(wèn)的各RPi 實(shí)驗(yàn)平臺(tái)。
為避免出現(xiàn)不兼容問(wèn)題,統(tǒng)一選用0.32 版本的frp 工具。阿里云服務(wù)器的操作系統(tǒng)和內(nèi)網(wǎng)操作系統(tǒng)分別采用Ubuntu 和AArch64 架構(gòu)的openEuler,因此分別選用AMD 和ARM64 版本處理器。在實(shí)際搭建時(shí),應(yīng)關(guān)閉防火墻和開放端口,保證兩者暢通。通過(guò)Frp 的內(nèi)網(wǎng)穿透可實(shí)現(xiàn)對(duì)局域網(wǎng)內(nèi)部所有在線RPi 實(shí)驗(yàn)平臺(tái)的隨時(shí)遠(yuǎn)程訪問(wèn),同時(shí)也便于對(duì)性能測(cè)試的集中管理。
實(shí)驗(yàn)開始時(shí),首先在PC 機(jī)上登錄客戶端軟件,通過(guò)互聯(lián)網(wǎng)訪問(wèn)在線RPi 實(shí)驗(yàn)平臺(tái)作為測(cè)試對(duì)象。使用Loadrunner 或網(wǎng)頁(yè)加壓程序?qū)ζ溥M(jìn)行加壓,逐漸模擬用戶端的數(shù)目,對(duì)其進(jìn)行檢測(cè),觀察測(cè)試對(duì)象是否出現(xiàn)死機(jī)現(xiàn)象,同時(shí)在客戶機(jī)器上進(jìn)行性能監(jiān)控,抓取測(cè)試對(duì)象的磁盤I/O 吞吐性能參數(shù)。
本文設(shè)計(jì)的RPi 實(shí)驗(yàn)平臺(tái)可用于對(duì)openEuler 各項(xiàng)性能指標(biāo)的分布式測(cè)試,包括但不限于:
(1)源碼編譯、安裝源的可獲得性評(píng)價(jià)。測(cè)試環(huán)境涉及到openEuler 與應(yīng)用軟件的安裝,有很多安裝是基于源碼且隨機(jī)發(fā)生的,這將為評(píng)價(jià)openEuler 的資源分發(fā)能力提供數(shù)據(jù)支持。
(2)云盤穩(wěn)定性。利用Seafile 的客戶端能力,在測(cè)試管理端隨機(jī)向云盤存儲(chǔ)文件,通過(guò)不同客戶端的數(shù)據(jù)同步能力判斷云盤服務(wù)的穩(wěn)定性和效率,這是一個(gè)功能與效率的復(fù)合測(cè)試。
(3)系統(tǒng)連續(xù)開機(jī)能力。定時(shí)將/proc 目錄中的部分內(nèi)容傳輸給實(shí)驗(yàn)管理服務(wù)器,用于判斷測(cè)試機(jī)器的運(yùn)行情況。
(4)網(wǎng)絡(luò)基準(zhǔn)測(cè)試。通過(guò)不同客戶端從測(cè)試管理端收取數(shù)據(jù)包,觀察傳輸速度、時(shí)間以及數(shù)據(jù)大小等指標(biāo),判斷網(wǎng)絡(luò)傳輸中的系統(tǒng)穩(wěn)定性。
針對(duì)目前開源操作系統(tǒng)openEuler 未曾向開源社區(qū)人員提供系統(tǒng)的分布式測(cè)試平臺(tái)這一問(wèn)題,本文在RPi 上安裝openEuler,并在其上安裝Ceph、Seafile 以搭建基礎(chǔ)分布式環(huán)境,通過(guò)安裝Frp 進(jìn)行內(nèi)網(wǎng)穿透,利用成熟的軟件系統(tǒng)檢驗(yàn)操作系統(tǒng)及其應(yīng)用軟件運(yùn)行的穩(wěn)定性。該平臺(tái)避免了以往僅在事先制定的測(cè)試用例集上進(jìn)行系統(tǒng)測(cè)試的短板,更能體現(xiàn)用戶應(yīng)用場(chǎng)景的隨機(jī)性。該平臺(tái)易于使用、成本低廉,因此能在開源社區(qū)和學(xué)生實(shí)驗(yàn)中推廣。然而,該平臺(tái)在系統(tǒng)性能方面的測(cè)試尚不全面,未來(lái)將著重研究如何對(duì)系統(tǒng)性能進(jìn)行更完善的測(cè)試與評(píng)價(jià)。