İçerik Erişimi
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.
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.
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.
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.
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
Tebrikler! Artık Ceph Storage sisteminizi sorunsuz bir şekilde ESXi Sisteminize Mount etmiş bulunuyorsunuz.
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;