SSD固態盤應用於Ceph集群的四種典型使用場景


在虛擬化及雲計算技術大規模應用於企業數據中心的科技潮流中,存儲性能無疑是企業核心應用是否虛擬化、雲化的關鍵指標之一。傳統的做法是升級存儲設備,但這沒解決根本問題,性能和容量不能兼顧,並且解決不好設備利舊問題。因此,企業迫切需要一種大規模分布式存儲管理軟件,能充分利用已有硬件資源,在可控成本范圍內提供最佳的存儲性能,並能根據業務需求變化,從容量和性能兩方面同時快速橫向擴展。這就是Server SAN興起的現實基礎。

Ceph作為Server SAN的最典型代表,可對外提供塊、對象、文件服務的分布式統一存儲系統,不可避免成為關注熱點,越來越多的企業在生產環境部署和使用Ceph集群,截止今年4月份為止,雲計算提供商DreamHost、歐洲核子研究中心CERN等企業已有3PB規模數據量的Ceph生產環境。

Ceph先進的架構,加上SSD固態盤,特別是高速PCIe SSD帶來的高性能,無疑將成為Ceph部署的典型場景。同時,由於SSD相對昂貴的價格及企業已有設備的利舊考慮,如何控制成本,利用少量的SSD盤來達到關鍵業務(如電信計費系統的數據庫業務等)對性能的要求,做到性能和成本的最佳平衡點,是用好Ceph的關鍵。下面討論Ceph集群中SSD盤四種典型使用場景:

1. 作為OSD的日志盤

Ceph使用日志來提高性能及保證數據一致性。使用快速的SSD作為OSD的日志盤來提高集群性能是SSD應用於Ceph環境中最常見的使用場景。由於OSD日志讀寫的特點,在選擇SSD盤時,除了關注IOPS性能外,要重點注意以下3個方面:

1)寫密集場景

OSD日志是大量小數據塊、隨機IO寫操作。選購SSD作為日志盤,需要重點關注隨機、小塊數據、寫操作的吞吐量及IOPS;當一塊SSD作為多個OSD的日志盤時,因為涉及到多個OSD同時往SSD盤寫數據,要重點關注順序寫的帶寬。

2)分區對齊

在對SSD分區時,使用Parted進行分區並保證4KB分區對齊,避免分區不當帶來的性能下降。

3)O_DIRECT和O_DSYNC寫模式及寫緩存

由Ceph源碼可知(ceph/src/os/FileJournal.cc),OSD在寫日志文件時,使用的flags是:

  1. flags |= O_DIRECT | O_DSYNC 

O_DIRECT表示不使用Linux內核Page Cache; O_DSYNC表示數據在寫入到磁盤后才返回。

