




摘要:分布式存儲是多云數據中心的重要產品。云原生應用迭代周期縮短,對存儲的容量和調整速度也有了更高的要求。目前,云原生存儲因其自身架構的高可擴展性、健壯性和高性能等優點已占領主流市場,但集群擴縮容導致存儲池長期處于數據遷移狀態,引發了性能耗損高、集群表現不穩定等影響業務體驗的問題。針對這些問題,該文提出一種優化算法,增加邏輯標簽機制動態映射存儲路徑到物理介質,使得增量數據在擴容的存儲介質落盤,避免大批量的數據遷移,讓云原生存儲可以在擴縮容場景下降低性能損耗和集群不穩定的概率。
關鍵詞:CRUSH;選擇器;云原生存儲
doi:10.3969/J.ISSN.1672-7274.2024.05.005
中圖分類號:TP 311.13" " " " " 文獻標志碼:A" " " " " " 文章編碼:1672-7274(2024)05-00-04
Research on Lossless Expansion Algorithm for Cloud Native Storage
CAI Xuhui, DONG Xiaoli, DING Weiran, CHEN Xi, ZHENG Qing
(China Mobile Communications Group Co., Ltd., Beijing 100032, China)
Abstract: Distributed storage is a common and important product in multi-cloud data centers. In the cloud native era, the application iteration cycle is shortened, and the storage capacity and adjustment speed are also higher requirements. Cloud-native storage occupies the mainstream market due to its high scalability, robustness, and high performance of its architecture. However, cluster expansion and shrinkage lead to long-term data migration in the storage pool, leading to high performance loss, unstable cluster performance and other problems affecting business experience. This paper proposes an optimization algorithm by adding a logical label mechanism to dynamically map storage paths to physical media. In this way, incremental data can be dumped onto the expanded storage medium, avoiding mass data migration, and reducing the performance loss and cluster instability probability of the cloud native storage in the expansion or reduction scenario.
Keywords: CRUSH; selector; cloud-native storage
1" "簡介
對于云原生架構服務來說,存儲系統的對象數據放置方式對于可擴展性非常重要。去中心化的分布式存儲方案分散放置在存儲介質上,客戶端可以通過哈希計算快速定位存儲介質位置來直接訪問對象。Ceph是一個基于CRUSH的存儲系統,它通過算法限制遷移速率,如果寫入對象正在等待遷移,則執行對原OSD的寫入[1]。但是所有對象副本最終都會不受控制遷移到CRUSH算法計算的目標OSD,導致明顯的性能下降。
本文對原生CRUSH算法進行優化,通過設置標簽將底層存儲PG結構和上層掛載目錄進行動態關聯,通過標簽將物理集群劃分成若干個邏輯子集群,一個標簽對應一個邏輯子樹,標簽可以控制從對象到子樹的映射。子樹內部調整不干擾其余PG,實現數據遷移可控。實驗結果表明,擴容場景下,優化后的無損算法在尾部延遲方面比原生Ceph高出4倍以上。
2" "背景
2.1 云原生存儲架構
云原生是在云計算環境中構建、部署和管理應用的架構。云原生軟件應用具有高度可擴展、靈活且迭代快速的特點,因此也對存儲提出更高的需求。主流云原生存儲方案有三類。第一類是公有云存儲。公有云服務提供商提供包括對象存儲、塊存儲、文件存儲、數據庫等云存儲服務。公有云存儲超大體量的規模優勢能滿足業務各種需求,讓用戶在使用存儲資源時專注業務邏輯,對底層存儲無感知。第二類是本地混合存儲。數據庫或緩存等業務對存儲性能有較高要求,選擇使用性能表現更優的本地集中式存儲更加適合。第三類是自建存儲。業務方通過開源存儲方案,結合業務需求進行方案選擇。文件存儲多使用CephFS、NFS等,塊存儲多使用RBD、SAN等。自建方案技術成熟,但在業務高可靠、高性能場景上需自研改造,運維難度較高。對于存量業務而言,在選型階段多選擇如開源的Ceph存儲自建,以滿足多種異構架構的存儲和軟件版本的兼容性要求。
2.2 云原生存儲核心算法
Ceph采用的CRUSH算法采用了三級存儲層次結構:根目錄root、節點shelf、數據盤OSD,稱為存儲桶[2]。如圖1所示。CRUSH將對象副本放置到OSD上主要有兩個步驟。
(1)通過計算對象名稱哈希的模將對象分類到對應的PG:
(1)
(2)單個PG中的對象數據按照CRUSH算法映射到一系列的OSD上。第一步類似于傳統的散列,圖1描述了放置過程。第一步:鎖定root,并將其用作后續操作的輸入。第二步:重復計算公式(1),以選擇3個滿足故障域的機柜,進行三向復制,選擇算法為:
(2)
式中,為放置位置的集合;是輸入PG的ID號;r是計算的參數;HASH是一個三輸入哈希函數;和W分別是項目的ID號和權重。要選擇個不同的項目,可以執行公式(1)超過次,因為公式(1)的輸出可能已經在之前的計算中選擇了,或者所選項目可能操作失敗或者過載。類似地,后續操作選擇存儲節點和OSD遵循公式(1)在三個機柜中的每一個下面選擇節點和OSD。最終結果是圖1中的三個深色OSD。
2.3 CRUSH算法主要缺點
CRUSH算法可以將數據均勻分布在存儲介質的特性會在擴容態引發大量的數據遷移,這將不可避免地導致整個遷移期間的性能下降。
對于該問題,Ceph在底層設計引入了PG邏輯概念。用戶數據抽象成Object概念,類似分片,但以此直接管理太過瑣碎,所以引入PG概念。PG包含多個OSD。將一系列Object聚合到PG里面,并將PG映射到一組OSD,可以提升性能和管理能力。
Ceph還設置數據回填最大數量參數在數據遷移的性能下降程度和持續時長之間做權衡,默認值為1,即數據遷移優先級最低,保證存儲使用期間的性能折損最小,用戶體驗最佳。代價是延長了遷移時間,集群長期處于不穩定狀態[3]。
3" "設計詳情
3.1 無損擴容算法
整體思路是運用label標簽對業務進行分類,在邏輯層對業務隔離,充分利用存儲的容量,擴容的新數據可以安排到物理擴容的OSD落盤,隨著系統的使用,可根據需要執行數據label標簽的調整,最終達到負載均衡的目的。
擴容時,集群生成一定數量的新PG,每個PG都自帶一個label屬性,屬性默認值為空。PG寫入標簽信息,標簽內容根據業務自定義。算法將會通過PG的label標簽將PG在邏輯上進行分類。我們在頂層root之上添加selector選擇器。選擇器的作用有兩個:一是將label標簽和PG集合進行關聯映射。選擇器記錄PG的label標簽全集以及分布情況,如果存在一個label值,可以快速定位PG集合。二是將label標簽和文件路徑進行關聯映射,如果客戶端在打開文件時讀取文件元數據,解析文件路徑,快速定位到label標簽。這樣,通過label標簽將一個集群邏輯上劃分成若干個子集群,構建了虛擬root根節點。
當selector接收到數據對象時,會讀取selector選擇器內部的關聯映射表,將數據對象發往具有這些label標簽的PG,從而實現PG在邏輯上的隔離。算法內部實際上PG到OSD磁盤的映射關系仍然保持原生關系不變。將一個文件file保存并寫入存儲分為如下三個步驟。
第一步:file到object。將用戶數據處理成object對象分片。
第二步:將對象數據映射到PG。當寫入/讀取一個對象object時,首先要根據這個對象的文件路徑在selector選擇器定位到label信息,根據label定位到對應子樹root,再計算對象o的PG的ID值:
(3)
式中,name是對象名稱;是第i個初始PG數,第j個為PG中最新生成的。是常量,因此從對象到PG的映射是不可變的。例如,假設圖2中data1、data2和data3分別為業務A、業務B和業務C創建后生成的。data1、data2和data3的對象將使用三個不同的分別計算它們所屬的PG。
第三步:將PG映射到OSD磁盤。數據分布策略通過原生select函數最終返回選中的OSD。
3.2 彈性擴縮容場景控制
通過root子樹優化了原有的PG和OSD的映射關系,無論是常規的擴容還是物理機房位置調整,可以使得擴容/調整的空間和新增/更改的數據對接,避免集群全部OSD數據盤參與到數據均衡的動作,從而解決了數據均衡這個步驟所導致的各種性能以及穩定性的問題。設計兩類策略動態調整存儲負載。
(1)PG動態映射。通過重新映射PG來控制對象數據遷移。每個PG和selector選擇器的標簽是一一對應的,通過操作標簽可以自由控制PG所屬的虛擬子樹。
(2)標簽調整。通過調整標簽進行PG的合并或拆分。當業務負載低于閾值時,需要從集群中移除物理設備來收縮集群。集群存在標簽為A、B、C的子樹,C負載降低,將C標簽更改為B,實現子樹之間合并,收縮后,此時標簽C會被邏輯保留,因此沒有物理設備或PG映射,其的值不會改變,不影響已落盤數據從對象到PG的映射關系。
4" "實驗測試
本節評估算法性能,并將其與Ceph性能比較。測試平臺由四臺機器組成,其中三臺運行存儲服務器,另一臺運行測試客戶端。每臺機器硬件配置相同。每臺節點安裝了4個6 TB的HDD數據盤,且都被視為獨立故障域。客戶端通過fio工具進行benchmark測試。Ceph文件存儲的參數數據回填最大數量調整為10,提高數據遷移的優先級,體現本優化算法和原生算法之間的差異度。其余保持默認。初始集群填充800 GB測試數據。通過分別向集群中的每個節點添加一個和兩個數據盤來模擬擴容場景。
通過I/O延遲和IOPS指標評估運行性能。I/O大小為4 KB。在延遲和IOPS測試指標中,iodepth分別為1和128。第99個百分位尾部延遲的評估結果可以得出結論:改良后性能比原始CRUSH算法高出了4倍多,原始算法遷移操作嚴重阻礙了I/O請求。改良算法IOPS均值指標優于原始CRUSH算法高達74.3%,因為原始CRUSH算法的數據遷移與正常的I/O請求沖突。
將擴容的新盤刪除模擬縮容,改良算法的性能明顯優于原始算法。在原始算法中刪除OSD將導致全集群權重發生變化,而本優化算法不會導致子樹的范圍之外的OSD遷移。
5" "結束語
CRUSH算法實現了高擴展性、健壯性和高性能,在存儲系統中廣泛采取了此方案,但在目前云原生架構下,存儲集群因為需求的不斷變更從而進行擴縮容等操作,不可避免造成數據遷移等問題。本文提供了一種免于數據遷移的改進算法,通過借鑒云原生中常見的打標簽的方式對存儲集群的PG進行邏輯隔離,將業務數據與分布式存儲進行了智能關聯。這種方案包含了去中心化和集中式方法的優點,通過引入標簽分類機制對存儲空間映射來控制數據遷移,同時仍保留CRUSH算法的隨機性和一致性。
參考文獻
[1] Sage A Weil,Scott A Brandt, Ethan L Miller, Darrell DE Long,and Carlos Maltzahn. Ceph: A Scalable,High-Performance Distributed File System[C].In Proceedings of the 7th symposium on Operating systems design and implementation,2006.
[2] 楊飛,朱志祥,梁小江.基于Ceph對象存儲集群的高可用設計與實現[J].微電子學與計算機,2016(1):60-64.
[3] 張曉,張思蒙,石佳,等.Ceph分布式存儲系統性能優化技術研究綜述[J].計算機科學,2021(2):1-12.