Ceph BlueStore

Ceph BlueStore

4 Aralık 2018 Genel 0

Ceph Bluestore

BlueStore, Ceph için geliştirilmiş yeni bir depolama mekanizması olup Luminous sürümünden itibaren OSD’ler oluşturulurken varsayılan yöntem olarak kullanılmaya başlamıştır. Burada Bluestore’un varsayılan olarak kullanılması durumunun topluluk sürümü (community edition) için geçerli olduğunu, bu yazının hazırlandığı tarih itibariyle Ceph’i bünyesinde barındıran Redhat firmasının destek verdiği platformlarda Bluestore kullanımını henüz resmi olarak desteklemediğini ve teknik önizleme (technical preview) durumunda olduğunu belirtmek faydalı olacaktır. Bu nedenle üretim (production) ortamlarında Bluestore’un kullanımı tamamen kullanıcının tercihine bağlı bir durumdur. Topluluktan bildirilen bazı olumlu geri dönüş ve yorumlara rağmen yazının hazırlandığı tarih itibariyle kendi yönettiğim üretim ortamlarında halen journal destekli Filestore kullandığımı, ancak Bluestore ile ilgili gelişmeleri çok yakından takip ettiğimi ve bazı Ar-Ge çalışmaları yaptığımı dipnot olarak düşmek isterim. Son olarak Luminous ve Mimic dahil yeni sürümlerde her ne kadar Bluestore varsayılan depolama mekanizması olsa da, Filestore ile çalışan OSD’lerin sisteme eklenebileceğini hatırlatmak faydalı olacaktır.

FileStore Kısıtlar

Ceph’in ilk sürümlerinden beri kullanılan Filestore mekanizması, tasarlandığı zaman dilimi içerisindeki imkanlar dahilinde geliştirilmiş, teknolojideki gelişmeler doğrultusunda eklenmek istenilen bazı özelliklerin ya eklenmesi mümkün olmamış, ya da optimum şartlarda eklenemediği için bazı kısıtlara maruz kalmıştır. Bu durumda aslen daha iyi performans imkanı olmasına rağmen bazı yeteneklerden taviz vermek zorunda kalınmıştır. Öncelikle mekanik disklerdeki yavaşlığı tolere etmek adına “journal” olarak SSD disklerin kullanılması ve yapılan yazma işlemlerinin SSD diskler vasıtasıyla sıralı hale getirilerek daha iyi performanslarda mekanik disklere yazılması, Filestore mekanizmasının başlıca tasarım prensibi olmuştur. Ancak bu durumda iki kez yazma işlemi yapılması performanstan ödün verilmesine yol açmaktadır. Zaman içerisinde depolama ortamlarında yeni trendlerin ortaya çıkması ve Filestore’un bu ihtiyaçlara tam olarak ayak uydurmakta zorlanması da kullanıcıları bu konuda yeni arayışlara itmiştir. 

Nasıl Ortaya Çıkmıştır?

Genel anlamda Ceph OSD’ler iki ana fonksiyona sahiptir. Birincisi, kümeye yazılan veriyi ağ üzerinden diğer OSD’lere replike etmek. İkincisi de, gelen veriyi yereldeki depolama ortamına (HDD, SSD, NVMe v.b.) yazmak. Yereldeki veri saklama işlemi Filestore ile yapıldığında veri dosyalar halinde ve ekseriyetle XFS dosya sistemi üzerinde tutulur. Buradaki en temel problem ise OSD’lerin “transactional update” denilen işlemlere bağlı güncellemeler üzerine inşa edilmesi ve bunun geleneksel bir dosya sistemi üzerinde oldukça hantal ve verimsiz çalışmasıdır. Bu konuda bir çok tartışma ve araştırmalar yapılmış, gelinen noktada sorunun XFS dosya sisteminden kaynaklanmadığı, sadece bu iş için XFS kullanmanın doğru tercih olmadığı anlaşılmıştır. Karşılaşılan pek çok kısıt ve problemin ortamı POSIX’e uyarlamak için yapılan düzenlemelerden kaynaklandığı tespit edilmiştir.

