康克松,張慶海,信寄遙,趙正旭
(1.石家莊鐵道大學 信息科學與技術學院,河北 石家莊 050043;2.青島理工大學 機械與汽車工程學院,山東 青島 266071)
國內的電腦操作系統起步晚、生態不完善,同主流操作系統存在一定差距。但是,隨著國家對加快發展自主可控戰略高新技術和重要領域核心關鍵技術決策的提出,中國涌現出了像深度系統、中標麒麟、紅旗、UOS操作系統等一大批優秀的國產操作系統[1]。其中,UOS操作系統是一款通過統一多方平臺、整合各種資源,由多家操作系統核心企業共同打造的操作系統,相比其他操作系統具備界面美觀、操作靈活、性能穩定、生態良好等優點[1-2]。
該文對UOS國產操作系統現狀進行了調研分析,在該系統上使用Docker容器部署Ceph分布式存儲系統以及通過使用不同工具對其IO進行測試,得出各測試工具的優缺點,進而對國產操作系統進行推廣,以期為國產操作系統在民用辦公、科研應用領域提供有價值的參考。
統信操作系統UOS(Unity Operating System,簡稱統信UOS/UOS操作系統)是一款流暢方便、安全可靠、軟件生態相對完善的中文國產操作系統。統信UOS以Linux內核為基礎開發,具備統一的版本、統一的支撐平臺、標準規范,自帶統一的開發接口、應用商店和倉庫、文檔。在架構方面可支持X86、MIPS以及ARM三種架構,可支持配備龍芯、飛騰、海光、兆芯等國產芯片的電腦主機。
目前國產操作系統大都以開源的Linux系統為內核進行開發、漢化,雖然并沒有脫離原有的內核,但由于Linux擁有良好的生態,使得國產操作系統取得了一定的發展[3]。目前國內民用程度較高的幾款操作系統分別為銀河麒麟、中標麒麟、深度操作系統、UOS操作系統。其對比見表1。

表1 國產操作系統對比
通過表1對比可以得出,國產操作系統中UOS操作系統對于民用領域更加友好,擁有統一自帶的軟件商店、更符合國人使用習慣的操作界面,以及良好的軟件生態,這些優點完全可以滿足日常辦公和科研需要等場景的需求。
根據管理信息系統的硬件、軟件、數據等信息資源在空間的分布情況,系統的結構可分為集中式和分布式兩大類型。在討論分布式系統之前,首先需要了解與之對應的集中式系統。集中式系統是指由高性能、可擴充的計算機擔任中央處理節點,該節點連接許多終端,終端沒有對數據分析和處理的能力,僅負責對數據進行錄入和輸出,其完全依附于中央處理節點,所有的運算、指令和存儲都集中于中央處理節點[4-6]。
由于所有運算均由中央處理節點完成,終端必須通過網絡進行讀取,網絡的速度瓶頸會限制信息處理速度。另外采用單機部署導致擴展性差,當終端數量過多、數據量越來越大時,中央處理節點的性能將是系統負載能力的最大瓶頸,而且當中央處理節點發生單點故障時會導致整個系統癱瘓[7]。
如今互聯網的信息呈指數增長,集中式系統的缺點被無限放大,此時分布式系統應運而生。分布式系統將集中式系統中央處理節點的任務分散給系統中相應節點,實現不同功能的節點之間相互協調,共享系統外設與軟件。去中心化的特性使分布式系統具備高可靠性、高容錯性、可擴展性、高性能和開放性的特點。
分布式存儲正是基于分布式系統搭建的去中心化存儲系統,該系統可以利用多臺存儲服務器分擔存儲負荷,并將分散的存儲資源抽象為一個虛擬存儲池,從而提高整體利用率。它不僅提高了系統的可靠性、可用性和存取效率,而且易于擴展,將增加硬件設備時的不穩定因素降到最低,分布式存儲具有高性能、支持分級存儲、多副本一致性、容災與備份、彈性擴展和存儲系統標準化的特點。
Ceph摒棄了傳統的集中式存儲元數據方案,是一種具有高擴展、高可用、高性能,能夠同時提供對象存儲、塊存儲和文件系統存儲三種存儲服務的開源分布式存儲系統。同其他存儲相比,Ceph的優勢不只是可以實現分布式的存儲,同時還能夠充分利用存儲節點上的計算力,在存儲數據時利用負載均衡策略,計算得出每個數據片應該存儲的位置,盡量將數據分布均衡。同時Ceph采用了CRUSH算法、Poxos一致性算法、HASH算法等優化方法,使得它不會出現集中式存儲中的單點故障,且隨著系統橫向規模的擴大,Ceph性能也并不會受到影響[8]。相比其他分布式存儲,Ceph具備以下優點:
(1)統一存儲:Ceph的底層是一個分布式文件系統,但其上層開發了支持對象和塊的接口。所以Ceph可以成為目前最主流的統一開源存儲軟件。
(2)高擴展性:Ceph使用去中心化分布式存儲系統,接口統一,擴展靈活,且性能隨節點增加而線性增長。
(3)高可用性:Ceph副本數可靈活控制,支持故障域分隔和數據的強一致性,不會出現單點故障,可根據節點狀態實現自動管理。
(4)高性能:得益于CRUSH算法,使得Ceph數據分布均衡,并行度高,并且可以實現各類負載的副本放置規則,能夠支持上千個存儲節點,支持TB到PB級的規模。
Ceph的這些特性,也得益于其優異結構,圖1為經典的Ceph模塊架構。

