SSD固態(tài)盤應(yīng)用于Ceph集群的四種典型使用場景
在虛擬化及云計(jì)算技術(shù)大規(guī)模應(yīng)用于企業(yè)數(shù)據(jù)中心的科技潮流中,存儲(chǔ)性能無疑是企業(yè)核心應(yīng)用是否虛擬化、云化的關(guān)鍵指標(biāo)之一。傳統(tǒng)的做法是升級(jí)存儲(chǔ)設(shè)備,但這沒解決根本問題,性能和容量不能兼顧,并且解決不好設(shè)備利舊問題。因此,企業(yè)迫切需要一種大規(guī)模分布式存儲(chǔ)管理軟件,能充分利用已有硬件資源,在可控成本范圍內(nèi)提供***的存儲(chǔ)性能,并能根據(jù)業(yè)務(wù)需求變化,從容量和性能兩方面同時(shí)快速橫向擴(kuò)展。這就是Server SAN興起的現(xiàn)實(shí)基礎(chǔ)。
Ceph作為Server SAN的最典型代表,可對(duì)外提供塊、對(duì)象、文件服務(wù)的分布式統(tǒng)一存儲(chǔ)系統(tǒng),不可避免成為關(guān)注熱點(diǎn),越來越多的企業(yè)在生產(chǎn)環(huán)境部署和使用Ceph集群,截止今年4月份為止,云計(jì)算提供商DreamHost、歐洲核子研究中心CERN等企業(yè)已有3PB規(guī)模數(shù)據(jù)量的Ceph生產(chǎn)環(huán)境。
Ceph先進(jìn)的架構(gòu),加上SSD固態(tài)盤,特別是高速PCIe SSD帶來的高性能,無疑將成為Ceph部署的典型場景。同時(shí),由于SSD相對(duì)昂貴的價(jià)格及企業(yè)已有設(shè)備的利舊考慮,如何控制成本,利用少量的SSD盤來達(dá)到關(guān)鍵業(yè)務(wù)(如電信計(jì)費(fèi)系統(tǒng)的數(shù)據(jù)庫業(yè)務(wù)等)對(duì)性能的要求,做到性能和成本的***平衡點(diǎn),是用好Ceph的關(guān)鍵。下面討論Ceph集群中SSD盤四種典型使用場景:
1. 作為OSD的日志盤
Ceph使用日志來提高性能及保證數(shù)據(jù)一致性。使用快速的SSD作為OSD的日志盤來提高集群性能是SSD應(yīng)用于Ceph環(huán)境中最常見的使用場景。由于OSD日志讀寫的特點(diǎn),在選擇SSD盤時(shí),除了關(guān)注IOPS性能外,要重點(diǎn)注意以下3個(gè)方面:
1)寫密集場景
OSD日志是大量小數(shù)據(jù)塊、隨機(jī)IO寫操作。選購SSD作為日志盤,需要重點(diǎn)關(guān)注隨機(jī)、小塊數(shù)據(jù)、寫操作的吞吐量及IOPS;當(dāng)一塊SSD作為多個(gè)OSD的日志盤時(shí),因?yàn)樯婕暗蕉鄠€(gè)OSD同時(shí)往SSD盤寫數(shù)據(jù),要重點(diǎn)關(guān)注順序?qū)懙膸挕?/p>
2)分區(qū)對(duì)齊
在對(duì)SSD分區(qū)時(shí),使用Parted進(jìn)行分區(qū)并保證4KB分區(qū)對(duì)齊,避免分區(qū)不當(dāng)帶來的性能下降。
3)O_DIRECT和O_DSYNC寫模式及寫緩存
由Ceph源碼可知(ceph/src/os/FileJournal.cc),OSD在寫日志文件時(shí),使用的flags是:
- flags |= O_DIRECT | O_DSYNC
O_DIRECT表示不使用Linux內(nèi)核Page Cache; O_DSYNC表示數(shù)據(jù)在寫入到磁盤后才返回。
由于磁盤控制器也同樣存在緩存,而Linux操作系統(tǒng)不負(fù)責(zé)管理設(shè)備緩存,O_DSYNC在到達(dá)磁盤控制器緩存之后會(huì)立即返回給調(diào)用者,并無法保證數(shù)據(jù)真正寫入到磁盤中,Ceph致力于數(shù)據(jù)的安全性,對(duì)用來作為日志盤的設(shè)備,應(yīng)禁用其寫緩存。(# hdparm -W 0 /dev/hda 0)
使用工具測試SSD性能時(shí),應(yīng)添加對(duì)應(yīng)的flag:dd … oflag=direct,dsync; fio … —direct=1, —sync=1…
#p#
2. 與SATA、SAS硬盤混用,但獨(dú)立組成全SSD的Pool
基本思路是編輯CRUSH MAP,先標(biāo)示出散落在各存儲(chǔ)服務(wù)器的SSD OSD以及硬盤OSD(host元素),再把這兩種類型的OSD聚合起來形成兩種不同的數(shù)據(jù)根(root元素),然后針對(duì)兩種不同的數(shù)據(jù)源分別編寫數(shù)據(jù)存取規(guī)則(rule元素),***,創(chuàng)建SSD Pool,并指定其數(shù)據(jù)存取操作都在SSD OSD上進(jìn)行。
在該場景下,同一個(gè)Ceph集群里存在傳統(tǒng)機(jī)械盤組成的存儲(chǔ)池,以及SSD組成的快速存儲(chǔ)池,可把對(duì)讀寫性能要求高的數(shù)據(jù)存放在SSD池,而把備份數(shù)據(jù)存放在普通存儲(chǔ)池。
對(duì)應(yīng)于Ceph作為OpenStack里統(tǒng)一存儲(chǔ)后端,各組件所使用的四個(gè)存儲(chǔ)池:Glance Pool存放鏡像及虛擬機(jī)快照、Nova Pool存放虛擬機(jī)系統(tǒng)盤、Cinder Volume Pool存放云硬盤及云硬盤快照、Cinder Backup Pool存放云硬盤備份,可以判斷出,Nova及Cinder Volume存儲(chǔ)池對(duì)IO性能有相對(duì)較高的要求,并且大部分都是熱數(shù)據(jù),可存放在SSD Pool;而Glance和Cinder Backup存儲(chǔ)池作為備份冷數(shù)據(jù)池,對(duì)性能要求相對(duì)較低,可存放在普通存儲(chǔ)池。
這種使用場景,SSD Pool里的主備數(shù)據(jù)都是在SSD里,但正常情況下,Ceph客戶端直接讀寫的只有主數(shù)據(jù),這對(duì)相對(duì)昂貴的SSD來說存在一定程度上的浪費(fèi)。這就引出了下一個(gè)使用場景—配置CRUSH數(shù)據(jù)讀寫規(guī)則,使主備數(shù)據(jù)中的主數(shù)據(jù)落在SSD的OSD上。
Ceph里的命令操作不詳細(xì)敘述,簡單步驟示例如下:
1)標(biāo)示各服務(wù)器上的SSD與硬盤OSD
- # SAS HDD OSD
- host ceph-server1-sas {
- id -2
- alg straw
- hash 0
- item osd.0 weight 1.000
- item osd.1 weight 1.000
- …
- }
- # SSD OSD
- host ceph-server1-ssd {
- id -2
- alg straw
- hash 0
- item osd.2 weight 1.000
- …
- }
2) 聚合OSD,創(chuàng)建數(shù)據(jù)根
- root sas {
- id -1
- alg straw
- hash 0
- item ceph-server1-sas
- …
- item ceph-servern-sas
- }
- root ssd {
- id -1
- alg straw
- hash 0
- item ceph-server1-ssd
- …
- item ceph-servern-ssd
- }
3)創(chuàng)建存取規(guī)則
- rule sas {
- ruleset 0
- type replicated
- …
- step take sas
- step chooseleaf firstn 0 type host
- step emit
- }
- rule ssd {
- ruleset 1
- type replicated
- …
- step take ssd
- step chooseleaf firstn 0 type host
- step emit
- }
4)編譯及使用新的CRUSH MAP
- # crushtool -c ssd_sas_map.txt -o ssd_sas_map
- # ceph osd setcrushmap -i ssd_sas_map
5)創(chuàng)建Pool并指定存取規(guī)則
- # ceph osd pool create ssd 4096 4096
- # ceph osd pool set ssd crush_ruleset 1
#p#
3. 配置CRUSH數(shù)據(jù)讀寫規(guī)則,使主備數(shù)據(jù)中的主數(shù)據(jù)落在SSD的OSD上
該場景基本思路和第二種類似,SATA/SAS機(jī)械盤和SSD混用,但SSD的OSD節(jié)點(diǎn)不用來組成獨(dú)立的存儲(chǔ)池,而是配置CURSH讀取規(guī)則,讓所有數(shù)據(jù)的主備份落在SSD OSD上。Ceph集群內(nèi)部的數(shù)據(jù)備份從SSD的主OSD往非SSD的副O(jiān)SD寫數(shù)據(jù)。
這樣,所有的Ceph客戶端直接讀寫的都是SSD OSD 節(jié)點(diǎn),既提高了性能又節(jié)約了對(duì)OSD容量的要求。
配置重點(diǎn)是CRUSH讀寫規(guī)則的設(shè)置,關(guān)鍵點(diǎn)如下:
- rule ssd-primary {
- ruleset 1
- …
- step take ssd
- step chooseleaf firstn 1 type host #從SSD根節(jié)點(diǎn)下取1個(gè)OSD存主數(shù)據(jù)
- step emit
- step take sas
- step chooseleaf firstn -1 type host #從SAS根節(jié)點(diǎn)下取其它OSD節(jié)點(diǎn)存副本數(shù)據(jù)
- step emit
- }
4. 作為Ceph Cache Tiering技術(shù)中的Cache層
Cache Tiering的基本思想是冷熱數(shù)據(jù)分離,用相對(duì)快速/昂貴的存儲(chǔ)設(shè)備如SSD盤,組成一個(gè)Pool來作為Cache層,后端用相對(duì)慢速/廉價(jià)的設(shè)備來組建冷數(shù)據(jù)存儲(chǔ)池。
Ceph Cache Tiering Agent處理緩存層和存儲(chǔ)層的數(shù)據(jù)的自動(dòng)遷移,對(duì)客戶端透明操作透明。Cahe層有兩種典型使用模式:
1)Writeback模式
Ceph客戶端直接往Cache層寫數(shù)據(jù),寫完立即返回,Agent再及時(shí)把數(shù)據(jù)遷移到冷數(shù)據(jù)池。當(dāng)客戶端取不在Cache層的冷數(shù)據(jù)時(shí),Agent負(fù)責(zé)把冷數(shù)據(jù)遷移到Cache層。也就是說,Ceph客戶端直接在Cache層上進(jìn)行IO讀寫操作,不會(huì)與相對(duì)慢速的冷數(shù)據(jù)池進(jìn)行數(shù)據(jù)交換。
這種模式適用于可變數(shù)據(jù)的操作,如照片/視頻編輯、電商交易數(shù)據(jù)等等。
2)只讀模式
Ceph客戶端在寫操作時(shí)往后端冷數(shù)據(jù)池直接寫,讀數(shù)據(jù)時(shí),Ceph把數(shù)據(jù)從后端讀取到Cache層。
這種模式適用于不可變數(shù)據(jù),如微博/微信上的照片/視頻、DNA數(shù)據(jù)、X射線影像等。
CRUSH算法是Ceph集群的核心,在深刻理解CRUSH算法的基礎(chǔ)上,利用SSD的高性能,可利用較少的成本增加,滿足企業(yè)關(guān)鍵應(yīng)用對(duì)存儲(chǔ)性能的高要求。
附. 名詞解釋:
- I. Ceph: 開源分布式統(tǒng)一存儲(chǔ)(塊、對(duì)象、文件)項(xiàng)目。
- II. Ceph OSD:Ceph Object Store Device的縮寫,可以指Ceph里的一個(gè)存儲(chǔ)單元,也可以指Ceph里的OSD管理進(jìn)程。每臺(tái)服務(wù)器上可運(yùn)行多個(gè)OSD進(jìn)程,典型的Ceph集群由奇數(shù)個(gè)Monitor節(jié)點(diǎn)和多個(gè)OSD節(jié)點(diǎn)組成。
- III. CRUSH:CRUSH算法是Ceph的核心模塊,它通過計(jì)算數(shù)據(jù)存儲(chǔ)位置來決定如何存取數(shù)據(jù),同時(shí)也讓Ceph客戶端可以直接和各OSD節(jié)點(diǎn)通信而不是一個(gè)中心節(jié)點(diǎn),這樣,避免了Ceph集群的單點(diǎn)故障、性能瓶頸,極大增強(qiáng)了線性擴(kuò)展能力。
- IV. SSD:Solid State Drive,固態(tài)盤,不解釋。
- V. SATA/SAS/PCIe:不同數(shù)據(jù)總線接口。高端存儲(chǔ)里大部分存儲(chǔ)節(jié)點(diǎn)采用PCIe技術(shù)進(jìn)行互聯(lián);PCIe接口SSD也是大勢所趨。SATA和SAS,一個(gè)指令集是ATA,一個(gè)是SCSI,兩者都可用來作為機(jī)械盤或固態(tài)盤的接口。
- VI. 幾種寫緩存模式:
- Write-through:向高速Cache寫入數(shù)據(jù)時(shí)同時(shí)也往后端慢速設(shè)備寫一份,兩者都寫完才返回。
- Write-back:向高速Cache寫完數(shù)據(jù)后立即返回,數(shù)據(jù)不保證立即寫入后端設(shè)備。給調(diào)用者的感覺是速度快,但需要額外的機(jī)制來防止掉電帶來的數(shù)據(jù)不一致。
- none:禁用寫緩存,直接往Cache后端慢速設(shè)備寫數(shù)據(jù)。
- 計(jì)算機(jī)內(nèi)各級(jí)存儲(chǔ)設(shè)備都存在Cache機(jī)制(CPU寄存器->L1緩存->L2緩存->內(nèi)存->設(shè)備控制器緩存->物理設(shè)備)