En önemli motivasyonu ve tasarım amacı iki kez tekrarlanan bu yazma işlemini teke indirmek olan Bluestore, “write ahead log (WAL)” kullanılarak bunu başarmış ve sıfırdan başlanarak yapılan tasarım sayesinde diğer bir çok yeni özelliği de bünyesine eklemiştir. Arada bir dosya sistemi olmadan doğrudan diske erişmesi Bluestore’un en karakteristik özelliğidir. 

Nasıl Çalışır?

Bluestore, bilinen iş yüklerinden yola çıkılarak tüm prensipleri ile tamamen baştan tasarlanarak ortaya çıkmış bir nesne tabanlı depolama mekanizmasıdır. Bluestore, Filestore’un aksine doğrudan doğruya alt katmanda çalışan blok cihaza (diske) entegre edilmiştir. Filestore’da olduğu gibi arada XFS gibi bir dosya sistemi bulunmamaktadır.

Bluestore, kendi metada bilgisini tutmak üzere “RocksDB” adı verilen veritabanına sahiptir. Ayrıca RocksDB’nin dosyaları saklamasına ve bulunduğu blok cihazı paylaşmasına izin veren ve “BlueFS” adı verilen dosya sistemine benzer bir adaptör bulunmaktadır.

Daha önce kullanılan Filestore mekanizması ile arasında “partition” ve “mount point” açısından büyük farklılıklar bulunmaktadır. Filestore kullanılan bir OSD için blok cihazların görüntüsü aşağıdaki gibi olmaktadır. Örnek “lsblk” komutu çıktısı aşağıda görülmektedir.

Görüldüğü gibi her blok cihaz (disk) üzerinde bir partition açılmış ve ilgili OSD bu bölüme mount edilmiştir. “df” komutu ile bakıldığında bu bölümlerin ilgili OSD’lere bağlandığı görülebilir.

Her bölüm altında da aşağıdakine benzer dosyalar bulunmaktadır.

Burada OSD’nin bağlandığı journal diske bir sembolik link olduğu görülmektedir. Bu OSD içerisindeki tüm aktif nesneler ise “current” isimli klasör içerisinde yer almaktadır.  

Bluestore doğrudan blok cihazları kullandığı için işler biraz daha farklı yürümektedir. Örneğin “lsblk” komutu çıktısında disk üzerinde sadece yaklaşık 100 MB boyutunda küçük bir partition açıldığı ve kalan bölümün kullanılmayan bir bölüm olarak kaldığı görülecektir. “df” komutu çıktısında açılan bu bölümün ilgili OSD’ye mount edildiği görülebilir. Dizin içerisine bakıldığında ise doğrudan ilgili diske bağlı “block” isimli bir sembolik link olduğu görülebilir. Bluestore tüm verilerini burada tutmakta ve Linux libaio kütüphanesi vasıtasıyla IO işlemlerini doğrudan blok cihaza yapmaktadır.

Bu durumda Filestore’da olduğu gibi /var/lib/ceph/osd/ceph-xxx dizini içerisinde doğrudan tutulan nesneler görünmemektedir. Ancak halen bu nesnelere erişmenin bir yolu bulunmaktadır. İlgili OSD durdurulduğunda FUSE kullanılarak OSD verisine erişmek mümkündür.

BlueStore Disk Tipleri

Bluestore, Filestore’da olduğu gibi farklı tiplerde diskler ile çalışabilmekte, avantaj olarak SSD ve NVMe gibi hızlı diskleri daha verimli kullanabilmektedir. Filestore kullanımında genelde SSD gibi daha hızlı diskler ile oluşturulan journal sadece yazma işlemleri için değerlendirilmektedir. Bluestore’da ise sadece dahili journal üzerinde veri tutarlılığı için ihtiyaç duyulan performans çok daha düşüktür. Dahili journal sadece bir metadata journal gibi çalışmakta ve yalnızca küçük yazma işlemlerinde kullanılmaktadır. Böylece SSD gibi daha performanslı disklerin geriye kalan kısımları dahili metadatayı saklamak için kullanılabilmektedir.

