Ceph BlueStore
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.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
$ lsblk … sdf 8:80 0 3.7T 0 disk ├─sdf1 8:81 0 100M 0 part /var/lib/ceph/osd/ceph-75 └─sdf2 8:82 0 3.7T 0 part … $ df -h … /dev/sdf1 97M 5.4M 92M 6% /var/lib/ceph/osd/ceph-75 … $ ls -al /var/lib/ceph/osd/ceph-75 … lrwxrwxrwx 1 ceph ceph 58 Aug 8 18:33 block -> /dev/disk/by-partuuid/80d28eb7-a7e7-4931-866d-303693f1efc4 … |
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.
1 2 |
$ mkdir /mnt/foo $ ceph-objectstore-tool --op fuse --data-path /var/lib/ceph/osd/ceph-75 --mountpoint /mnt/foo |
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.
1 |
ceph-disk prepare /dev/sdb --block.db /dev/sdc |
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.
1 |
ceph-volume lvm prepare --bluestore --data <device> --block.wal <wal-device> --block.db <db-device> |
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.
Dr. Hüseyin Çotuk, 15 yılı aşkın süredir IT alanında farklı kademelerde birçok görevde bulunmuş kıdemli bir bilişim uzmanıdır. Üniversite, kamu ve özel sektörde Ar-Ge mühendisliği, yazılım mühendisliği, ağ ve sistem yöneticiliği, bilgi işlem yöneticiliği dahil birçok pozisyonda tecrübeye sahiptir. Özellikle Linux, Solaris, Free BSD işletim sistemlerinde hatırı sayılır deneyime sahip olan Hüseyin, kendisini açık kaynak kodlu ve özgür yazılımlar konusunda geliştirmiş, bu alanda uzmanlaşmıştır. Doktora derecesini 2013 yılında TOBB Ekonomi ve Teknoloji Üniversitesi Bilgisayar Mühendisliği’nden birincilikle alan Hüseyin, yüksek lisans eğitimini yine aynı üniversitede ve bölümde 2008 yılında yine birincilikle tamamlamıştır. Son yıllarda çalışmalarını bulut teknolojileri ve dağıtık depolama sistemleri üzerine yoğunlaştırmış ve bu konuda ciddi tecrübe edinmiştir. Hüseyin, 2016 yılından beri, OpenStack Foundation tarafından verilen “Certified OpenStack Administrator – COA” sertifikasına sahiptir. Dağıtık depolama teknolojilerinde özellikle Ceph tarafında kendisini geliştirmiş ve bu alanda söz sahibi olmuştur. Özel sektörde farklı coğrafik bölgelerde çalışan bir çok OpenStack ve Ceph kümesini yönetmektedir. Güncel ilgi alanları arasında bulut teknolojileri, büyük veri, yapay zeka ve container teknolojileri bulunmaktadır. Hüseyin, ülkemizde açık kaynaklı ve özgür yazılımların kullanımını yaygınlaştırmak ve bu konudaki bilgi birikimini artırmak üzere gönüllü olarak farklı etkinliklerde bilgi paylaşımında bulunmaktadır.