Ceph Software Defined Storage Cluster Setup

Doguspeynirci
Arabam Labs
Published in
6 min readOct 27, 2023

Günümüzde veri büyüklüğü ve karmaşıklığı hızla artmaktadır. Bu büyümeyle birlikte, verileri güvenilir bir şekilde depolamak, yönetmek ve erişmek giderek daha büyük bir zorluk haline gelmektedir. İşte tam bu noktada Ceph devreye girer. Ceph, dağıtık bir depolama sistemi olarak, verilerinizi güvenilir, ölçeklenebilir ve yüksek performanslı bir şekilde saklamanıza olanak tanır. Ceph, özellikle bulut bilişim ve büyük veri projeleri için ideal bir çözümdür ve aynı zamanda açık kaynaklı bir platform olarak geniş bir topluluk tarafından desteklenmektedir.

Bu makalede, Ceph’in kurulumu, yapılandırılması konularını ele alacağız.

Ceph’in ana özellikleri;

  1. Dağıtık ve Ölçeklenebilir Mimarisi
  2. Veri Repikasyonu ve Yedekleme
  3. Veri Tutarlılığı ve Bütünlüğü
  4. Nesne, Blok ve Dosya Depolama
  5. Açık Kaynak ve Topluluk Desteği
  6. Veri Erişim ve Paylaşımı
  7. Yüksek Performans ve Düşük Gecikme Süreleri

Ceph hangi bileşenlerden oluşur ?

  1. RADOS (Reliable Autonomic Distributed Object Store): RADOS, verileri depolamak, çoğaltmak ve dağıtmak için kullanılan bir dağıtık nesne depolama sistemidir. RADOS, veri depolamak için OSD’leri (Object Storage Devices) kullanır.
  2. OSD (Object Storage Device): OSD’ler, fiziksel depolama aygıtları veya sanal disklerdir. Bu aygıtlar, verilerin depolandığı ve yönetildiği yerlerdir. Ceph depolama kümeleri genellikle birçok OSD içerir. Her OSD, RADOS’a ait verilere erişim sağlar ve verilerin güvenilir bir şekilde depolanmasını sağlar.
  3. Ceph MON (Monitor) Servisleri: Monitor servisleri, Ceph depolama cluster’ın durumunu izleyen ve cluster konfigürasyon bilgilerini tutan bileşenlerdir. Bu servisler, Ceph depolama kümesinin sağlığını takip eder ve OSD’lerin eklenmesi veya çıkarılmasını yönetir.
  4. MDS (Metadata Server): MDS, Ceph dosya sistemleri (CephFS) için kullanılan bir bileşendir. CephFS, dosya ve dizinlerin depolanmasını ve yönetilmesini sağlar. MDS, verilerin yerel olmayan dosya sistemlerinde kullanılmasını destekler.
  5. Ceph Rados Gateway (RGW): RGW, Ceph depolama sistemiyle ilişkilendirilen bir RESTful nesne depolama servisidir. Bu, nesnelerin HTTP üzerinden erişilmesini ve yönetilmesini sağlar. RGW, uygulamaların Ceph depolama sistemine HTTP aracılığıyla erişmesini kolaylaştırır.
  6. Ceph Block Device (RBD): Ceph Block Device, Ceph depolama kümelerine blok seviyesinde erişim sağlayan bir bileşendir. Bu, özellikle sanal makineler (VM’ler) ve blok depolama cihazları için kullanışlıdır. Ayrıca, kubernetes operator’ünü kullanarak bir bulut altyapısı gibi, statefulset uygulamalarınıza direk block depolama cihazı bağlayabilirsiniz.
  7. CephFS (Ceph File System): CephFS, dosya ve dizinlerin depolanması ve yönetilmesini sağlayan bir ağ dosya sistemidir. Bu, POSIX uyumlu bir dosya sistemidir ve birden çok sunucu üzerinden dosyalara erişim sağlar.

Hardware Requirements

  1. CPU
  • İşlemci hızı ve çekirdek sayısı iş yükünüze bağlıdır. Özellikle yoğun IOPS gerektiren uygulamalar daha fazla işlemci gücü gerektirebilir.
  • Birden fazla OSD düğümü veya Ceph MON düğümü kullanıyorsanız, işlemci gereksinimleri artar.
  • OSD düğümleri veri çoğaltma ve dağıtma işlemlerini yürüttüğü için yüksek işlemci gücüne ihtiyaç duyabilirler.

2. Memory

  • Bellek, OSD’lerin çalışmasında ve veri işleme işlemlerinde önemlidir. Özellikle büyük veri işleme işlemleri veya yüksek talepler altında daha fazla bellek gerekebilir.
  • Ceph MON düğümleri, küme durumunu takip etmek için daha fazla bellek gerektirebilir.

Genelde başlangıç ​​olarak, her OSD düğümü için en az 2GB RAM önerilir. Ancak, iş yükünüze ve küme boyutunuza bağlı olarak daha fazla bellek gerekebilir. İşlemci gereksinimleri, aynı şekilde iş yükünüze ve OSD sayısına bağlı olarak değişir.

For Production

Total RAM required = [number of OSDs] x (4 GB (per TB) + osd_memory_target) + 16 GB
Total RAM required = 3 OSDs x (4GB + 8GB) + 16GB = 52GB

Disable Swapping on All Nodes

[root@all-servers ~]# sudo swapon --show
[root@all-servers ~]# free -h
[root@all-servers ~]# sudo swapoff -a
[root@all-servers ~]# sudo rm /swap.img
[root@all-servers ~]# sudo vim /etc/fstab >> Comment Swp Line
[root@all-servers ~]# sudo swapon --show
[root@all-servers ~]# sudo swapoff -a

Install Docker on All Nodes

[root@all-servers ~]# sudo apt-get update
[root@all-servers ~]# sudo apt-get install ca-certificates curl gnupg lsb-release
[root@all-servers ~]# curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
[root@all-servers ~]# echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
[root@all-servers ~]# sudo apt-get update
[root@all-servers ~]# sudo apt-get install docker-ce docker-ce-cli containerd.io -y
[root@all-servers ~]# timedatectl set-ntp true
[root@all-servers ~]# systemctl status systemd-timesyncd
[root@all-servers ~]# hwclock -w

Public ve Cluster Network Requirements

10.60.50.0/24 ile başlayan ip adresleri, fqdn şeklinde tanımlanmış olup public network’ü oluşturacak. 10.243.65.0/24 ile başlayan ip adresleri ise cluster network’ünü oluşturacak.

127.0.1.1 tenant-ceph-mon01.tenant.com tenant-ceph-mon01
10.60.50.11 tenant-ceph-mon01.tenant.com
10.60.50.12 tenant-ceph-mon02.tenant.com
10.60.50.13 tenant-ceph-mon03.tenant.com
10.60.50.14 tenant-ceph-osd01.tenant.com
10.60.50.15 tenant-ceph-osd02.tenant.com
10.60.50.16 tenant-ceph-osd03.tenant.com
10.243.65.103 tenant-ceph-mon01
10.243.65.104 tenant-ceph-mon02
10.243.65.105 tenant-ceph-mon03
10.243.65.106 tenant-ceph-osd01
10.243.65.107 tenant-ceph-osd02
10.243.65.108 tenant-ceph-osd03

Cluster Setup

Aşağıdaki gibi, cluster’ımızı tek node ile initialize edip diğer node’larımızı cluster’a ekleyip diğer ayarları yapıyoruz.

[root@tenant-ceph-mon01 ~]# curl --silent --remote-name --location https://github.com/ceph/ceph/raw/quincy/src/cephadm/cephadm
[root@tenant-ceph-mon01 ~]# chmod +x cephadm
[root@tenant-ceph-mon01 ~]# ./cephadm add-repo --release quincy
[root@tenant-ceph-mon01 ~]# ./cephadm install
[root@tenant-ceph-mon01 ~]# cephadm install ceph-common
[root@tenant-ceph-mon01 ~]# mkdir -p /etc/ceph
[root@tenant-ceph-mon01 ~]# cephadm bootstrap --mon-ip <PUBLIC-IP> --initial-dashboard-user admin --initial-dashboard-password 1q2w3e4r --dashboard-password-noupdate --skip-mon-network
[root@tenant-ceph-mon01 ~]# ceph config set mon cluster_network 10.243.65.0/24

