Ceph分散式儲存叢集-硬體選擇

散盡浮華發表於2018-02-08

 

在規劃Ceph分散式儲存叢集環境的時候,對硬體的選擇很重要,這關乎整個Ceph叢集的效能,下面梳理到一些硬體的選擇標準,可供參考:

1)CPU選擇
Ceph metadata server會動態的重新分配負載,它是CPU敏感性的,所以Metadata Server應該有比較好的處理器效能 (比如四核CPU). Ceph OSDs執行RADOS服務,需要通過CRUSH來計算資料的存放位置,replicate資料,以及維護Cluster Map的拷貝,因此OSD也需要合適的處理效能 Ceph Monitors 簡單的維護了Cluster Map的主幹資訊所以這個是CPU不敏感的。

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必須把操作寫入到日誌。

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。

相關文章