Bluestore kullanımında üç farklı tipte disk oluşturulabilmektedir.

  • Main Device: Her durumda kullanılan, gerçek veriyi saklayan ve “block” sembolik linkine karşılık gelen blok cihazıdır. Bir çok durumda nesneler ve metadata bu diskte saklanır.
  • DB Device: Opsiyonel olarak eklenen ve büyüklüğü yettiği sürece RocksDB üzerinde metadatayı tutan, “block.db” sembolik linki ile bağlanan blok cihazdır. Büyüklüğü yetmediği zaman metadata “main device” üzerine yazılmaya başlar.
  • WAL Device: Opsiyonel olarak eklenen ve dahili metadata journal yani “Bluestore write ahead log” bilgisini tutan ve “block.wal” sembolik linki ile bağlanan blok cihazdır.

Genel yaklaşım, OSD için olabildiğince büyük miktarda SSD veya NVMe alanını ayırıp bunu “block.db” olarak yani “DB device” olarak kullanmaktır. ceph-disk  komutu ile diski hazırlarken “–block.db” parametresi ile belirtilmektedir.

Varsayılan olarak, ayrıca belirtilmez ise veriyi tutan diskin büyüklüğünün %1’i büyüklükte bir bölüm oluşturularak bu disk ile ilişkilendirilir. Yukarıdaki örnekte, sdb diskinin %1’i kadar büyüklükte bir bölüm sdc diski üzerinde oluşturulur ve sdb diskinin RocksDB metadata bilgisi burada tutulur. Buradaki %1’lik değer ceph.conf içerisinde “bluestore_block_db_size” parametresi ile değiştirilebilir.

Benzer şekilde opsiyonel olarak “WAL device” için de ayrı bir disk kullanılabilir. Örneğin veriyi tutmak üzere SATA veya NL-SAS bir disk, RocksDB metadata için SSD disk ve Bluestore WAL için daha hızlı NVMe disk kullanılabilir. Aynı SSD veya NVMe disk birden fazla mekanik disk için “DB device” veya “WAL device” olarak kullanılabilir. Eğer block.db ve block.wal aynı cihaz üzerinde olacaksa WAL için ayrı bir bölüm açmaya gerek yoktur, Bluestore bunu kendisi yönetir.

Yeni Ceph sürümlerinde Bluestore ile birlikte kullanmak üzere “ceph-disk” komutunun yerini “ceph-volume” almış ve yeni bir çok özellik eklenmiştir. Mantıksal olarak “DB device” ve “WAL device” eklemek için aşağıdaki gibi bir komut kullanılması gerekmektedir.

Eğer elinizde birden fazla disk tipi varsa ve bunları değerlendirmek istiyorsanız “block.db” alanını yeterince büyük tutmak oldukça önemlidir. Ne kadar fazla alan ayrılabilirse performansa etkisi o kadar hissedilecektir. Bununla birlikte, kullanılan genel diskin yani verinin tutulduğu ve genelde mekanik seçilen diskin büyüklüğünün en az %4’ü büyüklükte seçilmesi önerilmektedir. Örneğin mekanik disk 4 TB ise “block.db” alanı en az 160 GB olmalıdır.

Eğer sadece mekanik diskleriniz varsa “block.db” ve “block.wal” için ayrı alanlar oluşturulmasına gerek yoktur. Ceph Bluestore, bunları “block” alanı içerisinde kendisi yönetmektedir.

Ne Kadar Hızlı?

Tamamen çalıştığı ortama ve kullanılan iş yüküne bağlı olmakla birlikte genel olarak Bluestore, Filestore ile karşılaştırıldığında aşağıdaki tespitleri yapmak yerinde olacaktır.

  • İki kez yazma işlemi gerçekleşmediği için Bluestore kullanımında büyük boyuttaki yazma işlemleri genelde iki kat daha hızlı olmaktadır.
  • Bluestore ile küçük boyuttaki rastgele yazma işlemleri, “journal” kullanılan bir Filestore’a göre önemli ölçüde daha performanslı gerçekleşmektedir.
  • Key/value şeklindeki veri tipleri için Filestore kullanıldığında birden bire ortaya çıkan bazı problemler giderildiği için örneğin RadosGW iş yükünde üç kata varan iyileşmeler gözlenmektedir.
  • Bluestore’da snapshot alınan RBD veya CephFS performansları daha verimli gerçekleşmektedir.
  • Sadece küçük boyutlu sıralı (sequential) okuma performansı, ham librados işlemlerinde Filestore ile Bluestore’a göre daha hızlı gerçekleşmektedir.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir