CEPH Storage Kurulumu / Linux – ESXi ye Disk Eklenmesi

Ceph Storage Kurulum, Ubuntu, CentOS7 Mount ve ESXi Datastore olarak kullanım

Merhaba Arkadaşlar,

Bu makalede Ceph Storage için kurulum prosedürlerini ve örnek bir ESXi sistemine datastore olarak nasıl ekleneceğini işleyeceğiz.

Öncelik ile Bu yapı için, en az 4 sunucu gereksinimimiz olacaktır. Bunlar;

Admin / Deploy Node

Monitor Node

Storage Node 1

Storage Node 2..

Gibi olup, Her node ayrı bir sunucuyu belirtmektedir. Storage Node’ları için ihtiyacınız ne ise o şekilde düzenleyebilir, ek sunucular kurabilir yahut çalışan yapıya ihtiyacınız olduğunda rahatlıkla yeni Storage Node’u ekleyebilirsiniz.

Anlatımlarda 4 sunucunun da halihazırda kurulu ve SSH’ın aktif olduğunu varsayarak ilerleyeceğim.

Ön Ayarlar

Herşeyden önce, OS diskiniz ve Ceph Storage üzerinde kullanıma sunmayı planladığınız diskin ayrı olması gerekdiğini belirtmek isterim. OS diskindeki alan kullanımda olmayacaktır. Kullanıma sunmayı planladığınız Storage diskinde ise hiçbir veri olmamalıdır.

İlk olarak Admin / Deploy Node’unun kurulumunu gerçekleştiriyoruz.

Ben kurulumlarda Ubuntu 16.04.4 kullandım ancak ihtiyacınıza göre OpenSUSE yahut RHEL/CentOS ta kullanabilirsiniz. Anlatım Ubuntu üzerinden olacaktır,

Öncelik ile Ceph Release key’i ekliyoruz;

wget -q -O- 'https://download.ceph.com/keys/release.asc' | sudo apt-key add -

Ardından, repomuza Ceph paketlerini ekliyoruz.

echo deb https://download.ceph.com/debian-{ceph-stable-release}/ $(lsb_release -sc) main | sudo tee /etc/apt/sources.list.d/ceph.list

Ardından repomuzu update ederek ceph-deploy kurulumu gerçekleştiriyoruz.

sudo apt update
sudo apt install ceph-deploy

Bu işlemler ile Admin / Deploy nodunun ilk kurulumunu tamamlamış olduk.

NOT: Secure Linux (Selinux) aktif ise mutlaka devredışı bırakmalısınız. (Ubuntu üzerinde system utils kurmadı iseniz otomatik disable gelir.)
NOT: Seknronizasyon sorunu yaşanmaması için Tüm node’lara ntp server kurulumunu ihmal etmemeniz gerekiyor.

apt install ntp
/etc/init.d/ntp start

Bu aşamada öncelik ile, Admin / Deploy Node’unun sunuculara hostname ile erişebilmesi lazım.

Ben node’lara,

Admin Node – ceph

Monitor Node – monitor

Storage Node 1 – node1

Storage Node 2 – node2

Şeklinde Hostname tanımladım.

Admin / Deploy nodu üzerinde /etc/hosts içerisine girerek IP – Hostname şeklinde giriyoruz;

93.187.202.212 monitor ceph.monitor
93.187.202.235 node1 ceph.node1
93.187.202.231 node2 ceph.node2

Erişimi ping node1 diyerek test edebilirsiniz.

Bu işlemin ardından Monitör ve Storage nodeları üzerinde Admin/Deploy nodunun erişeceği kullanıcıları oluşturuyoruz ve şifrelerini belirliyoruz.

useradd -d /home/cephusr -m cephusr
passwd cephusr

Ve İlgili kullanıcıların sudo yetkisi olduğuna emin oluyoruz. Sudo yetkisi kazandırmak için;

echo "cephusr ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/cephusr
sudo chmod 0440 /etc/sudoers.d/cephusr

İşlem ardından Şifresiz SSH erişimini bu kullanıcılar için aktif etmemiz gerekecektir. ceph-deploy komutu şifre girmez, bu yüzden ssh key generate etmemiz gerekiyor.

Admin nodunda ssh-keygen komutunu çalıştırın.

(passphrase boş bırakılacak)

ssh-keygen

Generating public/private key pair.
Enter file in which to save the key (/ceph-admin/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /ceph-admin/.ssh/id_rsa.
Your public key has been saved in /ceph-admin/.ssh/id_rsa.pub.

Ardından tüm Node’lara keyi yüklemeliyiz.

ssh-copy-id cephusr@node1
ssh-copy-id cephusr@node2
ssh-copy-id cephusr@monitor

Şifreleri soracaktır, şifrelerini girmenizin ardından artık Admin nodu, tüm node lara ssh üzerinden şifre gereksinimi olmadan erişim sağlayabilecektir.

Kontrol için;

ssh cephusr@monitor

Komutunu kullanabilir, erişebildiğini doğrulayabilirsiniz.

Bu işlemin ardından ceph-deploy’un SSH bağlantısında cephusr kullanıcısını çalıştırabilmesi için, Admin / Deploy Node üzerinde config dosyası oluşturuyoruz;

nano /etc/.ssh/config

Ve içerisini aşağıdaki şekilde düzenliyoruz;

Host node1
   Hostname node1
   User {username}
Host node2
   Hostname node2
   User {username}
Host node3
   Hostname node3
   User {username}

Bu benim yapılandırmam için aşağıdaki şekildedir;

Host monitor
  Hostname monitor
  User cephusr
Host node1
  Hostname node1
  User cephusr
Host node2
  Hostname node2
  User cephusr

Böylece düz SSH ile bağlanmak istediğinde otomatik root a yönlendirilmeyecek, cephusr kullanıcısına yönlendirilecektir.

Bu işlemler ile ön hazırlıklarımızı tamamlamış olduk. Artık konfigürasyona başlayabiliriz.

Storage Cluster yapısının oluşturulması

Admin nodu üzerinde, ceph-deploy komutunun otomatik oluşturduğu konfigürasyon dosyaları ve keylerin tutulması için bir klasör oluşturuyoruz.

mkdir my-cluster
cd my-cluster

NOT: ceph-deploy komutu, çıktıyı bulunduğu klasöre aktaracağı için kullanırken daima my-cluster klasöründe yahut siz cluster adını ne şekilde belirledi iseniz, o klasörde olmalısınız.

NOT: Başka bir kullanıcı ile giriş yapmış iken sudo kullanmamalısınız.

Artık Cluster oluşturma işlemine başlayabiliriz.

Test için ufak bir journal oluşturarak devam ediyoruz.

/my-cluster/ceph.conf içerisinde, en alta;

[osd]
osd_journal_size = 2000

Şeklinde ekliyoruz.

Deploy işleminden sonra Journal oluşmuş olmalı. Eğer herhangi bir hata alıyor iseniz conf dosyasında yahut kurulumda yanlışlık gerçekleştirmiş olmalısınız, tekrar kontrol etmeniz gerekmektedir.

Şimdi deploy işlemini my-cluster klasörü içerisinde iken gerçekleştirerek cluster’i oluşturalım;

ceph-deploy new monitor node1 node2

Ben şahsen aşağıdaki hatayı aldım;

bash: python: command not found
[ceph_deploy][ERROR ] RuntimeError: connecting to host: monitor resulted in errors: IOError cannot send (already closed?)

Bunun sebebi de ceph-deploy’un phyton ile çalışması ve sunucularda phyton bulunmamasıdır.

Tüm sunuculara aşağıdaki komut ile phyton kurulumu gerçekleştiriyoruz;

sudo apt install python-minimal

Bu işlemin ardından ceph-deploy new nodex nodex nodex komutunu tekrar uyguluyoruz. Sorunsuzca tamamlanmış olmalı.

Ardından node’lar üzerine kurulumu sağlıyoruz;

ceph-deploy install node1 node2 node3

İşlem tamamlandığında Ceph, her node’a kurulmuş olacaktır.

Ardından monitör sistemi için ön hazırlık yapıyoruz,

ceph-deploy mon create-initial

Bu komut keyleri toplayacaktır ve my-cluster klasörünüzde;

  • ceph.client.admin.keyring
  • ceph.bootstrap-mgr.keyring
  • ceph.bootstrap-osd.keyring
  • ceph.bootstrap-mds.keyring
  • ceph.bootstrap-rgw.keyring
  • ceph.bootstrap-rbd.keyring

Dosyaları oluşmuş olacaktır.

Bu aşamada, Konfigürasyon dosyaları ve admin key’i node lar arası haberleşme için Deploy node’undan diğer nodlarınıza konfigürasyonları ile aktarmanız gerekiyor.

ceph-deploy admin monitor node1 node2

Ardından Node’larınızdaki diski OSD olarak eklemelisiniz.

Ekleme komutu;

ceph-deploy osd create –data {device} {ceph-node}

Formatındadır. Buradaki Device, Node larınız üzerindeki OS diskiniz değil, Storage yapısına sağlayacağınız 2. diskleriniz olacaktır. Komut benim için;

ceph-deploy osd create –-data /dev/sdb monitor
ceph-deploy osd create –-data /dev/sdb node1
ceph-deploy osd create –-data /dev/sdb node2

Şeklindedir.

Eğer bu komut ile OSD leri oluşturamadı iseniz, Manuel olarak zap’lamanız (Formatlamanız) ve hazırlamanız gerekiyor. Bunun için de komut;

ceph-deploy disk zap {osd-server-name}:{disk-name} Formatında yani;
ceph-deploy disk zap monitor:sdb

Gibi. Zap işlemi ardından OSD mizi hazırlıyoruz;

ceph-deploy osd prepare {node-name}:{data-disk} Formatında yani;
ceph-deploy osd prepare monitor:sdb
ceph-deploy osd prepare node1:sdb
ceph-deploy osd prepare node2:sdb

Şeklinde.

Bu işlem sadece OSD leri hazırlamakta olup, aktif etmemektedir. Aktif etmek için;

ceph-deploy osd activate {node-name}:{data-disk-partition} Formatında Yani;
ceph-deploy osd activate monitor:/dev/sdb1
ceph-deploy osd activate node1:/dev/sdb1
ceph-deploy osd activate node2:/dev/sdb1

Komutları ile Ceph Storage sistemimizin Storage görevini görecek olan OSD lerimizi yayına alıyoruz.

Bu aşamada artık Monitör Node’umuza görevini belirtebilir, Sisteme Monitör olarak atayabiliriz.

ceph-deploy mon add MONITOR-NODE Formatında yani;
ceph-deploy mon add monitor

Bu, Birden fazla monitör nodu eklemek için;

ceph-deploy mon add MONITOR-NODE1 MONITOR-NODE2 Formatında yani;
ceph-deploy mon add monitor1 monitor2

Şeklinde olacaktır.

NOT: Güvenlik için birden fazla monitör nodu eklemeniz durumunda bu node lar birbirleri ile senkronize olarak quorum oluşturacaklardır.

Quorum durumunu;

ceph quorum_status --format json-pretty

Komutu ile inceleyebilirsiniz.

NOT: Güvenlik ve Yedeklilik için birden fazla monitör eklemeniz ŞİDDETLE tavsiye edilmektedir. Aksi halde bir monitör fail verdiğinde, monitör sunucusunda herhangi bir sorun oluşur ise Ceph Storage sisteminiz susacak, çalışmayı durduracaktır. En az 2. bir monitör nodu eklemeniz, hasarlı sunucuyu onarana kadar sistemin durmaması için önemlidir. Anlatımı sadeleştirmek ve minimal tutmak için tek monitör kullanılmıştır.

NOT: Monitor eklemeye çalışır iken;

accepter.accepter.bind unable to bind to 6789: (98) Address already in use

Ya da

[ceph_deploy][ERROR ] GenericError: Failed to add monitor to host: monitor

Şeklinde hata alır iseniz Monitor node üzerinde

cd /var/lib/ceph/mon
rm -rf *

Komutunu uygulamanız, Admin node’u üzerinde de

rm -rf /var/run/ceph/ceph-mon.monitor.asok

Komutunu uygulayarak lock’u silmeniz gerekmektedir. Bu hatalar, bir yerde hatalı konfigürasyon olduğu için monitör ekleyemediğini belirtir. Ardından tekrar;

ceph-deploy mon add MONITOR-NODE Formatında yani;
ceph-deploy mon add monitor

Komutu ile monitörünüzü/monitörlerinizi tekrar eklemeyi deneyerek başarılı bir şekilde ekleyebilirsiniz.

CephFS kurulumu

ODS lerimizi yarattığımız, monitörümüzü eklediğimize göre artık Linux/Unix sistemlerine mount edilebilen CephFS sistemini oluşturabiliriz.

Ben Metadata nodu olarak monitör nodumu kullandım. Ancak dilerseniz ek bir sunucuyu, örneğin metadata nodunu sisteme ekleyerek görevi ona da atayabilirsiniz.

Anlatım sadeliği ve monitöre çok yük düşmediği için ben monitör nodunu tercih ettim.

Komutumuz;

ceph-deploy mds create Metadata Node Formatında yani benim için;
ceph-deploy mds create monitor

Şeklindedir. İşlem ardından İlgili Node üzerinde,

ceph mds stat

Komutunu kullanarak sistemin up olduğunu, standby da beklediğini görebiliyor olmalıyız.

mds
Metadata node’unu kontrol

Ardından Monitör nodumuzda Cephfs için gerekli olan datapool ve metadatayı yaratmalıyız.

ceph osd pool create cephfs_data 128
ceph osd pool create  cephfs_metadata 128

İşlem ardından bu pool’u kullanan mycephsfs isimli bir dosya sistemi yaratmak için aşağıdaki komutu kullanıyoruz;

ceph fs new mycephfs cephfs_metadata cephfs_data

Aşağıdaki komut ile oluştuğunu gözlemleyebiliriz;

ceph fs ls

Bu işlemler ile Ceph Storage sistemimiz üzerinde, mycephfs adında bir dosya sistemi yaratmış olduk. Artık bu dosya sistemini mount edebiliriz.

Linux Üzerine Mount Etme

Bu işlem çok basittir.

Öncelik ile, Sunucuya ceph-common paketi kurulmalıdır.

CentOS 7 için;

CentOS 7 sisteminde ve repolarında ceph yerleşik olarak bulunmamaktadır. Ancak işlem için Epel Reposunu kullanabiliyoruz.

Aşağıdaki komutlar ile Epel reposu sunucuya tanımlanır,

yum -y install epel-release
rpm -Uhv http://download.ceph.com/rpm-jewel/el7/noarch/ceph-release-1-1.el7.noarch.rpm

Ardından aşağıdaki komutları kullanarak ceph-common paketini kurabilirsiniz.

yum -y update
yum -y install ceph-common

Bu işlemler ardından öncelik ile /etc/hosts dosyasını Admin / Deploy Node’unda olduğu gibi hostname leri çözümleyecek şekilde düzenlemelisiniz.

Bu benim için daha önce de belirtmiş olduğum gibi;

93.187.202.212 monitor ceph.monitor
93.187.202.235 node1 ceph.node1
93.187.202.231 node2 ceph.node2

Şeklindedir.

Ardından Admin Node’u üzerinde, Admin Secret Key tespit edilir.

cat /my-cluster/ceph.client.admin.keyring | grep "key =" | awk {'print $3'} > admin.secret

Bu komut bize admin.secret dosyasını oluşturacaktır.

Bu admin.secret dosyasını mount edeceğimiz sunucuya aktarıyoruz.

Ardından komutumuz aşağıdaki gibidir;

mount -t ceph MONITOR:PORT,NODE:PORT,NODE:PORT,NODE:PORT:/ /KLASÖR/ -o name=admin,secretfile=/VERİYOLU/admin.secret

Şeklindedir. Bu benim oluşturduğum yapı için;

mount -t ceph monitor:6789,node1:6789,node2:6789:/ /mnt/ -o name=admin,secretfile=/root/admin.secret

Komutları uygulanacaktır.

Tebrikler, CentOS 7 artık Ceph Storage’inizi kullanıyor.

Centos
Ceph Mount Edildi

Her reboot işleminde otomatik mount olması için /etc/fstab içerisine;

NODE:PORT,NODE:PORT,NODE:PORT:/ /MOUNT_EDİLECEK_KLASÖR ceph name=admin,secretfile=/VERİYOLU/admin.secret,_netdev,noatime 0 0

Şeklinde eklenir. Yani bu benim oluşturduğum yapı için;

monitor:6789,node1:6789,node2:6789:/ /mnt ceph name=admin,secretfile=/root/admin.secret,_netdev,noatime 0 0

Şeklindedir. Ardından sunucuyu reboot edip mount olduğunu test edebilirsiniz.

Ubuntu 16.04 için;

Aşağıdaki komutları kullanarak ceph-common paketini kurabilirsiniz.

apt install ceph-common ceph-fs-common -y

Bu işlemler ardından öncelik ile /etc/hosts dosyasını Admin / Deploy Node’unda olduğu gibi hostname leri çözümleyecek şekilde düzenlemelisiniz.

Bu benim için daha önce de belirtmiş olduğumdan biraz değişik çünkü bu sefer admin / deploy nodunu da giriyoruz.

93.187.202.207 ceph ceph.admin
93.187.202.212 monitor ceph.monitor
93.187.202.235 node1 ceph.node1
93.187.202.231 node2 ceph.node2

Şeklindedir.

Ardından Admin Node’u üzerinde, Admin Key ve Admin Secret tespit edilir.

cat /my-cluster/ceph.client.admin.keyring | grep "key =" | awk {'print $3'} > admin.secret

Bu bize admin.secret dosyasını oluşturacaktır.

Bu admin.secret dosyasını açarak içindeki Key kodunu alıyoruz.

Ardından komutumuz aşağıdaki gibidir;

mount -t ceph NODE:PORT,NODE:PORT,NODE:PORT:/ /MOUNT_EDİLECEK_KLASÖR/ -o name=admin,secret=ADMİN_SECRET_KEY

Ubuntu üzerinde Secret File yerine, direkt Secret Code yani admin.secret dosyasının içeriğindeki kodu ADMİN_SECRET_KEY alanına gireceğiz. Benim oluşturduğum yapıda bu;

mount -t ceph monitor:6789,node1:6789,node2:6789:/ /mnt/ -o name=admin,secret=AQDfUjxbIshaMBAArKNSraYVhLc+tlqbtS9M1w==

Şeklindedir ve bu komutları uygulanmıştır.

Tebrikler, Artık Ceph Storage’iniz Ubuntu sunucunuz tarafından kullanılmaktadır.

Ubuntu
Ceph Mount Edildi
Ubuntu
Ceph Mount Edildi

Her reboot işleminde otomatik mount olması için /etc/fstab içerisine;

NODE:PORT,NODE:PORT,NODE:PORT:/ /MOUNT_EDİLECEK_KLASÖR ceph name=admin,secret=ADMIN_SECRET_KEY,_netdev,noatime 0 0

Şeklinde eklenir. Yani bu benim oluşturduğum yapı için;

monitor:6789,node1:6789,node2:6789:/ /mnt ceph name=admin,secret=AQDfUjxbIshaMBAArKNSraYVhLc+tlqbtS9M1w==,_netdev,noatime 0 0

Şeklindedir. Ardından sunucuyu reboot edip mount olduğunu test edebilirsiniz.

ESXi Üzerine Datastore Olarak Mount Etme

Bu işlem standart bir Linux kurulumuna mount etmekten çok daha zahmetlidir. Çünkü Ceph Storage sistemi tek başına ESXi’nin gözlemleyebileceği bir yapıda değildir.

Bunun için öncelik ile bir iSCSI Gateway sunucusu ya da NFS Gateway sunucusu kurulmalı ve konfigüre edilmeli, CEPH Storage bu sunucu üzerinde ESXi’nin okuyabileceği şekilde ESXi ye mount edilmelidir. Kabaca Ceph için bir aracı, bir Gateway sunucusu kurmamız gerekiyor.

Bu işlem için de NFS Gateway olarak Ubuntu 16.04.4 kullanacağım. iCSCI için Ubuntu, PetaSAN, OpenSUSE, CentOS/RHEL gibi alternatiflerimiz mevcut ancak iCSCI üzerindeki araştırmalarımda yeterli verim alamadığım için es geçiyorum.

NFS Gateway

Bu işlem için Admin/Deploy Node, Monitor Node, Node1 ve Node2 dışında 5. bir sunucunun default olarak hazır kurulu olduğunu varsayıyorum. Anlatımımda Ubuntu’dan yola çıkacağım.

Öncelik ile,  “Ubuntu 16.04 için” başlığındaki tüm adımları gerçekleştirerek Ceph Storage yapınızı, Ubuntu sunucunuza mount ettiğinizi varsayıyoruz.

Eğer henüz mount etmedi iseniz, buraya tıklayarak makalede ilgili bölüme ulaşabilirsiniz.

Öncelik ile sunucumuza NFS Server kuralım;

apt-get -y install portmap nfs-kernel-server

Kurulum tamamlandığında /etc/exports dosyasını düzenleyeceğiz.

Burada, ESXi Sunucumuzun IP Adresini belirterek NFS ye açacağımız klasörü, benim oluşturduğum yapı için /mnt klasörünü belirteceğiz.

nano /etc/exports

Dosya içerisine, en altına;

/NETWORKE_AÇILACAK_KLASÖR_VERİYOLU  000.000.000.000(rw,async,no_subtree_check) Formatında Yani;

/mnt 93.187.202.230(rw,async,no_subtree_check)

Formatında ekleyeceğiz.

NFS
Mount edilmiş ceph’i NFS ye açmak

Ardından,

exportfs -ra

Komutunu kullanıp NFS Servisimizi restart ediyoruz.

/etc/init.d/nfs-kernel-server restart

Tebrikler, Artık CephFS yapınızı NFS üzerinden networke açtınız!

ESXi Sistemine NFS Disk Ekleme

Ben kurulum ve testlerimde VMWare 6.7 kullandım. Anlatımı da bunun için gerçekleştireceğim.

İşlemler için, ESXi Web arayüzünüze giriş yapınız.

Storage
> New Datastore

Şeklinde ilerleyiniz.

Mount NFS Datastore

İsim = Datastore adı

NFS Server = Sunucu IP si

NFS Share = Veri yolu

NFS Version = NFS 3

Ceph Datastore'u NFS olarak eklemek
Datastore’u eklemek

Tebrikler! Artık Ceph Storage sisteminizi sorunsuz bir şekilde ESXi Sisteminize Mount etmiş bulunuyorsunuz.

Ceph Storage'nin Datastore olarak eklenmesi
Eklenmiş Datastore

Aslında bu bize yeterli olsa dahi NFS Gateway sunucumuzda oluşacak herhangi bir kesinti, VM’lerin de uçması anlamına gelmektedir. Bu yüzden makalenin ilerleyen kısımlarında çok daha güvenli ve yedekli bir yapı olan iCSCI formatını inceleyeceğiz.

Önemli Bilgiler

  • Herhangi bir aşamada herhangi bir node’umuzun sorunlu olduğundan şüphelenecek olur isek sağlık durumunu;
ssh NODE sudo ceph health Formatında Yani;
ssh monitor sudo ceph health
ssh node1 sudo ceph health
ssh node2 sudo ceph health

Şeklinde öğrenebiliriz. Daha detaylı bir analiz için;

ssh NODE sudo ceph -s

Komutu ile analiz sağlayabiliriz.

  • Herhangi bir aşamada geri dönüşü olmayan bir hata yaptığınızı anlarsanız, tüm ceph paketlerini temizleyerek en baştan başlayabilirsiniz.

Bunun için Komutumuz;

ceph-deploy purge {ceph-node} [{ceph-node}]
ceph-deploy purgedata {ceph-node} [{ceph-node}]
ceph-deploy forgetkeys
rm ceph.*

Formatındadır. Ve Admin / Deploy nodunda çalıştırılmalıdır.

Yani bu benim oluşturduğum yapı için;

ceph-deploy purge monitor node1 node2
ceph-deploy purgedata monitor node1 node2
ceph-deploy forgetkeys
rm ceph.*

Formatındadır.

Kaynakça;

Ön Hazırlık

Cluster Deploy

CephFS

Ubuntu NFS Gateway Kurulumu

Yorum yapın

Bu site, istenmeyenleri azaltmak için Akismet kullanıyor. Yorum verilerinizin nasıl işlendiği hakkında daha fazla bilgi edinin.