CEPH 101
Ceph, depolama ortamlarının tamamını bir arada sunan ve depolama sistemlerinin geleceği olarak görülen açık kaynak kodlu bir depolama çözümüdür. Sage Weil adlı öğrencinin doktora tezi olarak başlayan Ceph projesi, geliştirmelere devam edilmesiyle ve özellikle OpenStack ile kullanımı sayesinde depolama dünyasında ciddi önem taşımaya başlamış. En büyük artısı da birden fazla storage alanını kullanıcılara sağlaması. Ayrıca açık kaynak kodlu olması, donanım bağımsız çalışabilmesi, oldukça yüksek performanslara çıkabilmesi sayesinde iyice ön plana çıktığını söyleyebiliriz.
Software defined bir çözümdür. Horizontal olarak çok kolay bir şekilde scale edilebiliyor. Hardware ne olursa olsun veya üzerindeki disk yapılarınız her ne olursa olsun istediğiniz şekilde sistemi büyültüp küçültebiliyorsunuz. Esneklik sağlıyor.
Ceph Mimari Bileşenleri
Ceph; RGW, RBD, CephFS çözümlerini ve görselde yer almasa da iSCSI Gateway çözümünü sağlayabiliyor.
RGW (Rados Gateway): RGW, Ceph’in doğrudan nesne tabanlı depolama ortamına erişmeye olanak veren API servisini sağlayan bileşendir. S3 compatible bir yapıdır. Amazon S3 ile uyumludur (%80 API destekliyor.). OpenStack Swift API ile de uyumludur. Ayrıca RGW üzerinden native NFS paylaşımı da yapılabiliyor.
RBD (Rados Block Device): RBD, Ceph’in nesne tabanlı depolama altyapısı üzerinde çalışan ve sanal sunucular, fiziksel sunucular ve diğer istemcilere blok tabanlı depolama sağlayan katmanıdır. ,
CephFS (File System): Ceph’in nesne tabanlı depolama altyapısını kullanarak istemcilere POSIX uyumlu dosya sistemi vermesini sağlayan katmanıdır. Diğer bileşenlerin aksine CephFS çalışmak için bir metadata sunucusuna ihtiyaç duyar.
LIBRADOS (Native API) : Ceph cluster’ının yerel arabirimidir. Bu yerel arabirimi üzerinde konumlandırılan hizmet arabirimlerini (RGW, RBD, CephFS) içerir.
RADOS (Reliable Autonomic Distributed Object Store) : verileri mantıksal depolama havuzlarında nesne olarak depolar ve bu nesnenin nerede depolanması gerektiğini otomatik olarak ileride bahsedeceğim CRUSH Algoritmasıyla hesaplar.
Genel yapıya baktığımızda RADOS altyapıda storage yazma işleminden sorumludur. RGW, RBD, CephFS ise aslında bizim için clientlar ile haberleşmeyi sağlayan ara katmandır.
OSD (Object Storage Daemons) : OSD bileşenleri veriyi nesne halinde tutmakla yükümlü disklerdir diyebiliriz. 1 disk = 1 OSD gibi düşünebiliriz. Ama bazı durumlarda 1 diskin üzerine birden fazla OSD de olabilir. (Mesela NVMe kullanıyorsanız.) . Bu gibi durumlar için önerilen bir diskin üzerine 2 veya 3 OSD konumlandırılmasıdır.
RAID Controller tarafında destekliyorsa passthrough mod öneriliyor. Eğer desteklemiyorsa RAID 0 ile devam edilmesi gerekiyor.
MON (Monitör): Monitörleri cluster’ın beyni gibi düşünebilirsiniz. Minimum desteklenen monitör sayısı 3'tür. Burada monitör sayısını belirleyen husus cluster’ın büyüklüğüdür. Yedeklilik açısından 3 monitör de farklı hostta çalışmalı. Monitörler üzerinde herhangi bir data tutulmaz.
Ceph Veri Yerleşim Bileşenleri
Ceph üzerinde veri nasıl saklanır diye incelediğimizde bazı anahtar kelimelerin karşımıza çıktığını görüyoruz. Gelin bu ifadeleri detaylıca inceleyelim.
Pool : Nesneleri ortak bir ad etiketi altında saklamak için kullanılan mantıksal bölümlerdir. Poolları oluştururken yerleşim gruplarının (placement groups) sayısını ve replika sayısını, “CRUSH” kuralını belirtmemiz gerekmektedir.
İki tür pool bulunur. Birincisi “replicated pools”, diğeri ise “erasure coded pools”.
PGs (Placement Groups) : Pool ve OSD arasında verileri gruplamak üzere kullanılan yapı taşları.
Ceph’te hem client tarafı hem de storage tarafı aynı bilgiye sahiptir. Client tarafı direk olarak datayı hangi PG’e yazacağını biliyor. Bu yüzden objeyi gönderirken git bu objeyi şu PG’e yaz der. Zaten aynı bilgi Ceph’te de olduğundan hiçbir şekilde sorgu yapmadan yazması gereken OSD’ye datayı yazar.
Bazı hap bilgiler:
- Her bir OSD kesinlikle farklı hostlara gitsin veya farklı racklerdeki hosta gitsin şeklinde yedekleme yapılabiliyor.
- Farklı poollarda farklı replikasyon faktörü kullanılabilir.
- PG’lerde verinin kopyalanacağı sayıyı pool id belirliyor.
- Poollar oluşturulurken her poola PG sayısı atanıyor. Önceden manuel yapılan bu işlem şimdi otomatik olarak yapılıyor. Ayrıca önceden poola atadığınız PG sayısı azaltılamıyorken şimdi bu işlem otomatik olarak gereksinime göre PG sayısını arttırıp azaltılabiliyor.
- VMware için RBD yerine iSCSI de kullanılabilir.
- Bir Ceph clusterına bir CephFS poolu oluşturulabilir. Şu an için birden fazla oluşturulamamaktadır.
- NFS Ganesha : CepFS’in üzerinde bir arakatmandır. Client tarafı ile CephFS’in NFS konuşmasını sağlar. Daha çok OpenStack tarafında kullanılmaktadır.
CRUSH Algoritması (Controlled Replication Under Scalable Hashing)
CRUSH algoritması, bir pool için verilerin tutulacağı OSD’leri seçmek için kullanılır. Ceph üzerinde verinin nereye yazılıp nereden okunacağını bir hesaplama yaparak belirler.
Veri yazma talebi geldiği zaman aşağıdaki sırayla aşağıdaki adımlar gerçekleşir ve replika sayısına göre kopya çıkarılır.
- İstemci tarafından yazılacak veri belirlenir ve Ceph üzerindeki poola yazma talebi gönderilir.
- CRUSH algoritması burada devreye girer ve istemcinin yazması gereken PG ataması belirlenerek atanır.
- Yine CRUSH algoritması kullanılacak PG’yi bir OSD ile eşler. Böylece istemci veriyi birincil olarak belirlenen PG’e (dolayısıyla OSD üzerine) yazar.
- CRUSH Algoritması tarafından belirlenen birincil OSD’ye yazma işlemi tamamlanır,
- Daha sonra verinin kopyası replika sayısına bağlı olarak diğer OSD’lere de yazılır. Tüm kopyalar yazıldıktan sonra istemciye yazma işleminin başarılı olduğu bilgisi dönülür.
Referanslar:
Red Hat CEPH101 Workshop
https://cephturkiye.com/
https://huseyincotuk.com/2017/06/06/ceph-mimarisi-ceph-uzerinde-veri-yerlesimi/
https://docs.ceph.com/
https://docs.deistercloud.com/content/Technology.50/Blob%20storage/Ceph.xml?embedded=true
Originally published at http://kubikolog.com on January 13, 2022.