CEPH檔案系統後設資料的SSD加速

shilei1發表於2018-03-16

物件儲存程式Object Storage Daemons (OSDs)是分散式檔案系統Ceph的一大特點,相比其它分散式檔案系統,Ceph擴充套件性和穩定性更好。關於Ceph是什麼,本站後期將會介紹。

 

在Ceph中,物件先儲存到基本OSD,接著複製到其他備份OSD,這個複製過程是同步的,就是寫完了,才能告訴上層應用說寫成功。保證了資料的可用性。

 

Client的每個寫操作下發到OSD之後,會產生2~3個磁碟seek操作:

 

把寫操作記錄到OSD的Journal檔案上(Journal是後設資料,為了保證寫操作的原子性)。

把寫操作更新到Object對應的檔案上。

把寫操作記錄到PG Log檔案上。

更細一步說,對於一個OSD來說,寫完成之前必須要把後設資料儲存到它的Journal。而寫操作是先寫Journal,再寫Object,所以,為了提升叢集效能,寫Journal的速度一定要快。

因此,一般為了讓Ceph叢集更快,價效比更高,需要考慮兩條設計思想:

  1. 把檔案放在慢速、便宜的儲存裝置上,比如SATA HDD。
  2. 把Journal放在快速裝置上,比如SSD,快閃記憶體卡。

 

另一個常見的設計思想是每個HDD對應一個OSD。當前很多系統配備兩個SSD,很多HDD,如果SSD只存放Journal的話,容量是完全足夠的,因為1個OSD的Journal一般不超過6GB,即使有16個HDD,Journal大約只有96GB,絕大部分SSD的容量是綽綽有餘的。

 

很多管理員擔心SSD會掛掉,所以用SSD組成了RAID-1,其實就是搞了個映象,容量減半。然後把Journal放到了SSD RAID組上。其實還有一個辦法是,從每個SSD拿出一個分割槽組成RAID-1,來做系統盤。剩下的分割槽來儲存Ceph Journal,但是不做RAID。

 

不過這樣有可能會導致一種糟糕的狀況。當SSD放了10個或更多OSD Journal,它們和作業系統共享同一個SSD,如果有一段時間大家的讀寫很頻繁的時候,Ceph的效能會受到影響。比如某個主機掛了,冗餘機器開始掃描資料做恢復,這個時候,其他OSD的效能就很差了,因為分到的頻寬很少了。

 

那麼,使用RAID-1來保護Journal就好一點嗎?因為Ceph目前必須要掃描整個OSD檔案儲存器才能恢復Journal,所以只要Journal丟了,那OSD也就沒了,必須要掃描整個磁碟慢慢恢復。但是RAID-1有個缺點就是每次寫都要寫兩遍。其實有個更好的辦法就是把所有的OSD Journal分成兩撥,分別放到兩個SSD,這樣,壞掉一個,還有一半的Journal是好的。

 

Ceph還有個Monitor,MON,主要作用是維持叢集的主副本對映圖,可以查詢同步操作時的最新版本的對映圖。利用的key/value儲存快照和迭代器,執行OSD的同步。如果MON和OSD在同一個SSD上時,如果SSD變慢,那麼MON也就掛掉了,如果有備份MON的話,操作不受影響。

 

如果要用SSD和HDD來部署Ceph的話,那麼最終的結論是:

  1. 每個節點的OSD不要太多,小於8個比較合適,這種情況下Journal放在SSD效果比較好。原因就是SSD Journal多了,效能就受影響。
  2. 假如OSD實在太多,那就不要用SSD儲存Journal,用HDD可能更好一點。或者說把OS裝在HDD上,然後用沒有RAID的SSD儲存OSD Journal。
  3. 用一些專用的MON。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/196700/viewspace-2151931/,如需轉載,請註明出處,否則將追究法律責任。

相關文章