圖1 Ceph基礎架構
Ceph的核心組件由Monitor、OSD、MDS、Object、PG組成,其中Monitor為守護節點,每隔一定時間同各存儲節點發送心跳信號,用于檢測整個系統運行情況,并做出回應;OSD(Object Storage Device)為存儲節點,負責數據的復制、恢復、回填、再均衡,當存儲主副本的OSD節點發生宕機,會向Monitor節點提供監控信息;MDS(Ceph Metadata Server)為元服務器節點,配合Ceph的文件系統服務使用,用于保存文件系統的元數據;Object是數據存儲的基本單元,一般默認大小為4 M;PG(Placement Groups)是組成存儲池的基本單元,記錄PG與OSD間的映射關系。
容器完全使用沙箱機制,其本質為一個特殊的進程,容器內包含運行該程序所需的環境,不同容器之間沒有任何接口[9]。容器技術在操作系統層面上對運行環境進行再封裝,每個容器包含運行該應用的所有環境,創建的每個實例僅僅包含需要的應用程序和必要的依賴庫。其中Docker 是基于容器的平臺,允許高度可移植的工作負載,是一種可以將應用程序與基礎架構分開,從而快速交互的基于Go語言的開源容器引擎[10-11]。Docker可以通過將應用程序打包為一個鏡像從而簡化部署多種應用實例,可以在開發人員的本機、中心機房的服務器以及云服務或混合環境中運行[12-13]。
容器和Ceph的結合已經在一些生產環境中做了嘗試,容器的優點在于對應用程序及其運行環境的封裝,傳統的方式是集成為ISO,但該方式需要一定的維護量,而使用容器部署則會簡易很多。與Linux傳統的 yum 或 apt-get 管理工具不同,由于輕量級和快速部署的特性,Docker可以使用Docker stop或者Docker run來發布新的deamons版本,這樣使得軟件的升級和回卷變得容易,甚至可以在一臺物理機器上運行多個相互隔離的集群。這些都為實驗、開發過程提供了極大的便利。介于UOS操作系統多數版本無法支持Ceph-deploy快速安裝Ceph集群,而手動安裝(傳統部署方式)又費時費力的問題,該文提出了在UOS操作系統上使用Docker鏡像快速部署小規模Ceph集群的方法。使用Docker部署Ceph集群,在升級時根本不需要解決依賴包的問題,進而方便科研工作者的實驗測試以及有助于UOS國產操作系統的推廣。
一個Ceph存儲集群至少需要一個Ceph Monitor和兩個OSD守護進程。搭建運行Ceph文件系統時還需要部署一臺MDS節點。為了保證對整個集群的持續檢測,一般Monitor數量為:MonNumber=2*n+1。這是為了保證多個Monitor節點并行運行時,集群出現多個子集群同時服務的情況(防止子集群在選舉時,集群出現腦裂的情況)。在實驗環境中,為了保證整個系統的負載均衡和高可用性,多個OSD的守護進程不可以部署在一臺服務器的同一塊磁盤上,也不能將Monitor或者MDS與OSD守護進程部署在一臺服務器的同一塊磁盤上。
實驗環境搭建需四臺服務器,在安裝UOS Eagle 20操作系統的宿主機上,使用內裝UOS社區版本-Deepin GUN/Linux15系統的Docker部署Ceph分布式存儲系統。其中三臺每個節點各安裝16塊硬盤,分別為2塊SSD和14塊HHD,其中node1、node2和node3節點部署部署Monitor和OSD,每個節點中硬盤分配為規則為SSD作為日志盤,HHD作為存儲盤,node4分配一個SSD作為MDS節點。則Ceph集群中最終包含3個Monitor節點、42塊OSD磁盤以及1個MDS節點。集群具體配置如表2。

表2 Ceph集群配置信息
第一個節點在安裝Monitor過程中,需要docker run 時添加--net=host,用于暴露Docker主機網絡,部署其余兩個Monitor節點時,可以直接將/etc/ceph/ 和/var/lib/ceph/bootstrap-*目錄下的文件復制到其他主機即可。部署OSD時,先對磁盤進行格式化并掛載,隨后使用OSD_directory作為ceph/daemon的參數來啟動OS。CephClient用戶端在掛載Ceph集群之前,必須創建MDS管理節點,之后將Ceph的文件系統作為一個目錄掛在到客戶端CephClient的/cephfs目錄下,此時完成Ceph集群部署。
Ceph集群部署完成之后,調整配置文件對其進行調優,將參數調整為最合適目前場景的狀態,再通過ceph自帶和第三方IO測試工具,對其進行性能測試[14-15]。
本次實驗,使用ceph自帶的rados bench工具和rados los-gen對Rados性能進行測試,使用rbd bench-write工具對塊設備寫性能進行測試,使用fio+rbd ioengine和fio+libaio工具對RBD性能進行測試。測試工具的用途及語法如表3所示。
實驗中,所有的操作均在該環境的客戶端節點上進行,所有測試均為單線程測試。使用rbd bench-write工具進行測試時,默認IO單位為4 M,總寫入字節數為1 680 M;使用rados bench工具進行測試時,一次寫入的數據量大小為4 MB,測試所持續時間為20 s;使用rados load-gen工具進行測試時,測試對象的最小大小和最大大小均為1 G,壓測IO的最小大小和最大大小均為4 194 304,一次提交IO的吞吐量和歷史累計吞吐量上線均為1 G。使用fio工具進行測試時,塊大小為4 M,總測試數據量大小為1 G。具體操作和結果如表4所示。

表3 測試工具

表4 實驗結果
由實驗結果可以得知,rados load-gen、rodos bench、rdb bench-write和 fio rbd/libaio 的結果都相差不大,使用時可根據實際情況選擇,與rados bench相比,rados load-gen的特點是可以產生混合類型的測試負載,而rados bench只能產生一種類型的負載。fio+rbd與fio+libaio總體性能相差不大,二者順序讀性能同為120 M/s,fio+rbd在順序寫與隨機寫速率上均比fio+libiaio快1 M/s,而fio+libaio的隨機讀效率更高,相比之下,fio+rbd性能更好。
Ceph分布式存儲系統組成較為復雜,在部署Ceph集群時,部分國產操作系統無法支持Ceph-Deploy相關的快速安裝工具,而手動部署效率太低。該文根據容器啟動速度快、持續集成和部署以及資源利用高效的特點,在UOS國產操作系統上將復雜的Ceph系統使用Docker進行快速部署[16]。經驗證,在UOS操作系統上使用Docker部署Ceph分布式存儲系統切實可行。通過Docker的鏡像機制,在首次創建時為每個核心組件創建鏡像,簡化了Ceph集群的搭建步驟,當集群數量變大時,可以利用容器生態圈內的容器便編排框架,將容器按照規則運行,進而極大地減少工作量[17]。
由于環境、測試方法和數據有限,不同環境下,每種測試工具可能與本次實驗所的結論不符,該文主要通過在同一場景下使用不同工具對Ceph進行測試,得出每種測試工具在該場景下的優缺點,為開發人員選擇測試工具提供了有價值的參考。