cephadm komutuna alias geçerek linux komut satırında daha rahat bir şekilde komut çalıştırabiliriz. Burası ek bilgi, sürekli cephadm yazmak zor oluyor 🙂

[root@tenant-ceph-mon01 ~]# alias ceph='cephadm shell -- ceph'
[root@tenant-ceph-mon01 ~]# ceph -v

Şimdi sıra diğer monitor ve osd node’larımızı cluster’a eklemeye geldi. Aşağıdaki gibi önce ssh-key authentication yapacak şekilde, ceph’in cluster provisyonu için oluşturduğu public key’leri diğer node’lara kopyalıyoruz. Akabinden host add komutlarıyla sırayla node’larımızı cluster’a ekliyoruz.

[root@tenant-ceph-mon01 ~]# ceph orch host ls
[root@tenant-ceph-mon01 ~]# ssh-copy-id -f -i /etc/ceph/ceph.pub tenant-ceph-mon02
[root@tenant-ceph-mon01 ~]# ssh-copy-id -f -i /etc/ceph/ceph.pub tenant-ceph-mon03
[root@tenant-ceph-mon01 ~]# ssh-copy-id -f -i /etc/ceph/ceph.pub tenant-ceph-osd01
[root@tenant-ceph-mon01 ~]# ssh-copy-id -f -i /etc/ceph/ceph.pub tenant-ceph-osd02
[root@tenant-ceph-mon01 ~]# ssh-copy-id -f -i /etc/ceph/ceph.pub tenant-ceph-osd03
[root@tenant-ceph-mon01 ~]# ceph orch host add tenant-ceph-mon02
[root@tenant-ceph-mon01 ~]# ceph orch host add tenant-ceph-mon03
[root@tenant-ceph-mon01 ~]# ceph orch host add tenant-ceph-osd01
[root@tenant-ceph-mon01 ~]# ceph orch host add tenant-ceph-osd02
[root@tenant-ceph-mon01 ~]# ceph orch host add tenant-ceph-osd03

Şuanda sistem tek monitor node’umuz var. Minimum 3 adet mon node’u atılmalıdır. Unutmayalım, SDS cluster’larda sürekli yedekli çalışmak herşeyden daha önemli. Kötü bir tecrübe ile karşılaşmak istemeyiz.

  • Aşağıdaki komut ile mon management kısmını ceph cluster’a sen yönetme diyoruz. Ardından kendimiz ilgili mon node’larımızı set ediyoruz.
[root@tenant-ceph-mon01 ~]# ceph orch apply mon --unmanaged
[root@tenant-ceph-mon01 ~]# ceph orch host label add tenant-ceph-mon01 mon
[root@tenant-ceph-mon01 ~]# ceph orch host label add tenant-ceph-mon02 mon
[root@tenant-ceph-mon01 ~]# ceph orch host label add tenant-ceph-mon03 mon
[root@tenant-ceph-mon01 ~]# ceph orch daemon add mon tenant-ceph-mon02:<PUBLIC-IP>
[root@tenant-ceph-mon01 ~]# ceph orch daemon add mon tenant-ceph-mon03:<PUBLIC-IP>

Sırada OSD olarak belirlediğimiz ve önceden disk’lerinide eklediğimiz OSD node’larımızı cluster içerisine dahil edeceğiz. Önce available disk’leri listeliyoruz daha sonra aşağıdaki gibi tek tek sisteme dahil ediyoruz. Komutlar yavaş çalışabilir lütfen bu aşamalar sabırlı olalım. 🙂

[root@tenant-ceph-mon01 ~]# ceph orch device ls
[root@tenant-ceph-mon01 ~]# ceph orch daemon add osd tenant-ceph-osd01:/dev/sdb
[root@tenant-ceph-mon01 ~]# ceph orch daemon add osd tenant-ceph-osd01:/dev/sdc

Cluster’ımız baz olarak RBD disk kullanımına hazır hale geldi. Bu yazı serisinin diğer makalelerinde daemon ekleme, daemon silme ve maintenance ve kubernetes entegrasyon işlemlerinden bahsedeceğim.

--

--