導讀 | 在規劃Ceph分佈式存儲集羣環境的時候,對硬件的選擇很重要,這關乎整個Ceph集羣的性能,下面梳理到一些硬件的選擇標準,可供參考: |
1)CPU選擇html
Ceph metadata server會動態的從新分配負載,它是CPU敏感性的,因此Metadata Server應該有比較好的處理器性能 (好比四核CPU). Ceph OSDs運行RADOS服務,須要經過CRUSH來計算數據的存放位置,replicate數據,以及維護Cluster Map的拷貝,所以OSD也須要合適的處理性能 Ceph Monitors 簡單的維護了Cluster Map的主幹信息因此這個是CPU不敏感的。linux
2)RAM選擇網絡
Metadata servers 以及Monitors 必須可以快速的提供數據,所以必須有充足的內存(e.g., 1GB of RAM per daemon instance). OSDs 在執行正常的操做時不須要過多的內存 (e.g., 500MB of RAM per daemon instance);可是 執行恢復操做時,就須要大量的內存(e.g., ~1GB per 1TB of storage per daemon). Generally, 並且是越多越好。分佈式
3)Data Storage選擇性能
規劃數據存儲時要考慮成本和性能的權衡。同時OS操做,同時多個後臺程序對單個驅動器進行讀寫操做會顯着下降性能。也有文件系統的限制考慮:BTRFS對於生產環境來講不是很穩定,但有能力記錄journal和並行的寫入數據,而XFS和EXT4會好一點。操作系統
提示:不推薦單個磁盤的分區上運行多個OSD。不推薦單個磁盤的分區上運行一個OSD和一個監視器或元數據服務。線程
存儲驅動器受尋道時間,訪問時間,讀取和寫入時間,以及總吞吐量的限制。這些物理限制會影響整個系統的性能,尤爲是在恢復過程當中。咱們建議爲操做系統和軟件使用專用的驅動器,而且爲你在主機上運行每一個OSD守護分配一個驅動器。大多數「慢OSD」的問題的產生是因爲在一個操做系統同一驅動器上運行多個OSDs和/或多個日誌。設計
因爲解決性能問題的一小部分的成本可能超過額外的磁盤驅動器的成本,所以你能夠加快你的的集羣設計規劃,爲了不OSD存儲驅動器負荷太重。日誌
在每一個硬盤驅動器上同時運行多個Ceph的OSD守護程序,可是這可能會致使資源爭用,並下降總體吞吐量。你可能把日誌和對象數據存儲在相同的驅動器上,但這樣可能會增長所花費在記錄寫入操做和發送ACK給客戶端的時間。在CEPH能夠ACK對於寫入操做前,Ceph必須把操做寫入到日誌。server
BTRFS文件系統的日誌數據和對象數據的同時能夠寫,而XFS和ext4的不能。Ceph的推薦作法,分開在單獨的驅動器上運行操做系統,OSD數據和OSD日誌。
4)固態硬盤選擇
性能改進的機會之一是使用固態硬盤(SSD),以減小隨機訪問時間,讀取等待時間,同時吞吐量加速。固態硬盤每GB的費用與硬盤驅動器相比每每超過10倍之多,但固態硬盤每每表現至少比硬盤驅動器快100倍的訪問時間。
固態硬盤沒有移動機械部件,因此他們不須要受同類型硬盤驅動器的限制。儘管固態硬盤有明顯的侷限性。重要的是考慮其連續讀取和寫入的性能。當存儲多個OSDs的多個日誌時,有400MB/s的順序寫入吞吐量的SSD的性能,相比機械盤120MB/s的順序寫入吞吐量,SSD更好、更快。
固態硬盤的OSD對象存儲成本高昂,經過存儲一個OSD的日誌在一個單獨的硬盤驅動器SSD和OSD的對象數據上時,OSDs上可能會看到一個顯着的性能提高。OSD日誌配置默認在/var/lib/ceph/osd/$cluster-$id/journal裏。你能夠掛載這個路徑到SSD或SSD的分區上,將日誌文件和數據文件分別存放在不一樣的磁盤。
5)Networks選擇
建議每臺機器最少兩個千兆網卡,如今大多數普通硬盤吞的吐量都能達到100MB/s,網卡應該能處理因此OSD硬盤總吞吐量,因此推薦最少兩個千兆網卡,分別用於public network和cluster_network。集羣網絡(最好別鏈接到互聯網)用於處理由數據複製產生的額外負載,而且有助於阻止拒絕服務攻擊,拒絕服務攻擊會干擾數據歸置組,使之在OSD數據複製時不能回到active+clean狀態。請考慮部署萬兆網卡。經過1Gbps網絡複製1TB數據耗時3小時,而3TB(一個典型的驅動配置)須要9小時,與之相反,若是使用10Gbps複製時間可分別縮減到20分鐘和1小時。
在一個PB級集羣中,OSD磁盤失敗是常態,而非異常;在性價比合理的前提下,系統管理員想讓PG儘快從degraded(降級)狀態恢復到active+clean狀態。採用10G網卡值得考慮使用。每一個網絡的頂級機架路由器到核心路由器通訊應該有更快的吞吐量,例如,40Gbps~100Gbps。
6)其餘注意事項:
能夠在每臺主機上運行多個OSD進程,但應該確保OSD硬盤的吞吐量總和不超過客戶端讀取或寫入數據所需的網絡帶寬。也應該考慮在每一個主機上數據的存儲率。若是一個特定的主機上的百分比較大,它可能會致使問題:爲了防止數據丟失,會致使Ceph中止操做。
當每臺主機上運行多個OSD進程時,還須要保證內核是最新的。 當每臺主機上運行多個OSD進程時(如>20)會產生不少的線程,特別是進行recovery和relalancing操做。許多Linux內核默認線程限最大數量比較小(例如,32k的)。若是您遇到這方面的問題,能夠考慮把kernel.pid_max設置的高一點。理論上的最大值爲4,194,303。