由於磁盤控制器也同樣存在緩存,而Linux操作系統不負責管理設備緩存,O_DSYNC在到達磁盤控制器緩存之后會立即返回給調用者,並無法保證數據真正寫入到磁盤中,Ceph致力於數據的安全性,對用來作為日志盤的設備,應禁用其寫緩存。(# hdparm -W 0 /dev/hda 0)

使用工具測試SSD性能時,應添加對應的flag:dd … oflag=direct,dsync; fio … —direct=1, —sync=1…

2. 與SATA、SAS硬盤混用,但獨立組成全SSD的Pool

基本思路是編輯CRUSH MAP,先標示出散落在各存儲服務器的SSD OSD以及硬盤OSD(host元素),再把這兩種類型的OSD聚合起來形成兩種不同的數據根(root元素),然后針對兩種不同的數據源分別編寫數據存取規則(rule元素),最后,創建SSD Pool,並指定其數據存取操作都在SSD OSD上進行。

在該場景下,同一個Ceph集群里存在傳統機械盤組成的存儲池,以及SSD組成的快速存儲池,可把對讀寫性能要求高的數據存放在SSD池,而把備份數據存放在普通存儲池。

對應於Ceph作為OpenStack里統一存儲后端,各組件所使用的四個存儲池:Glance Pool存放鏡像及虛擬機快照、Nova Pool存放虛擬機系統盤、Cinder Volume Pool存放雲硬盤及雲硬盤快照、Cinder Backup Pool存放雲硬盤備份,可以判斷出,Nova及Cinder Volume存儲池對IO性能有相對較高的要求,並且大部分都是熱數據,可存放在SSD Pool;而Glance和Cinder Backup存儲池作為備份冷數據池,對性能要求相對較低,可存放在普通存儲池。

這種使用場景,SSD Pool里的主備數據都是在SSD里,但正常情況下,Ceph客戶端直接讀寫的只有主數據,這對相對昂貴的SSD來說存在一定程度上的浪費。這就引出了下一個使用場景—配置CRUSH數據讀寫規則,使主備數據中的主數據落在SSD的OSD上。

Ceph里的命令操作不詳細敘述,簡單步驟示例如下:

1)標示各服務器上的SSD與硬盤OSD

  1. # SAS HDD OSD 
  2. host ceph-server1-sas { 
  3. id -
  4. alg straw 
  5. hash 
  6. item osd.0 weight 1.000 
  7. item osd.1 weight 1.000 
  8. … 
  9. # SSD OSD 
  10. host ceph-server1-ssd { 
  11. id -
  12. alg straw 
  13. hash 
  14. item osd.2 weight 1.000 
  15. … 

2) 聚合OSD,創建數據根

  1. root sas { 
  2. id -
  3. alg straw 
  4. hash 
  5. item ceph-server1-sas 
  6. … 
  7. item ceph-servern-sas 
  8. root ssd { 
  9. id -
  10. alg straw 
  11. hash 
  12. item ceph-server1-ssd 
  13. … 
  14. item ceph-servern-ssd 

3)創建存取規則

  1. rule sas { 
  2. ruleset 
  3. type replicated 
  4. … 
  5. step take sas 
  6. step chooseleaf firstn 0 type host 
  7. step emit 
  8. rule ssd { 
  9. ruleset 
  10. type replicated 
  11. … 
  12. step take ssd 
  13. step chooseleaf firstn 0 type host 
  14. step emit 

4)編譯及使用新的CRUSH MAP

  1. # crushtool -c ssd_sas_map.txt -o ssd_sas_map 
  2. # ceph osd setcrushmap -i ssd_sas_map 

5)創建Pool並指定存取規則

  1. # ceph osd pool create ssd 4096 4096 
  2. # ceph osd pool set ssd crush_ruleset 

3. 配置CRUSH數據讀寫規則,使主備數據中的主數據落在SSD的OSD上

該場景基本思路和第二種類似,SATA/SAS機械盤和SSD混用,但SSD的OSD節點不用來組成獨立的存儲池,而是配置CURSH讀取規則,讓所有數據的主備份落在SSD OSD上。Ceph集群內部的數據備份從SSD的主OSD往非SSD的副OSD寫數據。

這樣,所有的Ceph客戶端直接讀寫的都是SSD OSD 節點,既提高了性能又節約了對OSD容量的要求。

配置重點是CRUSH讀寫規則的設置,關鍵點如下:

  1. rule ssd-primary { 
  2. ruleset 
  3. … 
  4. step take ssd 
  5. step chooseleaf firstn 1 type host #從SSD根節點下取1個OSD存主數據 
  6. step emit 
  7. step take sas 
  8. step chooseleaf firstn -1 type host #從SAS根節點下取其它OSD節點存副本數據 
  9. step emit 

4. 作為Ceph Cache Tiering技術中的Cache層

Cache Tiering的基本思想是冷熱數據分離,用相對快速/昂貴的存儲設備如SSD盤,組成一個Pool來作為Cache層,后端用相對慢速/廉價的設備來組建冷數據存儲池。

Ceph Cache Tiering Agent處理緩存層和存儲層的數據的自動遷移,對客戶端透明操作透明。Cahe層有兩種典型使用模式:

1)Writeback模式

Ceph客戶端直接往Cache層寫數據,寫完立即返回,Agent再及時把數據遷移到冷數據池。當客戶端取不在Cache層的冷數據時,Agent負責把冷數據遷移到Cache層。也就是說,Ceph客戶端直接在Cache層上進行IO讀寫操作,不會與相對慢速的冷數據池進行數據交換。

這種模式適用於可變數據的操作,如照片/視頻編輯、電商交易數據等等。

2)只讀模式

Ceph客戶端在寫操作時往后端冷數據池直接寫,讀數據時,Ceph把數據從后端讀取到Cache層。

這種模式適用於不可變數據,如微博/微信上的照片/視頻、DNA數據、X射線影像等。

CRUSH算法是Ceph集群的核心,在深刻理解CRUSH算法的基礎上,利用SSD的高性能,可利用較少的成本增加,滿足企業關鍵應用對存儲性能的高要求。

附. 名詞解釋:

  • I. Ceph: 開源分布式統一存儲(塊、對象、文件)項目。
  • II. Ceph OSD:Ceph Object Store Device的縮寫,可以指Ceph里的一個存儲單元,也可以指Ceph里的OSD管理進程。每台服務器上可運行多個OSD進程,典型的Ceph集群由奇數個Monitor節點和多個OSD節點組成。
  • III. CRUSH:CRUSH算法是Ceph的核心模塊,它通過計算數據存儲位置來決定如何存取數據,同時也讓Ceph客戶端可以直接和各OSD節點通信而不是一個中心節點,這樣,避免了Ceph集群的單點故障、性能瓶頸,極大增強了線性擴展能力。
  • IV. SSD:Solid State Drive,固態盤,不解釋。
  • V. SATA/SAS/PCIe:不同數據總線接口。高端存儲里大部分存儲節點采用PCIe技術進行互聯;PCIe接口SSD也是大勢所趨。SATA和SAS,一個指令集是ATA,一個是SCSI,兩者都可用來作為機械盤或固態盤的接口。
  • VI. 幾種寫緩存模式:
  • Write-through:向高速Cache寫入數據時同時也往后端慢速設備寫一份,兩者都寫完才返回。
  • Write-back:向高速Cache寫完數據后立即返回,數據不保證立即寫入后端設備。給調用者的感覺是速度快,但需要額外的機制來防止掉電帶來的數據不一致。
  • none:禁用寫緩存,直接往Cache后端慢速設備寫數據。
  • 計算機內各級存儲設備都存在Cache機制(CPU寄存器->L1緩存->L2緩存->內存->設備控制器緩存->物理設備)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM