分布式文件系統(tǒng)之Ceph硬件
硬件推薦
Ceph 為普通硬件設(shè)計(jì),這可使構(gòu)建、維護(hù) PB 級(jí)數(shù)據(jù)集群的費(fèi)用相對(duì)低廉。規(guī)劃集群硬件時(shí),需要均衡幾方面的因素,包括區(qū)域失效和潛在的性能問題。硬件規(guī)劃要包含把使用 Ceph 集群的 Ceph 守護(hù)進(jìn)程和其他進(jìn)程恰當(dāng)分布。通常,我們推薦在一臺(tái)機(jī)器上只運(yùn)行一種類型的守護(hù)進(jìn)程。大部分專家推薦把使用數(shù)據(jù)集群的進(jìn)程(如 OpenStack 、 CloudStack 等)安裝在別的機(jī)器上。但是現(xiàn)在這個(gè)超融合架構(gòu)泛濫的時(shí)代,部署在一起的大廠商也是有很多的,比如最早在公有云中使用ceph當(dāng)做存儲(chǔ)的有云。
CPU
Ceph 元數(shù)據(jù)服務(wù)器對(duì) CPU 敏感,它會(huì)動(dòng)態(tài)地重分布它們的負(fù)載,所以你的元數(shù)據(jù)服務(wù)器應(yīng)該有足夠的處理能力(我們生產(chǎn)使用的是2C雙12核心CPU)。 Ceph 的 OSD 運(yùn)行著 RADOS 服務(wù)、用CRUSH計(jì)算數(shù)據(jù)存放位置、復(fù)制數(shù)據(jù)、維護(hù)它自己的集群運(yùn)行圖副本,因此 OSD 需要一定的處理能力(如雙核 CPU )。監(jiān)視器只簡單地維護(hù)著集群運(yùn)行圖的副本,因此對(duì) CPU 不敏感;但必須考慮機(jī)器以后是否還會(huì)運(yùn)行 Ceph 監(jiān)視器以外的 CPU 密集型任務(wù)。例如,如果服務(wù)器以后要運(yùn)行用于計(jì)算的虛擬機(jī)(如 OpenStack Nova ),你就要確保給 Ceph 進(jìn)程保留了足夠的處理能力,所以我推薦在其他機(jī)器上運(yùn)行 CPU 密集型任務(wù)。
內(nèi)存
元數(shù)據(jù)服務(wù)器和監(jiān)視器必須可以盡快地提供它們的數(shù)據(jù),所以他們應(yīng)該有足夠的內(nèi)存,至少每進(jìn)程 1GB 。 OSD 的日常運(yùn)行不需要那么多內(nèi)存(如每進(jìn)程 500MB )差不多了;然而在恢復(fù)期間它們占用內(nèi)存比較大(如每進(jìn)程每 TB 數(shù)據(jù)需要約 1GB 內(nèi)存)。通常內(nèi)存越多越好。(我的生產(chǎn)環(huán)境是超融合架構(gòu)512G內(nèi)存)
數(shù)據(jù)存儲(chǔ)
要謹(jǐn)慎地規(guī)劃數(shù)據(jù)存儲(chǔ)配置,因?yàn)槠溟g涉及明顯的成本和性能折衷。來自操作系統(tǒng)的并行操作和到單個(gè)硬盤的多個(gè)守護(hù)進(jìn)程并發(fā)讀、寫請(qǐng)求操作會(huì)極大地降低性能。文件系統(tǒng)局限性也要考慮: btrfs 尚未穩(wěn)定到可以用于生產(chǎn)環(huán)境的程度,但它可以同時(shí)記日志并寫入數(shù)據(jù),而 xfs 和 ext4 卻不能。
Important:因?yàn)?Ceph 發(fā)送 ACK 前必須把所有數(shù)據(jù)寫入日志(至少對(duì) xfs 和 ext4 來說是),因此均衡日志和 OSD 性能相當(dāng)重要。
硬盤驅(qū)動(dòng)器
OSD 應(yīng)該有足夠的空間用于存儲(chǔ)對(duì)象數(shù)據(jù)??紤]到大硬盤的每 GB 成本,我們建議用容量大于 1TB 的硬盤。建議用 GB 數(shù)除以硬盤價(jià)格來計(jì)算每 GB 成本,因?yàn)檩^大的硬盤通常會(huì)對(duì)每 GB 成本有較大影響,例如,單價(jià)為 $75 的 1TB 硬盤其每 GB 價(jià)格為 $0.07 ( $75/1024=0.0732 ),又如單價(jià)為 $150 的 3TB 硬盤其每 GB 價(jià)格為 $0.05 ( $150/3072=0.0488 ),這樣使用 1TB 硬盤會(huì)增加 40% 的每 GB 價(jià)格,它將表現(xiàn)為較低的經(jīng)濟(jì)性。另外,單個(gè)驅(qū)動(dòng)器容量越大,其對(duì)應(yīng)的 OSD 所需內(nèi)存就越大,特別是在重均衡、回填、恢復(fù)期間。根據(jù)經(jīng)驗(yàn), 1TB 的存儲(chǔ)空間大約需要 1GB 內(nèi)存。
(我現(xiàn)在生產(chǎn)環(huán)境使用的是1.2T高速盤,也就解釋了為何要組成大的內(nèi)存。)
不顧分區(qū)而在單個(gè)硬盤上運(yùn)行多個(gè)OSD,這樣強(qiáng)烈不推薦!
不顧分區(qū)而在運(yùn)行了OSD的硬盤上同時(shí)運(yùn)行監(jiān)視器或元數(shù)據(jù)服務(wù)器也強(qiáng)烈不推薦!
存儲(chǔ)驅(qū)動(dòng)器受限于尋道時(shí)間、訪問時(shí)間、讀寫時(shí)間、還有總吞吐量,這些物理局限性影響著整體系統(tǒng)性能,尤其在系統(tǒng)恢復(fù)期間。因此我們推薦獨(dú)立的驅(qū)動(dòng)器用于安裝操作系統(tǒng)和軟件,另外每個(gè) OSD 守護(hù)進(jìn)程占用一個(gè)驅(qū)動(dòng)器。大多數(shù) “slow OSD”問題的起因都是在相同的硬盤上運(yùn)行了操作系統(tǒng)、多個(gè) OSD 、和/或多個(gè)日志文件。鑒于解決性能問題的成本差不多會(huì)超過另外增加磁盤驅(qū)動(dòng)器,你應(yīng)該在設(shè)計(jì)時(shí)就避免增加 OSD 存儲(chǔ)驅(qū)動(dòng)器的負(fù)擔(dān)來提升性能。
Ceph 允許你在每塊硬盤驅(qū)動(dòng)器上運(yùn)行多個(gè) OSD ,但這會(huì)導(dǎo)致資源競爭并降低總體吞吐量; Ceph 也允許把日志和對(duì)象數(shù)據(jù)存儲(chǔ)在相同驅(qū)動(dòng)器上,但這會(huì)增加記錄寫日志并回應(yīng)客戶端的延時(shí),因?yàn)?Ceph 必須先寫入日志才會(huì)回應(yīng)確認(rèn)了寫動(dòng)作。 btrfs 文件系統(tǒng)能同時(shí)寫入日志數(shù)據(jù)和對(duì)象數(shù)據(jù), xfs 和 ext4 卻不能。
Ceph 最佳實(shí)踐指示,你應(yīng)該分別在單獨(dú)的硬盤運(yùn)行操作系統(tǒng)、 OSD 數(shù)據(jù)和 OSD 日志。
固態(tài)硬盤
一種提升性能的方法是使用固態(tài)硬盤( SSD )來降低隨機(jī)訪問時(shí)間和讀延時(shí),同時(shí)增加吞吐量。 SSD 和硬盤相比每 GB 成本通常要高 10 倍以上,但訪問時(shí)間至少比硬盤快 100 倍。
SSD 沒有可移動(dòng)機(jī)械部件,所以不存在和硬盤一樣的局限性。但 SSD 也有局限性,評(píng)估SSD 時(shí),順序讀寫性能很重要,在為多個(gè) OSD 存儲(chǔ)日志時(shí),有著 400MB/s 順序讀寫吞吐量的 SSD 其性能遠(yuǎn)高于 120MB/s 的。
Important
我們建議發(fā)掘 SSD 的用法來提升性能。然而在大量投入 SSD 前,強(qiáng)烈建議核實(shí) SSD 的性能指標(biāo),并在測試環(huán)境下衡量性能。
正因?yàn)?SSD 沒有移動(dòng)機(jī)械部件,所以它很適合 Ceph 里不需要太多存儲(chǔ)空間的地方。相對(duì)廉價(jià)的 SSD 很誘人,慎用!可接受的 IOPS 指標(biāo)對(duì)選擇用于 Ceph 的 SSD 還不夠,用于日志和 SSD 時(shí)還有幾個(gè)重要考量:
寫密集語義: 記日志涉及寫密集語義,所以你要確保選用的 SSD 寫入性能和硬盤相當(dāng)或好于硬盤。廉價(jià) SSD 可能在加速訪問的同時(shí)引入寫延時(shí),有時(shí)候高性能硬盤的寫入速度可以和便宜 SSD 相媲美。
順序?qū)懭耄?在一個(gè) SSD 上為多個(gè) OSD 存儲(chǔ)多個(gè)日志時(shí)也必須考慮 SSD 的順序?qū)懭霕O限,因?yàn)樗鼈円瑫r(shí)處理多個(gè) OSD 日志的寫入請(qǐng)求。
分區(qū)對(duì)齊: 采用了 SSD 的一個(gè)常見問題是人們喜歡分區(qū),卻常常忽略了分區(qū)對(duì)齊,這會(huì)導(dǎo)致 SSD 的數(shù)據(jù)傳輸速率慢很多,所以請(qǐng)確保分區(qū)對(duì)齊了。
SSD 用于對(duì)象存儲(chǔ)太昂貴了,但是把 OSD 的日志存到 SSD 、把對(duì)象數(shù)據(jù)存儲(chǔ)到獨(dú)立的硬盤可以明顯提升性能。osd journal選項(xiàng)的默認(rèn)值是 /var/lib/ceph/osd/$cluster-$id/journal,你可以把它掛載到一個(gè) SSD 或 SSD 分區(qū),這樣它就不再是和對(duì)象數(shù)據(jù)一樣存儲(chǔ)在同一個(gè)硬盤上的文件了。提升 CephFS 文件系統(tǒng)性能的一種方法是從 CephFS 文件內(nèi)容里分離出元數(shù)據(jù)。 Ceph 提供了默認(rèn)的 metadata。存儲(chǔ)池來存儲(chǔ) CephFS 元數(shù)據(jù),所以你不需要給 CephFS 元數(shù)據(jù)創(chuàng)建存儲(chǔ)池,但是可以給它創(chuàng)建一個(gè)僅指向某主機(jī) SSD 的 CRUSH 運(yùn)行圖。詳情見給存儲(chǔ)池指定 OSD 。
控制器
硬盤控制器對(duì)寫吞吐量也有顯著影響,要謹(jǐn)慎地選擇,以免產(chǎn)生性能瓶頸。
Ceph blog通常是優(yōu)秀的Ceph性能問題來源,見 Ceph Write Throughput 1 和 Ceph Write Throughput 2 。
其他注意事項(xiàng)
你可以在同一主機(jī)上運(yùn)行多個(gè) OSD ,但要確保 OSD 硬盤總吞吐量不超過為客戶端提供讀寫服務(wù)所需的網(wǎng)絡(luò)帶寬;還要考慮集群在每臺(tái)主機(jī)上所存儲(chǔ)的數(shù)據(jù)占總體的百分比,如果一臺(tái)主機(jī)所占百分比太大而它掛了,就可能導(dǎo)致諸如超過 full ratio的問題,此問題會(huì)使 Ceph 中止運(yùn)作以防數(shù)據(jù)丟失。如果每臺(tái)主機(jī)運(yùn)行多個(gè) OSD ,也得保證內(nèi)核是最新的。參閱操作系統(tǒng)推薦里關(guān)于 glibc和 syncfs(2) 的部分,確保硬件性能可達(dá)期望值。
OSD 數(shù)量較多(如 20 個(gè)以上)的主機(jī)會(huì)派生出大量線程,尤其是在恢復(fù)和重均衡期間。很多 Linux 內(nèi)核默認(rèn)的最大線程數(shù)較小(如 32k 個(gè)),如果您遇到了這類問題,可以把kernel.pid_max
值調(diào)高些。理論最大值是 4194303 。
例如把下列這行加入 /etc/sysctl.conf文件:
- kernel.pid_max = 4194303
網(wǎng)絡(luò)
建議每臺(tái)機(jī)器最少兩個(gè)千兆網(wǎng)卡,現(xiàn)在大多數(shù)機(jī)械硬盤都能達(dá)到大概 100MB/s 的吞吐量,網(wǎng)卡應(yīng)該能處理所有 OSD 硬盤總吞吐量,所以推薦最少兩個(gè)千兆網(wǎng)卡,分別用于公網(wǎng)(前端)和集群網(wǎng)絡(luò)(后端)。集群網(wǎng)絡(luò)(最好別連接到國際互聯(lián)網(wǎng))用于處理由數(shù)據(jù)復(fù)制產(chǎn)生的額外負(fù)載,而且可防止拒絕服務(wù)攻擊,拒絕服務(wù)攻擊會(huì)干擾數(shù)據(jù)歸置組,使之在 OSD 數(shù)據(jù)復(fù)制時(shí)不能回到active + clean狀態(tài)。請(qǐng)考慮部署萬兆網(wǎng)卡。通過 1Gbps 網(wǎng)絡(luò)復(fù)制 1TB 數(shù)據(jù)耗時(shí) 3 小時(shí),而 3TB (典型配置)需要 9 小時(shí),相比之下,如果使用 10Gbps 復(fù)制時(shí)間可分別縮減到 20 分鐘和 1 小時(shí)。在一個(gè) PB 級(jí)集群中, OSD 磁盤失敗是常態(tài),而非異常;在性價(jià)比合理的的前提下,系統(tǒng)管理員想讓 PG 盡快從 degraded(降級(jí))狀態(tài)恢復(fù)到 active + clean狀態(tài)。另外,一些部署工具(如 Dell 的 Crowbar )部署了 5 個(gè)不同的網(wǎng)絡(luò),但使用了 VLAN 以提高網(wǎng)絡(luò)和硬件可管理性。 VLAN 使用 802.1q 協(xié)議,還需要采用支持 VLAN 功能的網(wǎng)卡和交換機(jī),增加的硬件成本可用節(jié)省的運(yùn)營(網(wǎng)絡(luò)安裝、維護(hù))成本抵消。使用 VLAN 來處理集群和計(jì)算棧(如 OpenStack 、 CloudStack 等等)之間的 VM 流量時(shí),采用 10G 網(wǎng)卡仍然值得。每個(gè)網(wǎng)絡(luò)的機(jī)架路由器到核心路由器應(yīng)該有更大的帶寬,如 40Gbps 到 100Gbps 。
服務(wù)器應(yīng)配置底板管理控制器( Baseboard Management Controller, BMC ),管理和部署工具也應(yīng)該大規(guī)模使用 BMC ,所以請(qǐng)考慮帶外網(wǎng)絡(luò)管理的成本/效益平衡,此程序管理著 SSH 訪問、 VM 映像上傳、操作系統(tǒng)安裝、端口管理、等等,會(huì)徒增網(wǎng)絡(luò)負(fù)載。運(yùn)營 3 個(gè)網(wǎng)絡(luò)有點(diǎn)過分,但是每條流量路徑都指示了部署一個(gè)大型數(shù)據(jù)集群前要仔細(xì)考慮的潛能力、吞吐量、性能瓶頸。
故障域
故障域指任何導(dǎo)致不能訪問一個(gè)或多個(gè) OSD 的故障,可以是主機(jī)上停止的進(jìn)程、硬盤故障、操作系統(tǒng)崩潰、有問題的網(wǎng)卡、損壞的電源、斷網(wǎng)、斷電等等。規(guī)劃硬件需求時(shí),要在多個(gè)需求間尋求平衡點(diǎn),像付出很多努力減少故障域帶來的成本削減、隔離每個(gè)潛在故障域增加的成本。
最低硬件推薦
Ceph 可以運(yùn)行在廉價(jià)的普通硬件上,小型生產(chǎn)集群和開發(fā)集群可以在一般的硬件上。
如果在只有一塊硬盤的機(jī)器上運(yùn)行 OSD ,要把數(shù)據(jù)和操作系統(tǒng)分別放到不同分區(qū);一般來說,我們推薦操作系統(tǒng)和數(shù)據(jù)分別使用不同的硬盤。
生產(chǎn)集群實(shí)例
PB 級(jí)生產(chǎn)集群也可以使用普通硬件,但應(yīng)該配備更多內(nèi)存、 CPU 和數(shù)據(jù)存儲(chǔ)空間來解決流量壓力。
我們生產(chǎn)環(huán)境硬件配置
- CPU:2*12C
- 內(nèi)存:512G
- 硬盤:20*1.2T
- 網(wǎng)卡:2*10Gb