Ceph Newstore存儲引擎介紹


  在Ceph被越來越多地應用於各項存儲業務過程中,其性能及調優策略也成為用戶密切關注討論的話題,影響性能表現關鍵因素之一即OSD存儲引擎實現;Ceph基礎組件RADOS是強一致、對象存儲系統,其OSD底層支持的存儲引擎如下圖所示:

其中,ObjectStore層封裝了下層存儲引擎的所有IO操作,向上層提供對象(object)、事務(Transaction)語義的接口,MemStore為基於內存的實現;KeyValueStore主要基於KV數據庫(如leveldb, rocksdb等)實現接口功能,事務實現也基於KV數據庫自身;FileStore是Ceph目前默認的存儲引擎(也是目前使用最多的存儲引擎),其事務實現基於Journal機制(Journal文件或塊設備);除了支持事務特性(consistency、atomic等)外,Journal還可將多個小IO寫合並為順序寫Journal,以提升性能。

  在社區使用過程中,FileStore也暴露了若干問題:(1)Journal機制使一次寫請求在OSD端變為兩次寫操作(同步寫Journal,異步寫入object);(2)對前一個問題,社區通常做法是使用專門設備(如SSD)用作Journal以解耦Journal和object寫操作的相互影響,但持續循環寫入Journal會降低SSD設備的使用壽命;(3)寫入的每個object都一一對應OSD本地文件系統的一個物理文件,對於大量小object存儲場景,OSD端無法緩存本地所有文件的inode等元數據,使讀寫操作可能需要多次本地IO,系統性能差;(4)object對應的本地物理文件的文件名,包含了object name、rados namespaces、object name hash、snapshot等信息,可能會超過本地文件系統對文件名長度的限制。

  面對上述問題,新的存儲引擎NewStore(又被稱為KeyFileStore)出現,其關鍵數據結構如下圖所示:

其主要特點有:(1)解耦object與本地物理文件間的一一對應關系,通過索引結構(上圖中ONode)在object和本地物理文件建立映射關系,並使用KV數據庫存儲索引數據;(2)在保證事務特性的同時,對於object的create/append/overwrite(fragement aligned)操作,無需Journal支持;(3)對於unaligned update操作,先同步寫入write-ahead-log(簡稱為WAL,使用KV存儲),再異步寫入相應的fragement文件;(4)在KV數據庫上層建立Onode數據cache以加速讀取操作;(5)單個object可以有多個fragement文件,多個object也可共存於一個fragement文件

  FileStore的上述問題,在NewStore結構中已基本解決;NewStore還采用以下策略來減小WAL的性能開銷:(1)在update寫入fragement文件后,立即將相應WAL從KVdb中刪除(WAL已完成使命,無需保存);(2)增大KVdb的write buffer,盡量將WAL保留在buffer中,避免不必要的dump;(3)在write buffer數據dump到磁盤前,強制合並多個buffer數據,以避免不必要的dump。在初步的隨機讀寫測試中,NewStore相對於FileStore有60%的性能提升;

  本博客的上篇博文《海量小文件存儲與Ceph實踐》從元數據管理本地存儲引擎兩個方面對海量小文件存儲問題進行了分析描述,並通過object class接口層對FileStore存儲結構做了改進優化,雖不如NewStore徹底,但也在很大程度上優化了小文件存儲性能;NewStore則直接在存儲引擎層進行重新設計實現,解耦object與本地物理文件間的對應關系,並允許多個object共存於一個fragement文件;但二者對小文件本地存儲引擎優化的本質思想是相通的,即合並存儲+索引;不過目前NewStore還在密集開發階段,到線上部署還需要一段時間;相信以后隨着NewStore引擎的逐步部署與成熟,海量小文件存儲難題也不再是難題。

  另外,基於object class接口層的改進優化方案相關代碼實現已放到github,歡迎測試使用及批評指正。

 

參考:

圖片和相關內容摘自2015年6月份Beijing Ceph Day《Newstore》講稿

http://thread.gmane.org/gmane.comp.file-systems.ceph.devel/23414/focus=23417

http://docs.ceph.com/docs/master/rados/configuration/journal-ref/

http://www.sebastien-han.fr/blog/2014/02/17/ceph-io-patterns-the-bad/

http://tracker.ceph.com/projects/ceph/wiki/Optimize_Newstore_for_massive_small_object_storage

http://www.cnblogs.com/wuhuiyuan/p/ceph-small-file-compound-storage.html

http://www.wzxue.com/ceph-filestore/

http://www.wzxue.com/ceph-keyvaluestore/

https://github.com/yxgup/ceph/tree/omap_indexed_compound

------------------------------------

http://www.cnblogs.com/wuhuiyuan/p/4907984.html

個人原創,轉載請注明出處。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM