硬件推薦
Ceph 為普通硬件設計,這可使構(gòu)建靶端、維護 PB 級數(shù)據(jù)集群的費用相對低廉建钥。規(guī)劃集群硬件時藤韵,需要均衡幾方面的因素,包括區(qū)域失效和潛在的性能問題熊经。硬件規(guī)劃要包含把使用 Ceph 集群的 Ceph 守護進程和其他進程恰當分布。通常欲险,我們推薦在一臺機器上只運行一種類型的守護進程镐依。大部分專家推薦把使用數(shù)據(jù)集群的進程(如 OpenStack 、 CloudStack 等)安裝在別的機器上天试。但是現(xiàn)在這個超融合架構(gòu)泛濫的時代槐壳,部署在一起的大廠商也是有很多的,比如最早在公有云中使用ceph當做存儲的有云喜每。
CPU
Ceph 元數(shù)據(jù)服務器對 CPU 敏感务唐,它會動態(tài)地重分布它們的負載,所以你的元數(shù)據(jù)服務器應該有足夠的處理能力(我們生產(chǎn)使用的是2C雙12核心CPU)带兜。 Ceph 的 OSD 運行著 RADOS 服務枫笛、用 CRUSH計算數(shù)據(jù)存放位置、復制數(shù)據(jù)刚照、維護它自己的集群運行圖副本刑巧,因此 OSD 需要一定的處理能力(如雙核 CPU )。監(jiān)視器只簡單地維護著集群運行圖的副本无畔,因此對 CPU 不敏感啊楚;但必須考慮機器以后是否還會運行 Ceph 監(jiān)視器以外的 CPU 密集型任務。例如浑彰,如果服務器以后要運行用于計算的虛擬機(如 OpenStack Nova )恭理,你就要確保給 Ceph 進程保留了足夠的處理能力,所以我推薦在其他機器上運行 CPU 密集型任務郭变。
內(nèi)存
元數(shù)據(jù)服務器和監(jiān)視器必須可以盡快地提供它們的數(shù)據(jù)颜价,所以他們應該有足夠的內(nèi)存薄风,至少每進程 1GB 。 OSD 的日常運行不需要那么多內(nèi)存(如每進程 500MB )差不多了拍嵌;然而在恢復期間它們占用內(nèi)存比較大(如每進程每 TB 數(shù)據(jù)需要約 1GB 內(nèi)存)遭赂。通常內(nèi)存越多越好。(我的生產(chǎn)環(huán)境是超融合架構(gòu)512G內(nèi)存)
數(shù)據(jù)存儲
要謹慎地規(guī)劃數(shù)據(jù)存儲配置横辆,因為其間涉及明顯的成本和性能折衷撇他。來自操作系統(tǒng)的并行操作和到單個硬盤的多個守護進程并發(fā)讀、寫請求操作會極大地降低性能狈蚤。文件系統(tǒng)局限性也要考慮: btrfs 尚未穩(wěn)定到可以用于生產(chǎn)環(huán)境的程度困肩,但它可以同時記日志并寫入數(shù)據(jù),而 xfs 和 ext4 卻不能脆侮。
Important:因為 Ceph 發(fā)送 ACK 前必須把所有數(shù)據(jù)寫入日志(至少對 xfs 和 ext4 來說是)锌畸,因此均衡日志和 OSD 性能相當重要。
硬盤驅(qū)動器
OSD 應該有足夠的空間用于存儲對象數(shù)據(jù)靖避√对妫考慮到大硬盤的每 GB 成本,我們建議用容量大于 1TB 的硬盤幻捏。建議用 GB 數(shù)除以硬盤價格來計算每 GB 成本盆犁,因為較大的硬盤通常會對每 GB 成本有較大影響,例如篡九,單價為 $75 的 1TB 硬盤其每 GB 價格為 $0.07 ( $75/1024=0.0732 )谐岁,又如單價為 $150 的 3TB 硬盤其每 GB 價格為 $0.05 ( $150/3072=0.0488 ),這樣使用 1TB 硬盤會增加 40% 的每 GB 價格榛臼,它將表現(xiàn)為較低的經(jīng)濟性伊佃。另外,單個驅(qū)動器容量越大沛善,其對應的 OSD 所需內(nèi)存就越大航揉,特別是在重均衡、回填路呜、恢復期間迷捧。根據(jù)經(jīng)驗, 1TB 的存儲空間大約需要 1GB 內(nèi)存胀葱。
(我現(xiàn)在生產(chǎn)環(huán)境使用的是1.2T高速盤漠秋,也就解釋了為何要組成大的內(nèi)存。)
不顧分區(qū)而在單個硬盤上運行多個OSD抵屿,這樣強烈不推薦庆锦!
不顧分區(qū)而在運行了OSD的硬盤上同時運行監(jiān)視器或元數(shù)據(jù)服務器也強烈不推薦!
存儲驅(qū)動器受限于尋道時間轧葛、訪問時間搂抒、讀寫時間艇搀、還有總吞吐量,這些物理局限性影響著整體系統(tǒng)性能求晶,尤其在系統(tǒng)恢復期間焰雕。因此我們推薦獨立的驅(qū)動器用于安裝操作系統(tǒng)和軟件,另外每個 OSD 守護進程占用一個驅(qū)動器芳杏。大多數(shù) “slow OSD”問題的起因都是在相同的硬盤上運行了操作系統(tǒng)矩屁、多個 OSD 、和/或多個日志文件爵赵。鑒于解決性能問題的成本差不多會超過另外增加磁盤驅(qū)動器吝秕,你應該在設計時就避免增加 OSD 存儲驅(qū)動器的負擔來提升性能。
Ceph 允許你在每塊硬盤驅(qū)動器上運行多個 OSD 空幻,但這會導致資源競爭并降低總體吞吐量烁峭; Ceph 也允許把日志和對象數(shù)據(jù)存儲在相同驅(qū)動器上,但這會增加記錄寫日志并回應客戶端的延時秕铛,因為 Ceph 必須先寫入日志才會回應確認了寫動作约郁。 btrfs 文件系統(tǒng)能同時寫入日志數(shù)據(jù)和對象數(shù)據(jù), xfs 和 ext4 卻不能如捅。
Ceph 最佳實踐指示棍现,你應該分別在單獨的硬盤運行操作系統(tǒng)、 OSD 數(shù)據(jù)和 OSD 日志镜遣。
固態(tài)硬盤
一種提升性能的方法是使用固態(tài)硬盤( SSD )來降低隨機訪問時間和讀延時,同時增加吞吐量士袄。 SSD 和硬盤相比每 GB 成本通常要高 10 倍以上悲关,但訪問時間至少比硬盤快 100 倍。
SSD 沒有可移動機械部件娄柳,所以不存在和硬盤一樣的局限性寓辱。但 SSD 也有局限性,評估SSD 時赤拒,順序讀寫性能很重要秫筏,在為多個 OSD 存儲日志時,有著 400MB/s 順序讀寫吞吐量的 SSD 其性能遠高于 120MB/s 的挎挖。
Important
我們建議發(fā)掘 SSD 的用法來提升性能这敬。然而在大量投入 SSD 前,強烈建議核實 SSD 的性能指標蕉朵,并在測試環(huán)境下衡量性能崔涂。
正因為 SSD 沒有移動機械部件,所以它很適合 Ceph 里不需要太多存儲空間的地方始衅。相對廉價的 SSD 很誘人冷蚂,慎用缭保!可接受的 IOPS 指標對選擇用于 Ceph 的 SSD 還不夠,用于日志和 SSD 時還有幾個重要考量:
- 寫密集語義: 記日志涉及寫密集語義蝙茶,所以你要確保選用的 SSD 寫入性能和硬盤相當或好于硬盤艺骂。廉價 SSD 可能在加速訪問的同時引入寫延時,有時候高性能硬盤的寫入速度可以和便宜 SSD 相媲美隆夯。
- 順序?qū)懭耄?/strong> 在一個 SSD 上為多個 OSD 存儲多個日志時也必須考慮 SSD 的順序?qū)懭霕O限钳恕,因為它們要同時處理多個 OSD 日志的寫入請求。
- 分區(qū)對齊: 采用了 SSD 的一個常見問題是人們喜歡分區(qū)吮廉,卻常常忽略了分區(qū)對齊苞尝,這會導致 SSD 的數(shù)據(jù)傳輸速率慢很多,所以請確保分區(qū)對齊了宦芦。
SSD 用于對象存儲太昂貴了宙址,但是把 OSD 的日志存到 SSD 、把對象數(shù)據(jù)存儲到獨立的硬盤可以明顯提升性能调卑。osd journal選項的默認值是 /var/lib/ceph/osd/$cluster-$id/journal抡砂,你可以把它掛載到一個 SSD 或 SSD 分區(qū),這樣它就不再是和對象數(shù)據(jù)一樣存儲在同一個硬盤上的文件了恬涧。提升 CephFS 文件系統(tǒng)性能的一種方法是從 CephFS 文件內(nèi)容里分離出元數(shù)據(jù)注益。 Ceph 提供了默認的 metadata。存儲池來存儲 CephFS 元數(shù)據(jù)溯捆,所以你不需要給 CephFS 元數(shù)據(jù)創(chuàng)建存儲池丑搔,但是可以給它創(chuàng)建一個僅指向某主機 SSD 的 CRUSH 運行圖。詳情見給存儲池指定 OSD 提揍。
控制器
硬盤控制器對寫吞吐量也有顯著影響啤月,要謹慎地選擇,以免產(chǎn)生性能瓶頸劳跃。
Ceph blog通常是優(yōu)秀的Ceph性能問題來源谎仲,見 Ceph Write Throughput 1 和 Ceph Write Throughput 2 。
其他注意事項
你可以在同一主機上運行多個 OSD 刨仑,但要確保 OSD 硬盤總吞吐量不超過為客戶端提供讀寫服務所需的網(wǎng)絡帶寬郑诺;還要考慮集群在每臺主機上所存儲的數(shù)據(jù)占總體的百分比,如果一臺主機所占百分比太大而它掛了杉武,就可能導致諸如超過 full ratio的問題辙诞,此問題會使 Ceph 中止運作以防數(shù)據(jù)丟失。如果每臺主機運行多個 OSD 艺智,也得保證內(nèi)核是最新的倘要。參閱操作系統(tǒng)推薦里關(guān)于 glibc和 syncfs(2) 的部分,確保硬件性能可達期望值。
OSD 數(shù)量較多(如 20 個以上)的主機會派生出大量線程封拧,尤其是在恢復和重均衡期間志鹃。很多 Linux 內(nèi)核默認的最大線程數(shù)較小(如 32k 個)泽西,如果您遇到了這類問題曹铃,可以把kernel.pid_max
值調(diào)高些。理論最大值是 4194303 捧杉。
例如把下列這行加入 /etc/sysctl.conf
文件:
kernel.pid_max = 4194303
網(wǎng)絡
建議每臺機器最少兩個千兆網(wǎng)卡陕见,現(xiàn)在大多數(shù)機械硬盤都能達到大概 100MB/s 的吞吐量,網(wǎng)卡應該能處理所有 OSD 硬盤總吞吐量味抖,所以推薦最少兩個千兆網(wǎng)卡评甜,分別用于公網(wǎng)(前端)和集群網(wǎng)絡(后端)。集群網(wǎng)絡(最好別連接到國際互聯(lián)網(wǎng))用于處理由數(shù)據(jù)復制產(chǎn)生的額外負載仔涩,而且可防止拒絕服務攻擊忍坷,拒絕服務攻擊會干擾數(shù)據(jù)歸置組,使之在 OSD 數(shù)據(jù)復制時不能回到active + clean狀態(tài)熔脂。請考慮部署萬兆網(wǎng)卡佩研。通過 1Gbps 網(wǎng)絡復制 1TB 數(shù)據(jù)耗時 3 小時,而 3TB (典型配置)需要 9 小時霞揉,相比之下旬薯,如果使用 10Gbps 復制時間可分別縮減到 20 分鐘和 1 小時。在一個 PB 級集群中适秩, OSD 磁盤失敗是常態(tài)绊序,而非異常;在性價比合理的的前提下秽荞,系統(tǒng)管理員想讓 PG 盡快從 degraded(降級)狀態(tài)恢復到 active + clean狀態(tài)政模。另外,一些部署工具(如 Dell 的 Crowbar )部署了 5 個不同的網(wǎng)絡蚂会,但使用了 VLAN 以提高網(wǎng)絡和硬件可管理性。 VLAN 使用 802.1q 協(xié)議耗式,還需要采用支持 VLAN 功能的網(wǎng)卡和交換機胁住,增加的硬件成本可用節(jié)省的運營(網(wǎng)絡安裝、維護)成本抵消刊咳。使用 VLAN 來處理集群和計算棧(如 OpenStack 彪见、 CloudStack 等等)之間的 VM 流量時,采用 10G 網(wǎng)卡仍然值得娱挨。每個網(wǎng)絡的機架路由器到核心路由器應該有更大的帶寬余指,如 40Gbps 到 100Gbps 。
服務器應配置底板管理控制器( Baseboard Management Controller, BMC ),管理和部署工具也應該大規(guī)模使用 BMC 酵镜,所以請考慮帶外網(wǎng)絡管理的成本/效益平衡碉碉,此程序管理著 SSH 訪問、 VM 映像上傳淮韭、操作系統(tǒng)安裝垢粮、端口管理、等等靠粪,會徒增網(wǎng)絡負載蜡吧。運營 3 個網(wǎng)絡有點過分,但是每條流量路徑都指示了部署一個大型數(shù)據(jù)集群前要仔細考慮的潛能力占键、吞吐量昔善、性能瓶頸。
故障域
故障域指任何導致不能訪問一個或多個 OSD 的故障畔乙,可以是主機上停止的進程君仆、硬盤故障、操作系統(tǒng)崩潰啸澡、有問題的網(wǎng)卡袖订、損壞的電源、斷網(wǎng)嗅虏、斷電等等洛姑。規(guī)劃硬件需求時,要在多個需求間尋求平衡點皮服,像付出很多努力減少故障域帶來的成本削減楞艾、隔離每個潛在故障域增加的成本。
最低硬件推薦
Ceph 可以運行在廉價的普通硬件上龄广,小型生產(chǎn)集群和開發(fā)集群可以在一般的硬件上硫眯。
如果在只有一塊硬盤的機器上運行 OSD ,要把數(shù)據(jù)和操作系統(tǒng)分別放到不同分區(qū)择同;一般來說两入,我們推薦操作系統(tǒng)和數(shù)據(jù)分別使用不同的硬盤。
生產(chǎn)集群實例
PB 級生產(chǎn)集群也可以使用普通硬件敲才,但應該配備更多內(nèi)存裹纳、 CPU 和數(shù)據(jù)存儲空間來解決流量壓力。
我們生產(chǎn)環(huán)境硬件配置
CPU:2*12C
內(nèi)存:512G
硬盤:20*1.2T
網(wǎng)卡:2*10Gb
END.
OK今天就為大家介紹這么多了紧武。
我是EC君剃氧,如果你喜歡我的文章,請幫忙點個關(guān)注阻星!點個喜歡吧朋鞍!
也可以點擊作者信息,掃描微信二維碼關(guān)注我的個人微信公眾號。
你的鼓勵將是我們共同進步的源泉滥酥。