"CEPH Kurulumu" sayfasının sürümleri arasındaki fark

BulutWiki sitesinden
Şuraya atla: kullan, ara
(Disk read_ahead değerinin Arttırılması=)
 
(Aynı kullanıcının aradaki diğer 26 değişikliği gösterilmiyor)
1. satır: 1. satır:
==İşletim Sistemi Kurulum Öncesi Yapılandırılması==
+
=='''CEPH Kümesi Kurulum ve Yapılandırma'''==
===İşletim sistemi Güncelllenmesi===
+
===Paket Kurulumları===
===/etc/hosts Dosyasının Düzenlenmesi===
+
Ubuntu 16.04 işletim sistemi üzerinde güncel olan CEPH Mimic (13.2.0) kurulumu burada anlatılmaktadır.
Sunucuların birbirinden haberdar olması için /etc/hosts dosyasına sunucu bilgileri  IP hostname olacak şekilde eklendi.
+
* Kurulum dökümanı her bir OSD host üzerinde 12 adet fiziksel disk bulunan, ayrıca nvme SSD yer alan 4 ayrı sunucu üzerinde anatılmaktadır (zula209, zula210, zula211 ve zula212).
===NTP ile Saat Senkronizasyonu===
+
* Her bir fiziksel sunucu 10G ve 40G kartlara sahiptir, dolayısıyla client/pulic network 192.168.56.0/24 10G interface üzerinde yapılandırılırken replika vb işlemler için trafiğin daha fazla olacağı cluster network 192.168.200.0/24 40G interface ile yapılandırılacaktır.  
/etc/security/limits.conf Dosyası Dosya Açma Limitlerinin Arttırılması
+
* zula209 ceph-admin olarak seçilip tüm kurulumlar ceph-deploy ile diğer hostlar üzerinde de yapılacaktır.
Kullanıcıların açabileceği maksimum dosya tanımlayıcısı (file descriptor) sayısını /etc/security/limits.conf dosyasına aşağıdaki satırları ekleyerek arttırıyoruz.
+
* Yönetim ağı ise gigabit interface olup 172.16.2.0/24 networkünde yer almaktadır.  
  
* soft nofile 65000
+
Kurulum için öncelikle repoların düzenlenmesi gerekmektedir. Aşağıdaki komutları tüm depeloma sunucularında çalıştırarak CEPH repolarını ekleyiniz ve ceph-deploy programını kurunuz.
* hard nofile 65000
 
  
=== SSD Diskler İçin I/0   Scheduler ve Rotation Değerlerinin Değiştirilmesi ===
+
wget -q -O- 'https://download.ceph.com/keys/release.asc' | sudo apt-key add -
SSD disklerin scheduler’i atanmış değerinden SSD diskler için daha uygun olan noop’a değiştirmek için: (SSD disk sde)
+
# ceph release: mimic, ubuntu release: xenial
  echo noop >  /sys/block/sde/queue/scheduler
+
  sudo apt-add-repository 'deb https://download.ceph.com/debian-mimic/ xenial main'
  
yazmak yeterli. SSD diskler klasik diskler gibi dönen hareketli parçalardan oluşmadığı için SSD diskleri kullanan işletim sistemlerinin I/O operasyonlarını bu durumu göz önüne alarak gerçekleştirmeleri gerekiyor. Bu nedenle SSD disklerin rotation değeri 0 olmalı. Mevcut durumu görmek için:
+
CEPH bileşenlerinin kurulumu ve yapılandırılması ceph-deploy aracı ile tek bir host üzerinden kendi ve diğerleri üzerine gerçekleştirilecektir.
  
  root@ceph1:/home/ceph# cat /sys/block/sde/queue/rotational
+
  sudo apt update
  1
+
  sudo apt install ceph-deploy
  
komutunu kullandığımızda değerin 1 olduğunu görüyoruz. Normalde işletim sisteminin diskin SSD olduğunu anlayıp bu değer 0 yapmasını bekliyoruz. Manüel olarak 0 yapmak için:
+
Bunun yanında tüm sunucuların /etc/hosts dosyasına sunucuların IP adreslerini yazınız.
  
  echo "1" > /sys/block/sde/queue/rotational
+
  192.168.56.209  zula209
 +
192.168.56.210  zula210
 +
192.168.56.211  zula211
 +
192.168.56.212  zula212
  
yazmak yeterli.  Açılışta geçerli olması için echo ile başlayan komutları satırı /etc/rc.local’a ekleyebilirsiniz.
+
===CEPH Bileşenleri İndirme ve Yapılandırma===
 +
Kurulum için bir sunucu kurulum sunucusu olarak seçilmelidir. Biz zula209'u kurulum sunucusu olarak kullanacağız. Kurulumda, ceph-deploy  programı üzerinden tüm sunucularda gerekli paketleri indirmek için ceph-deploy adında bir kullanıcı oluşturulur ve bu kullanıcı üzerinden tüm kurulum işlemleri yapılır.Ceph-deploy kullanıcısına sudo ile root olma yetkisi verilir.Burada dikkat edilecek nokta ceph-deploy kullanıcısının sudo komutunu kullanırken parola istenmeyecek şekilde yapılandırılmasınıdır. Kullanıcı sudo grubuna eklenecek ise  /etc/sudoers dosyası
  
=== Apparmor Yazılımının Kapatılması ===
+
%sudo  ALL=(ALL:ALL) NOPASSWD: ALL
invoke-rc.d apparmor kill
 
update-rc.d -f apparmor remove
 
  
=== updatedb Programın İptal Kapatılması ===
+
şeklinde yapılandırılmalıdır.  Kurulum yapılacak diğer sunucularda da benzer şekilde ceph-deploy kullanıcısı yaratılır ve sudo ile root olabilmesi için gerekli ayarlar yapılır.
  
===Disk read_ahead değerinin Arttırılması===
+
Kurulum sunucusundan diğer tüm sunuculara ceph-deploy kullanıcısından erişim şifresiz bir şekilde yapılacak şekilde yapılandırılmalıdır.Bunun için kurulum sunucusundaki ceph-deploy kullanısının ssh key'leri ssh-copy-id komutu ile diğer sunuculara kopyalanmalıdır.
Disklerin atanmış değerleri olan 128, 2048 olarak değiştirildi. Mevcut değeri görmek için:
 
root@ceph1:/home/ceph# cat /sys/block/sde/queue/read_ahead_kb
 
128
 
  
Yeni değerin atanması:
+
ceph-deploy@zula209:~$ ssh-copy-id ceph-deploy@zula211
 +
ceph-deploy@zula209:~$ ssh-copy-id ceph-deploy@zula212
 +
ceph-deploy@zula209:~$ ssh-copy-id ceph-deploy@zula213
  
root@ceph1:/home/ceph# echo 2084 > /sys/block/sde/queue/read_ahead_kb
+
Kurulum için zula209 sunucusunda ceph-ceploy kullanıcısı ile my-cluster adında bir dizin oluşturulur ve bu dizinde ceph.conf yetki dosyası, yetkilendirme için gerekli keyring dosyaları ve log burada yer alır.
root@ceph1:/home/ceph# cat /sys/block/sde/queue/read_ahead_kb
 
2084
 
  
OSD diskleri için  değerleri açılışta geçerli kılmak için aşağıdaki satırları /etc/rc.local dosyasına ekleyebilirsiniz.
+
su - ceph-deploy
 +
mkdir my-cluster
 +
cd my-cluster
  
  echo 2084 > /sys/block/sdb/queue/read_ahead_kb
+
ceph-deploy komutu bir dizi komut serisini çalıştırıp logları ekrana basar. Bu süreçte bir sorun yaşanır ise program yaptığı işlemleri geri almaya çalışır. Aşağıda böyle bir işlem sonrasında yarım kalan işlerin temizlenmesi için çalıştırılması gereken komutlar gösterilmektedir. (komutlar my-cluster dizin altında çalıştırılmalıdır)
echo 2084 > /sys/block/sdc/queue/read_ahead_kb
 
echo 2084 > /sys/block/sdd/queue/read_ahead_kb
 
echo 2084 > /sys/block/sde/queue/read_ahead_kb
 
echo 2084 > /sys/block/sdf/queue/read_ahead_kb
 
  
read_ahead_kb değerinin arttırılması sıralı okuma (sequential read) performansınızı arttıracaktır. I/O örüntünüze göre bu değeri daha arttırarak performans kazanımı sağlayabilirsiniz. Bu değerin arttırılması hafıza kullanımının artmasına neden olacağı için  bellek kullanımı üzerinde bir baskı oluşturabilir
+
ceph-deploy purge {ceph-node} [{ceph-node}]
 +
ceph-deploy purgedata {ceph-node} [{ceph-node}]
 +
ceph-deploy forgetkeys
 +
rm ceph.*
 +
 
 +
# İlgili dizin altında aşağıdaki  komutu calistirilir, ceph.conf dosyasi dizinde olusur.
 +
ceph-deploy new zula209
 +
 
 +
Bu dosyaya cluster ve public ip leri asagidaki sekilde eklenir. Ayrıca yeni bir pool oluşturulduğunda bu pool için default ayarlar burada verilebilir. Örneğin parametre verilmeden oluşturulacak bir pool için replika sayısı 3, pg ve pgp sayısı 64 olarak ayarlanması için kullanınlan ceph.conf dosyası:
 +
[global]
 +
fsid = ccfe4242-c679-44c2-ba49-88c4234f44e1
 +
mon_initial_members = zula209
 +
mon_host = 192.168.56.209
 +
auth_cluster_required = cephx
 +
auth_service_required = cephx
 +
auth_client_required = cephx
 +
public network = 192.168.56.0/24
 +
cluster network = 192.168.200.0/24
 +
# the number of replica is 3
 +
osd pool default size = 3  # Write an object 3 times.
 +
osd pool default min size = 3 # Allow writing two copy in a degraded state.
 +
# the number of pg per osd is 100
 +
osd pool default pg num = 64
 +
osd pool default pgp num = 64
 +
 
 +
 
 +
osd pg  sayısını hesaplamak için (OSD sayısı * 100) / Replika sayısı  formülü çıkan sonuç en yakın ikini katına yuvarlanarak  kullanılabilir. 48 OSD üç replika için 48 * 100 /4 = 1600. En yakın 2 nin kuvvet 2048 olduğu için 2048 kullanılabilir.
 +
ceph.conf dosyası düzenlendikten sonra her bir host için kurulum işlemlerine aşağıdaki komutla başlanabilir. Burada dikkat edilmesi gereken paket kurulumları esnasında ekrana basılan loglarda CEPH sürümü ve tüm fiziksel sunuculara ilgili paketlerin kurulumlarının eksiksiz yapılmasıdır.
 +
 
 +
ceph-deploy install zula209 zula210 zula211 zula212
 +
 
 +
Kurulumlardan sonra gerekli yetkilendirme dosyalarının dizine aktarılabilmesi için aşağıdaki komut çalıştırılır.
 +
 
 +
ceph-deploy mon create-initial
 +
 
 +
$ ls -ll
 +
total 64
 +
-rw------- 1 ceph-deploy ceph-deploy  113 Jun  7 07:25 ceph.bootstrap-mds.keyring
 +
-rw------- 1 ceph-deploy ceph-deploy  113 Jun  7 07:25 ceph.bootstrap-mgr.keyring
 +
-rw------- 1 ceph-deploy ceph-deploy  113 Jun  7 07:25 ceph.bootstrap-osd.keyring
 +
-rw------- 1 ceph-deploy ceph-deploy  113 Jun  7 07:25 ceph.bootstrap-rgw.keyring
 +
-rw------- 1 ceph-deploy ceph-deploy  151 Jun  7 07:25 ceph.client.admin.keyring
 +
-rw-rw-r-- 1 ceph-deploy ceph-deploy  267 Jun  7 07:23 ceph.conf
 +
-rw-rw-r-- 1 ceph-deploy ceph-deploy 30148 Jun  7 07:25 ceph-deploy-ceph.log
 +
-rw------- 1 ceph-deploy ceph-deploy    73 Jun  7 07:21 ceph.mon.keyring
 +
-rw-r--r-- 1 root        root        1645 Oct 15  2015 release.asc
 +
 
 +
Aşağıdaki komut ile cephcli komutlari bulundugumuz nodda yetkilendirilir. Boylece yetkilendirme istenen ceph komutlari calistirilir. Ornegin zula210 dedigimizde zula209 uzerinde olusturulan anahtarlar ilgili sunucuda /etc/ceph/ceph.client.admin.keyring dosyasina yazilarak erisim yetkisi o sunucuya da taninmis olur. Ayrıca Luminious versiyonu ve sonrası kurulumlar için mgr oluşturulur.
 +
 
 +
ceph-deploy admin zula209 zula210 zula211 zula212
 +
ceph-deploy mgr create zula209
 +
 
 +
Böylece tüm temel bileşenlerinin kurulumları ve temel seviyede yapılandırılması tamamlanmış olur. Artık '''ceph -s''' veya '''ceph health''' komutları ile ceph kümesinin durumlarına bakılabilir.
 +
 
 +
  cluster:
 +
    id:    1521e924-1b18-4192-92b2-448dd9524038
 +
    health: HEALTH_OK
 +
 +
  services:
 +
    mon: 1 daemons, quorum zula209
 +
    mgr: zula209(active)
 +
    osd: 0 osds: 0 up, 0 in
 +
 +
  data:
 +
    pools:  0 pools, 0 pgs
 +
    objects: 0  objects, 0 B
 +
    usage:  0 B used, 0 B / 0 B avail
 +
    pgs:
 +
 
 +
===OSD Disk Ekleme ve Yönetimi===
 +
Yukarıda çalıştırılan komutun çıktısına bakıldığında ayakta ve çalışan osd sayısı sıfır olarak görülmektedir. Dolayısıyla ceph kümesinde kullanılabilir alan ve kapasite de bulunmamaktadır. Bu başlık altında her bir host altında yer alan 12 ayrı HDD disk yapılandırılıp kullanılabilir hale getirilecektir. Burada storage backend olarak sahip olduğu pekçok avantajı nedeniyle Bluestore storage backend olarak kurulacaktır. Mimic versiyonunda default olarak FileStore değil BlueStore artık gelmektedir. Bu storage backendleri ile ilgili bilgiler aşağıdan erişilebilir.
 +
 
 +
[[CEPH_Genel_Bilgiler]]
 +
 
 +
İlgili sunucular üzerinde kurulum yapmadan önce eskiden kalan ceph lvm volumeler var ise silinmelidir, diğer türlü hata verecek ve osd diski kümeye eklemeyecektir. Aşağıdaki komut ile tek bir volume bilgisini silebilirsiniz.
 +
vgscan
 +
vgremove ceph-c6cc6d67-0de2-4cd0-b9fa-384ecbfc6a00
 +
 
 +
Hepsini silmek için:
 +
 
 +
for i in `vgscan | grep Found  | awk -Fgroup '{print $2}' | awk '{print $1}' | sed 's/\"//g' ` ; do  vgremove  $i ; done
 +
 
 +
Bluestore yapılandırılırken block.db ve block.wal dosyaları performans artırmak için nvme ssd diskler üzerinde (partition) aşağıdaki komut ile tutulabilir, ancak birden fazla osd'nin aynı partition kullanması başlangıçta çalışıyorken ilerleyen zamanlarda bir hata alması durumunda o sunucu üzerindeki tüm OSD'lerin id maplerini karıştırmasi nedeniyle büyük bir soruna neden olabilir. Bu konuda wiki sayfasında ayrıca bir başlıkta bu tecrübelere yer verilecektir.
 +
 
 +
* block.db ve block.wal islerini nvme ssd diski uzerinde yapabilmek icin sirasiyla 120 ve 240G partition fdisk ile olusturulur. Ardından ceph-deploy komutu ile osd disk oluşturulur.
 +
Device            Start      End  Sectors  Size Type
 +
/dev/nvme0n1p1      2048 251660287 251658240  120G Linux filesystem
 +
/dev/nvme0n1p2 251660288 754976767 503316480  240G Linux filesystem
 +
 +
  sudo ceph-deploy osd create zula209 --data /dev/sdb --block-db /dev/nvme0n1p1 --block-wal /dev/nvme0n1p2
 +
 
 +
* block.db ve block.wal eğer block verinin yazılacağı diskte oluşturulacaksa aşağıdaki komut çalıştırılır. Böylece fiziksel sunucu üzerinde yer alan bir fiziksel disk osd disk olarak kümeye eklenir.
 +
 
 +
sudo ceph-deploy osd create zula209 --data /dev/sdb
 +
 
 +
Benzer sekilde diger osd disklerde olusturulur ve ceph osd tree komutu ile durumlarina bakilir.
 +
for i in `echo sdc  sdd  sde  sdf  sdg  sdh  sdi  sdj  sdk  sdl  sdm`; do ceph-deploy osd create zula209 --data /dev/$i; done
 +
 
 +
zula210, zula211 ve zula212'de de benzer komutla diskler olusturulur ve osd'lerin durumuna bakilir.
 +
 
 +
Var olan osd diskler asagidaki sekilde gorulebilir.
 +
$ sudo ceph osd tree
 +
ID CLASS WEIGHT  TYPE NAME        STATUS REWEIGHT PRI-AFF
 +
-1      7.39459 root default                           
 +
-3      7.39459    host zula209                       
 +
  0  hdd 7.39459        osd.0        up  1.00000 1.00000
 +
 
 +
Ayrica ceph dizini sembolik linkleri de asagidaki sekilde kontrol edilmelidir. Bu yapılandırmada .db ve .wal dosyaları ssd üzerinde oluşturulduğundan sembolik linkle bu disk bölümüne bağlanmıştır. type dosyasi icerisinde bluestore yazilidir. Bunun disinda block wal ve db nvme linklidir. vgscan ile bakildiginda ceph-3f... volume grubu olusturulmustur. Ek kontroller icin lsblk ve blkid komutlari da kullanilabilir.
 +
$ sudo ls /var/lib/ceph/osd/ceph-0 -ll
 +
total 56
 +
-rw-r--r-- 1 ceph ceph 189 Jun  7 07:32 activate.monmap
 +
lrwxrwxrwx 1 ceph ceph  93 Jun  7 07:32 block -> /dev/ceph-3f44b49a-ff3e-489a-bbf9-af3dd2ffd642/osd-block-ec84a9fa-0b1a-4f33-8ad2-b1a956e4fe4f
 +
lrwxrwxrwx 1 root root  14 Jun  7 07:32 block.db -> /dev/nvme0n1p1
 +
lrwxrwxrwx 1 root root  14 Jun  7 07:32 block.wal -> /dev/nvme0n1p2
 +
-rw-r--r-- 1 ceph ceph  2 Jun  7 07:32 bluefs
 +
-rw-r--r-- 1 ceph ceph  37 Jun  7 07:32 ceph_fsid
 +
-rw-r--r-- 1 ceph ceph  37 Jun  7 07:32 fsid
 +
-rw------- 1 ceph ceph  55 Jun  7 07:32 keyring
 +
-rw-r--r-- 1 ceph ceph  8 Jun  7 07:32 kv_backend
 +
-rw-r--r-- 1 ceph ceph  21 Jun  7 07:32 magic
 +
-rw-r--r-- 1 ceph ceph  4 Jun  7 07:32 mkfs_done
 +
-rw-r--r-- 1 ceph ceph  41 Jun  7 07:32 osd_key
 +
-rw-r--r-- 1 ceph ceph  15 Jun  7 07:32 path_block.db
 +
-rw-r--r-- 1 ceph ceph  15 Jun  7 07:32 path_block.wal
 +
-rw-r--r-- 1 ceph ceph  6 Jun  7 07:32 ready
 +
-rw-r--r-- 1 ceph ceph  10 Jun  7 07:32 type
 +
-rw-r--r-- 1 ceph ceph  2 Jun  7 07:32 whoami
 +
 
 +
Bu arada sorun olmasi durumunda kalan osd'yi cikarmak icin asagidaki komutlar kullanilir. Ornek id 0'da olan osd icin:
 +
sudo ceph osd down 0; sudo ceph osd destroy 0 --yes-i-really-mean-it;ceph osd rm 0
 +
 
 +
Ayrica  stderr: Device /dev/sdd not found (or ignored by filtering) gibilerinden bir hata almasi durumunda asagidaki islem yapilir. Onceden fdisk ile disk partitionlara bolunup silinse dahi mpt bilgisinin silinmesi gerekiyor. Bu arada osd yapmak istediginiz diskin isletim sisteminin yuklu oldugu root diski olmadigindan emin olmak gerekir.
 +
dd if=/dev/zero of=/dev/sdd count=1
 +
sudo ceph-deploy osd create zula209 --data /dev/sdd --block-db /dev/nvme0n1p1 --block-wal /dev/nvme0n1p2
 +
 
 +
Son olarak osd disklerin ve ceph kümesinin durumu aşağıdaki komutlarla kontrol edilip diğer sürece başlanır.
 +
 
 +
sudo ceph osd tree
 +
ID CLASS WEIGHT    TYPE NAME        STATUS REWEIGHT PRI-AFF
 +
-1      354.94043 root default                           
 +
-3        88.73511    host zula209                       
 +
0  hdd  7.39459        osd.0        up  1.00000 1.00000
 +
1  hdd  7.39459        osd.1        up  1.00000 1.00000
 +
2  hdd  7.39459        osd.2        up  1.00000 1.00000
 +
3  hdd  7.39459        osd.3        up  1.00000 1.00000
 +
4  hdd  7.39459        osd.4        up  1.00000 1.00000
 +
5  hdd  7.39459        osd.5        up  1.00000 1.00000
 +
6  hdd  7.39459        osd.6        up  1.00000 1.00000
 +
7  hdd  7.39459        osd.7        up  1.00000 1.00000
 +
8  hdd  7.39459        osd.8        up  1.00000 1.00000
 +
9  hdd  7.39459        osd.9        up  1.00000 1.00000
 +
10  hdd  7.39459        osd.10      up  1.00000 1.00000
 +
11  hdd  7.39459        osd.11      up  1.00000 1.00000
 +
-5        88.73511    host zula210                       
 +
12  hdd  7.39459        osd.12      up  1.00000 1.00000
 +
13  hdd  7.39459        osd.13      up  1.00000 1.00000
 +
14  hdd  7.39459        osd.14      up  1.00000 1.00000
 +
15  hdd  7.39459        osd.15      up  1.00000 1.00000
 +
16  hdd  7.39459        osd.16      up  1.00000 1.00000
 +
17  hdd  7.39459        osd.17      up  1.00000 1.00000
 +
18  hdd  7.39459        osd.18      up  1.00000 1.00000
 +
19  hdd  7.39459        osd.19      up  1.00000 1.00000
 +
20  hdd  7.39459        osd.20      up  1.00000 1.00000
 +
21  hdd  7.39459        osd.21      up  1.00000 1.00000
 +
22  hdd  7.39459        osd.22      up  1.00000 1.00000
 +
23  hdd  7.39459        osd.23      up  1.00000 1.00000
 +
-7        88.73511    host zula211                       
 +
24  hdd  7.39459        osd.24      up  1.00000 1.00000
 +
25  hdd  7.39459        osd.25      up  1.00000 1.00000
 +
26  hdd  7.39459        osd.26      up  1.00000 1.00000
 +
27  hdd  7.39459        osd.27      up  1.00000 1.00000
 +
28  hdd  7.39459        osd.28      up  1.00000 1.00000
 +
29  hdd  7.39459        osd.29      up  1.00000 1.00000
 +
30  hdd  7.39459        osd.30      up  1.00000 1.00000
 +
31  hdd  7.39459        osd.31      up  1.00000 1.00000
 +
32  hdd  7.39459        osd.32      up  1.00000 1.00000
 +
33  hdd  7.39459        osd.33      up  1.00000 1.00000
 +
34  hdd  7.39459        osd.34      up  1.00000 1.00000
 +
35  hdd  7.39459        osd.35      up  1.00000 1.00000
 +
-9        88.73511    host zula212                       
 +
36  hdd  7.39459        osd.36      up  1.00000 1.00000
 +
37  hdd  7.39459        osd.37      up  1.00000 1.00000
 +
38  hdd  7.39459        osd.38      up  1.00000 1.00000
 +
39  hdd  7.39459        osd.39      up  1.00000 1.00000
 +
40  hdd  7.39459        osd.40      up  1.00000 1.00000
 +
41  hdd  7.39459        osd.41      up  1.00000 1.00000
 +
42  hdd  7.39459        osd.42      up  1.00000 1.00000
 +
43  hdd  7.39459        osd.43      up  1.00000 1.00000
 +
44  hdd  7.39459        osd.44      up  1.00000 1.00000
 +
45  hdd  7.39459        osd.45      up  1.00000 1.00000
 +
  46  hdd  7.39459        osd.46      up  1.00000 1.00000
 +
47  hdd  7.39459        osd.47      up  1.00000 1.00000
 +
 
 +
===CEPH Servisleri Oluşturma===
 +
Birden fazla monitör servisinin eklenmesi gerekmektedir, bir tanesi gittiğinde ceph kümesi diğer kalan monitörler üzerinden devam edebilmektedir. Bu örnekte osd hostlar üzerinde birden fazla monitör servisi çalıştırılmaktadır. Ayrı bir sunucu üzerinden çalışması daha iyi olabilecektir. Bunun dışında mgr ve rgw gibi servislerde bu fiziksel sunucular üzerinde yedekli olacak şekilde basitçe yapılandırılmıştır.
 +
 
 +
$ sudo ceph -s
 +
  cluster:
 +
    id:    b49d69c7-e017-4f9f-b69b-57d3efe7987b
 +
    health: HEALTH_WARN
 +
            too few PGs per OSD (2 < min 30)
 +
 +
  services:
 +
    mon: 4 daemons, quorum zula209,zula210,zula211,zula212
 +
    mgr: zula209(active), standbys: zula212
 +
    osd: 48 osds: 48 up, 48 in
 +
    rgw: 1 daemon active
 +
 +
  data:
 +
    pools:  4 pools, 32 pgs
 +
    objects: 219  objects, 1.1 KiB
 +
    usage:  5.7 TiB used, 349 TiB / 355 TiB avail
 +
    pgs:    32 active+clean
 +
 
 +
Tum OSD'ler calisiyor ve ayakta. zula210,zula211 ve zula212'ye monitor eklemek icin
 +
ceph-deploy mon add zula210
 +
ceph-deploy mon add zula211
 +
ceph-deploy mon add zula212
 +
 
 +
mgr ve rgw nodlarini eklemek icin sirasiyla asagidaki komutlar calistirilir.
 +
ceph-deploy mgr create zula212
 +
ceph-deploy rgw create zula209
 +
 
 +
 
 +
=== POOL Oluşturma, PG_NUM ve REPLICA Ayarları ===
 +
Replika sayisi 3, eger o an PG degraded durumunda ise yine 3 olacak sekilde (degrade durumunda kalan osd sayisi, veri kritik islerde yuksek tutmakta fayda var) conf dosyasi duzenlenir. Ayrica default pg sayisini belirlemek icin her bir osd icin 100 pg onerilmistir. Buna gore pg sayisi (OSD sayisi x100)/replika sayisi yani (4x12x100)/3=1600 olarak verilmistir. 2'nin kati olacak en yakin sayi 2048 oldugundan bu kapasitede bir CEPH kümesi için her pool'a toplamda verilebilecek pg sayısı en fazla 2048 olmalıdır.
 +
 
 +
[global]
 +
osd pool default size = 3  # Write an object 3 times.
 +
osd pool default min size = 3 # Allow writing two copy in a degraded state.
 +
 
 +
osd pool default pg num = 64
 +
osd pool default pgp num = 64
 +
 
 +
Her bir pool için defaultta oluşturulacak pg sayısı 64 olarak yukarıda verilmiştir. Sahip olacagimiz toplam pg sayisi ise hesaba göre 2048'dir. Her bir pool icin bu sayiyi dagitmak dikkat isteyen diger bir istir. Bunun icin https://ceph.com/pgcalc/ sayfasinda bir hesaplama araci verilmistir. Buna gore pool'un gelecek yil buyume orani, kapasitenin ne kadarini kullanabilecegi ve replika sayisi gibi parametreler verilmistir. Yeni bir pool olustururken buna dikkat etmekte fayda var.
 +
 
 +
NOT: PG sayisi artirilabilir, ancak asla ilgili poolu yok edip olusturmadan azaltilamaz. Degisiklik isleminin cluster performansi uzerinde buyuk etkisi vardır.
 +
 
 +
Bunlarin disinda sudo ceph -s komutu ile clusterin durumuna bakildiginda:
 +
  cluster:
 +
    id:    b49d69c7-e017-4f9f-b69b-57d3efe7987b
 +
    health: HEALTH_WARN
 +
            too few PGs per OSD (2 < min 30)
 +
 
 +
hatasi gorulmektedir. Bu pg sayisinin OSD bazında oldukca az olmasindan kaynaklidir. '''sudo ceph osd lspools komutu''' ile olusturulmus olan pool'lar listelenebilir.
 +
1 .rgw.root
 +
2 default.rgw.control
 +
3 default.rgw.meta
 +
4 default.rgw.log
 +
 
 +
Bunlarin pg sayisi ise asagidaki komutla alinir.
 +
sudo ceph osd pool get .rgw.root pg_num
 +
pg_num: 8
 +
sudo ceph osd pool get .rgw.root pgp_num
 +
pgp_num: 8
 +
 
 +
Her bir pool'da pg ve pgp sayisi 64 olacak sekilde asagidaki sekilde guncellendi.
 +
sudo ceph osd pool set .rgw.root pg_num 64
 +
set pool 1 pg_num to 64
 +
sudo ceph osd pool set .rgw.root pgp_num 64
 +
set pool 1 pgp_num to 64
 +
 
 +
Son olarak block device icin 1024 pg ve pgp sayisina sahip alan olusturuldu. Default'ta replika sayisi(size) 3 oldugundan dokunulmadi.Ancak degraded durumunda sayi 2'den 3'e artirildi.
 +
sudo ceph osd pool create rbd 1024
 +
sudo ceph osd pool get rbd pgp_num
 +
sudo ceph osd pool set rbd min_size 3
 +
set pool 5 min_size to 3
 +
 
 +
cluster durumu tekrar kontrol edildiginde artik OK olarak guncellendi.
 +
sudo ceph -s
 +
  cluster:
 +
    id:    b49d69c7-e017-4f9f-b69b-57d3efe7987b
 +
    health: HEALTH_OK
 +
 +
  services:
 +
    mon: 4 daemons, quorum zula209,zula210,zula211,zula212
 +
    mgr: zula209(active), standbys: zula212
 +
    osd: 48 osds: 47 up, 47 in
 +
    rgw: 1 daemon active
 +
 +
  data:
 +
    pools:  5 pools, 1280 pgs
 +
    objects: 219  objects, 1.1 KiB
 +
    usage:  5.6 TiB used, 342 TiB / 348 TiB avail
 +
    pgs:    1280 active+clean
 +
 
 +
Böylece 342TB kapasiteli, 48 osd diske ve 1280 pg sayısına sahip bir CEPH kümesi kuruldu ve kullanıma hazır hale getirildi.
 +
 
 +
=== Block Image Oluşturma/Silme ve Benchmark testi ===
 +
Kernel'lar arasi sorunu gidermek icin asagidaki komut calistirilir. Block device image map aderken sorun olmasin diye de --image-feature layering ile imaj olusturulur.
 +
ceph osd crush tunables legacy
 +
 
 +
Yukaridaki komut calistirilmadiginda image olusturulsa bile map isleminde hata veriyor. legacy'ye cekildiginde ceph -s komutu ile bakildiginda asagidaki 2 hatayi veriyor.
 +
            crush map has straw_calc_version=0
 +
            application not enabled on 2 pool(s)
 +
Bunlar rbd map islemi sonrasinda sirasiyla duzeltilecek. 
 +
 
 +
Sonra pg ve pgp_num 128 olan rbdbench adında bir pool oluşturulur. Bu block device üzerinden bir imaj oluşturularak ext4 dosya sistemi üzerine atanır. Son olarak mount edilerek rbd üzerinden kullanılması sağlanır. benchmark testi icin ssd ve hdd poollari icin ayri ayri image olusturulup benchmark testi yapilabilir.
 +
 
 +
ceph osd pool create rbdbench 128 128
 +
rbd create image01 --size 1024 --pool rbdbench --image-feature layering
 +
sudo rbd map image01 --pool rbdbench --name client.admin
 +
 
 +
sudo /sbin/mkfs.ext4 -m0 /dev/rbd/rbdbench/image01
 +
sudo mkdir /mnt/ceph-block-device
 +
sudo mount /dev/rbd/rbdbench/image01 /mnt/ceph-block-device
 +
 
 +
islem bittikten sonra once optimal'e cekilir. sonra da her bir pool icin application seviyesinde rbd olacak sekilde izin verilir. Sonra ceph -s komutu ile durumu kontrol edilir. Örnek olarak rbdhdd ve rbdssd adında 2 pool oluşturulmuş ve ayarları aşağıda yapılmıştır.
 +
ceph osd crush tunables optimal
 +
ceph osd pool application enable rbdhdd rbd
 +
ceph osd pool application enable rbdssd rbd
 +
 
 +
df -h
 +
Filesystem      Size  Used Avail Use% Mounted on
 +
/dev/rbd0        99G  60M  99G  1% /mnt/ceph-hdd-block-device
 +
/dev/rbd1        99G  60M  99G  1% /mnt/ceph-ssd-block-device
 +
 
 +
* MIMIC oncesi versiyonlarda asagidaki komut kullanilir.
 +
rbd bench-write image01 --pool=rbdbench
 +
 
 +
rbd: bench-write is deprecated, use rbd bench --io-type write ...
 +
bench  type write io_size 4096 io_threads 16 bytes 1073741824 pattern sequential
 +
  SEC      OPS  OPS/SEC  BYTES/SEC
 +
    1    24816  21333.36  87381441.21
 +
    2    51888  25952.03  106299523.23
 +
    3    88480  29498.70  120826687.85
 +
    4    130704  32647.39  133723721.53
 +
    5    176560  35315.24  144651237.79
 +
    6    221088  40585.66  166238855.38
 +
elapsed:    7  ops:  262144  ops/sec: 37427.80  bytes/sec: 153304276.10
 +
 
 +
* MIMIC ve sonraki versiyonlarda asagidaki komut kullanilir.
 +
rbd -p rbdhdd bench imagehdd --io-type write --io-size 8192 --io-threads 256 --io-total 8G --io-pattern seq
 +
rbd -p rbdssd bench imagessd --io-type write --io-size 8192 --io-threads 256 --io-total 8G --io-pattern seq
 +
 
 +
Tüm bu işlemlerden sonra benchmark için oluşturulmuş block pool ve imajlarını kaldırmak için aşağıdaki komutlar çalıştırılır.
 +
umount /mnt/ceph-block-device
 +
rm -rf /mnt/ceph-block-device/
 +
rbd unmap rbdbench/image01
 +
rbd rm rbdbench/image01
 +
 
 +
'''koruma mekanizmasini devre disi birakmak icin'''
 +
ceph tell mon.* injectargs --mon-allow-pool-delete=true
 +
ceph osd pool delete rbdbench rbdbench --yes-i-really-really-mean-it
 +
ceph tell mon.* injectargs --mon-allow-pool-delete=false
 +
 
 +
=== Benchmark Ceph Object ===
 +
RADOS üzerinden object gw ile benchmark testi yapabilmek için yeni kurulan ortamda öncelikle bir kullanıcı oluşturmak, yetkilendirmek ve bu kullanıcının test yapacağı pool oluşturmaktır. Aşağıda python swift kütüphanesi test işleri için kullanılabilir.
 +
apt install python-swift swift-bench
 +
 
 +
benchmark id sinde kullanıcı oluşturmak için:
 +
radosgw-admin user create --uid="benchmark" --display-name="benchmark"
 +
radosgw-admin subuser create --uid=benchmark --subuser=benchmark:swift --access=full
 +
radosgw-admin key create --subuser=benchmark:swift --key-type=swift --secret=guessme
 +
radosgw-admin user modify --uid=benchmark --max-buckets=0
 +
 
 +
Yetkilendirme için swift.conf dosyası örnekte olduğu gibi oluşturulur.
 +
[bench]
 +
auth = http://192.168.56.209:7480/auth/v1.0
 +
user = benchmark:swift
 +
key = Passw0rd
 +
auth_version = 1.0
 +
 
 +
Son olarak rados ile benchmark testi 10 saniye boyunca 4M, 16 thread ile islem yapmak için aşağıdaki komut çalıştırılır.
 +
swift-bench -c 64 -s 4096 -n 1000 -g 100 swift.conf
 +
 
 +
=== POOL, OSD KULLANIM ve PERFORMANS metrikleri, KOTA Tanimlama ===
 +
Son olarak yapilan islemi kontrol etmek icin herbir poolun detaylarina bakmak gerekir. Asagidaki komutla crush rule setleri ile birlikte pg ve pgp sayilari kontrol edilebilir.
 +
ceph osd pool ls detail
 +
pool 13 'rbdssd' replicated size 3 min_size 3 crush_rule 1 object_hash rjenkins pg_num 128 pgp_num 128 last_change 458 flags hashpspool stripe_width 0
 +
pool 14 'rbdhdd' replicated size 3 min_size 3 crush_rule 0 object_hash rjenkins pg_num 128 pgp_num 128 last_change 462 flags hashpspool stripe_width 0
 +
 
 +
Tum bunlarin disinda
 +
ceph df detail
 +
komutu ile her bir pool'a ait kullanim bilgileri izlenebilir. Buna gore rbdssd icin kullanilabilir maksimum alan 471GB iken rbdhdd icin 111TB alan ayrilmistir. Henuz kullanima baslamadigindan herhangi bir kullanim alani gorunmemektedir. Iligli pool'a maksimum atilabilecek obje sayisi ve tutulabilecek en fazla olan kota olarak tanimlanabilir. Ornegin rbdssd pool'i icin en fazla 100K obje, 256 GiB alan ici asagidaki komutlar sirasiyla calistirilabilir,
 +
 
 +
ceph osd pool set-quota rbdssd max_objects 100000
 +
ceph osd pool set-quota rbdssd max_bytes 274877906944
 +
 
 +
ceph df detail
 +
GLOBAL:
 +
    SIZE        AVAIL      RAW USED    %RAW USED    OBJECTS
 +
    351 TiB    351 TiB      55 GiB          0.02        221 
 +
POOLS:
 +
    NAME                    ID    QUOTA OBJECTS    QUOTA BYTES    USED        %USED    MAX AVAIL    OBJECTS    DIRTY    READ      WRITE      RAW USED
 +
    .rgw.root              9      N/A              N/A            1.1 KiB        0      111 TiB          4        4        27 B        4 B      3.4 KiB
 +
    default.rgw.control    10    N/A              N/A                0 B        0      111 TiB          8        8        0 B        0 B          0 B
 +
    default.rgw.meta        11    N/A              N/A              362 B        0      111 TiB          2        2        0 B        3 B      1.1 KiB
 +
    default.rgw.log        12    N/A              N/A                0 B        0      111 TiB        207      207      45 KiB    30 KiB          0 B
 +
    rbdssd                  13    100 k            256 GiB            0 B        0      471 GiB          0        0        0 B        0 B          0 B
 +
    rbdhdd                  14    N/A              N/A                0 B        0      111 TiB          0        0        0 B        0 B          0 B
 +
 
 +
 
 +
ceph osd df komutu ile de benzer sekilde osd'lere ait kullanimlar listelenebilir. Her bir pool ve osd icin kullanim oranlarinin gosterilmesi yaninda performans metrikleri de incelenebilir.
 +
rados df
 +
komutu her bir pool icin disk iops ve throughput islemini verecektir. watch komutu ile birlikte gercek zamanli cluster'in durumu izlenebilir.
 +
 
 +
'''ceph pg dump''' komutu da ceph clusterin durumunu izlemek icin kullanisli bir komuttur.
 +
 
 +
Her bir pool'a ait pg sayisi artirilabilir ancak azaltilamaz. O yuzden pg sayisini belirlerken bu noktaya dikkat etmek gerekir. Onceki ornekte olusturulan rbdssd ve rbhdd icin pg sayilarini 128'den 256'ya cikarmak icin asagidaki komutlar kullanilir. Boylece osd basina en az olmasi gereken pg sayisi 30'un uzerine cikarilmis oldu.
 +
ceph osd pool set rbdhdd pg_num 256
 +
ceph osd pool set rbdhdd pgp_num 256
 +
ceph osd pool set rbdssd pg_num 256
 +
ceph osd pool set rbdssd pgp_num 256

12:07, 20 Eylül 2018 itibarı ile sayfanın şu anki hâli

CEPH Kümesi Kurulum ve Yapılandırma

Paket Kurulumları

Ubuntu 16.04 işletim sistemi üzerinde güncel olan CEPH Mimic (13.2.0) kurulumu burada anlatılmaktadır.

  • Kurulum dökümanı her bir OSD host üzerinde 12 adet fiziksel disk bulunan, ayrıca nvme SSD yer alan 4 ayrı sunucu üzerinde anatılmaktadır (zula209, zula210, zula211 ve zula212).
  • Her bir fiziksel sunucu 10G ve 40G kartlara sahiptir, dolayısıyla client/pulic network 192.168.56.0/24 10G interface üzerinde yapılandırılırken replika vb işlemler için trafiğin daha fazla olacağı cluster network 192.168.200.0/24 40G interface ile yapılandırılacaktır.
  • zula209 ceph-admin olarak seçilip tüm kurulumlar ceph-deploy ile diğer hostlar üzerinde de yapılacaktır.
  • Yönetim ağı ise gigabit interface olup 172.16.2.0/24 networkünde yer almaktadır.

Kurulum için öncelikle repoların düzenlenmesi gerekmektedir. Aşağıdaki komutları tüm depeloma sunucularında çalıştırarak CEPH repolarını ekleyiniz ve ceph-deploy programını kurunuz.

wget -q -O- 'https://download.ceph.com/keys/release.asc' | sudo apt-key add -
# ceph release: mimic, ubuntu release: xenial
sudo apt-add-repository 'deb https://download.ceph.com/debian-mimic/ xenial main'

CEPH bileşenlerinin kurulumu ve yapılandırılması ceph-deploy aracı ile tek bir host üzerinden kendi ve diğerleri üzerine gerçekleştirilecektir.

sudo apt update
sudo apt install ceph-deploy

Bunun yanında tüm sunucuların /etc/hosts dosyasına sunucuların IP adreslerini yazınız.

192.168.56.209  zula209
192.168.56.210  zula210
192.168.56.211  zula211
192.168.56.212  zula212

CEPH Bileşenleri İndirme ve Yapılandırma

Kurulum için bir sunucu kurulum sunucusu olarak seçilmelidir. Biz zula209'u kurulum sunucusu olarak kullanacağız. Kurulumda, ceph-deploy programı üzerinden tüm sunucularda gerekli paketleri indirmek için ceph-deploy adında bir kullanıcı oluşturulur ve bu kullanıcı üzerinden tüm kurulum işlemleri yapılır.Ceph-deploy kullanıcısına sudo ile root olma yetkisi verilir.Burada dikkat edilecek nokta ceph-deploy kullanıcısının sudo komutunu kullanırken parola istenmeyecek şekilde yapılandırılmasınıdır. Kullanıcı sudo grubuna eklenecek ise /etc/sudoers dosyası

%sudo   ALL=(ALL:ALL) NOPASSWD: ALL

şeklinde yapılandırılmalıdır. Kurulum yapılacak diğer sunucularda da benzer şekilde ceph-deploy kullanıcısı yaratılır ve sudo ile root olabilmesi için gerekli ayarlar yapılır.

Kurulum sunucusundan diğer tüm sunuculara ceph-deploy kullanıcısından erişim şifresiz bir şekilde yapılacak şekilde yapılandırılmalıdır.Bunun için kurulum sunucusundaki ceph-deploy kullanısının ssh key'leri ssh-copy-id komutu ile diğer sunuculara kopyalanmalıdır.

ceph-deploy@zula209:~$ ssh-copy-id ceph-deploy@zula211
ceph-deploy@zula209:~$ ssh-copy-id ceph-deploy@zula212
ceph-deploy@zula209:~$ ssh-copy-id ceph-deploy@zula213

Kurulum için zula209 sunucusunda ceph-ceploy kullanıcısı ile my-cluster adında bir dizin oluşturulur ve bu dizinde ceph.conf yetki dosyası, yetkilendirme için gerekli keyring dosyaları ve log burada yer alır.

su - ceph-deploy
mkdir my-cluster
cd my-cluster

ceph-deploy komutu bir dizi komut serisini çalıştırıp logları ekrana basar. Bu süreçte bir sorun yaşanır ise program yaptığı işlemleri geri almaya çalışır. Aşağıda böyle bir işlem sonrasında yarım kalan işlerin temizlenmesi için çalıştırılması gereken komutlar gösterilmektedir. (komutlar my-cluster dizin altında çalıştırılmalıdır)

ceph-deploy purge {ceph-node} [{ceph-node}]
ceph-deploy purgedata {ceph-node} [{ceph-node}]
ceph-deploy forgetkeys
rm ceph.*
  1. İlgili dizin altında aşağıdaki komutu calistirilir, ceph.conf dosyasi dizinde olusur.
ceph-deploy new zula209

Bu dosyaya cluster ve public ip leri asagidaki sekilde eklenir. Ayrıca yeni bir pool oluşturulduğunda bu pool için default ayarlar burada verilebilir. Örneğin parametre verilmeden oluşturulacak bir pool için replika sayısı 3, pg ve pgp sayısı 64 olarak ayarlanması için kullanınlan ceph.conf dosyası:

[global]
fsid = ccfe4242-c679-44c2-ba49-88c4234f44e1
mon_initial_members = zula209
mon_host = 192.168.56.209
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx
public network = 192.168.56.0/24
cluster network = 192.168.200.0/24
# the number of replica is 3
osd pool default size = 3  # Write an object 3 times.
osd pool default min size = 3 # Allow writing two copy in a degraded state.
# the number of pg per osd is 100
osd pool default pg num = 64
osd pool default pgp num = 64


osd pg sayısını hesaplamak için (OSD sayısı * 100) / Replika sayısı formülü çıkan sonuç en yakın ikini katına yuvarlanarak kullanılabilir. 48 OSD üç replika için 48 * 100 /4 = 1600. En yakın 2 nin kuvvet 2048 olduğu için 2048 kullanılabilir. ceph.conf dosyası düzenlendikten sonra her bir host için kurulum işlemlerine aşağıdaki komutla başlanabilir. Burada dikkat edilmesi gereken paket kurulumları esnasında ekrana basılan loglarda CEPH sürümü ve tüm fiziksel sunuculara ilgili paketlerin kurulumlarının eksiksiz yapılmasıdır.

ceph-deploy install zula209 zula210 zula211 zula212

Kurulumlardan sonra gerekli yetkilendirme dosyalarının dizine aktarılabilmesi için aşağıdaki komut çalıştırılır.

ceph-deploy mon create-initial
$ ls -ll
total 64
-rw------- 1 ceph-deploy ceph-deploy   113 Jun  7 07:25 ceph.bootstrap-mds.keyring
-rw------- 1 ceph-deploy ceph-deploy   113 Jun  7 07:25 ceph.bootstrap-mgr.keyring
-rw------- 1 ceph-deploy ceph-deploy   113 Jun  7 07:25 ceph.bootstrap-osd.keyring
-rw------- 1 ceph-deploy ceph-deploy   113 Jun  7 07:25 ceph.bootstrap-rgw.keyring
-rw------- 1 ceph-deploy ceph-deploy   151 Jun  7 07:25 ceph.client.admin.keyring
-rw-rw-r-- 1 ceph-deploy ceph-deploy   267 Jun  7 07:23 ceph.conf
-rw-rw-r-- 1 ceph-deploy ceph-deploy 30148 Jun  7 07:25 ceph-deploy-ceph.log
-rw------- 1 ceph-deploy ceph-deploy    73 Jun  7 07:21 ceph.mon.keyring
-rw-r--r-- 1 root        root         1645 Oct 15  2015 release.asc

Aşağıdaki komut ile cephcli komutlari bulundugumuz nodda yetkilendirilir. Boylece yetkilendirme istenen ceph komutlari calistirilir. Ornegin zula210 dedigimizde zula209 uzerinde olusturulan anahtarlar ilgili sunucuda /etc/ceph/ceph.client.admin.keyring dosyasina yazilarak erisim yetkisi o sunucuya da taninmis olur. Ayrıca Luminious versiyonu ve sonrası kurulumlar için mgr oluşturulur.

ceph-deploy admin zula209 zula210 zula211 zula212
ceph-deploy mgr create zula209

Böylece tüm temel bileşenlerinin kurulumları ve temel seviyede yapılandırılması tamamlanmış olur. Artık ceph -s veya ceph health komutları ile ceph kümesinin durumlarına bakılabilir.

  cluster:
   id:     1521e924-1b18-4192-92b2-448dd9524038
   health: HEALTH_OK

 services:
   mon: 1 daemons, quorum zula209
   mgr: zula209(active)
   osd: 0 osds: 0 up, 0 in

 data:
   pools:   0 pools, 0 pgs
   objects: 0  objects, 0 B
   usage:   0 B used, 0 B / 0 B avail
   pgs:

OSD Disk Ekleme ve Yönetimi

Yukarıda çalıştırılan komutun çıktısına bakıldığında ayakta ve çalışan osd sayısı sıfır olarak görülmektedir. Dolayısıyla ceph kümesinde kullanılabilir alan ve kapasite de bulunmamaktadır. Bu başlık altında her bir host altında yer alan 12 ayrı HDD disk yapılandırılıp kullanılabilir hale getirilecektir. Burada storage backend olarak sahip olduğu pekçok avantajı nedeniyle Bluestore storage backend olarak kurulacaktır. Mimic versiyonunda default olarak FileStore değil BlueStore artık gelmektedir. Bu storage backendleri ile ilgili bilgiler aşağıdan erişilebilir.

CEPH_Genel_Bilgiler

İlgili sunucular üzerinde kurulum yapmadan önce eskiden kalan ceph lvm volumeler var ise silinmelidir, diğer türlü hata verecek ve osd diski kümeye eklemeyecektir. Aşağıdaki komut ile tek bir volume bilgisini silebilirsiniz.

vgscan
vgremove ceph-c6cc6d67-0de2-4cd0-b9fa-384ecbfc6a00

Hepsini silmek için:

for i in `vgscan | grep Found  | awk -Fgroup '{print $2}' | awk '{print $1}' | sed 's/\"//g' ` ; do  vgremove  $i ; done

Bluestore yapılandırılırken block.db ve block.wal dosyaları performans artırmak için nvme ssd diskler üzerinde (partition) aşağıdaki komut ile tutulabilir, ancak birden fazla osd'nin aynı partition kullanması başlangıçta çalışıyorken ilerleyen zamanlarda bir hata alması durumunda o sunucu üzerindeki tüm OSD'lerin id maplerini karıştırmasi nedeniyle büyük bir soruna neden olabilir. Bu konuda wiki sayfasında ayrıca bir başlıkta bu tecrübelere yer verilecektir.

  • block.db ve block.wal islerini nvme ssd diski uzerinde yapabilmek icin sirasiyla 120 ve 240G partition fdisk ile olusturulur. Ardından ceph-deploy komutu ile osd disk oluşturulur.
Device             Start       End   Sectors  Size Type
/dev/nvme0n1p1      2048 251660287 251658240  120G Linux filesystem
/dev/nvme0n1p2 251660288 754976767 503316480  240G Linux filesystem

 sudo ceph-deploy osd create zula209 --data /dev/sdb --block-db /dev/nvme0n1p1 --block-wal /dev/nvme0n1p2
  • block.db ve block.wal eğer block verinin yazılacağı diskte oluşturulacaksa aşağıdaki komut çalıştırılır. Böylece fiziksel sunucu üzerinde yer alan bir fiziksel disk osd disk olarak kümeye eklenir.
sudo ceph-deploy osd create zula209 --data /dev/sdb

Benzer sekilde diger osd disklerde olusturulur ve ceph osd tree komutu ile durumlarina bakilir.

for i in `echo sdc   sdd   sde   sdf   sdg   sdh   sdi   sdj   sdk   sdl   sdm`; do ceph-deploy osd create zula209 --data /dev/$i; done

zula210, zula211 ve zula212'de de benzer komutla diskler olusturulur ve osd'lerin durumuna bakilir.

Var olan osd diskler asagidaki sekilde gorulebilir.

$ sudo ceph osd tree
ID CLASS WEIGHT  TYPE NAME        STATUS REWEIGHT PRI-AFF 
-1       7.39459 root default                             
-3       7.39459     host zula209                         
 0   hdd 7.39459         osd.0        up  1.00000 1.00000 

Ayrica ceph dizini sembolik linkleri de asagidaki sekilde kontrol edilmelidir. Bu yapılandırmada .db ve .wal dosyaları ssd üzerinde oluşturulduğundan sembolik linkle bu disk bölümüne bağlanmıştır. type dosyasi icerisinde bluestore yazilidir. Bunun disinda block wal ve db nvme linklidir. vgscan ile bakildiginda ceph-3f... volume grubu olusturulmustur. Ek kontroller icin lsblk ve blkid komutlari da kullanilabilir.

$ sudo ls /var/lib/ceph/osd/ceph-0 -ll
total 56
-rw-r--r-- 1 ceph ceph 189 Jun  7 07:32 activate.monmap
lrwxrwxrwx 1 ceph ceph  93 Jun  7 07:32 block -> /dev/ceph-3f44b49a-ff3e-489a-bbf9-af3dd2ffd642/osd-block-ec84a9fa-0b1a-4f33-8ad2-b1a956e4fe4f
lrwxrwxrwx 1 root root  14 Jun  7 07:32 block.db -> /dev/nvme0n1p1
lrwxrwxrwx 1 root root  14 Jun  7 07:32 block.wal -> /dev/nvme0n1p2
-rw-r--r-- 1 ceph ceph   2 Jun  7 07:32 bluefs
-rw-r--r-- 1 ceph ceph  37 Jun  7 07:32 ceph_fsid
-rw-r--r-- 1 ceph ceph  37 Jun  7 07:32 fsid
-rw------- 1 ceph ceph  55 Jun  7 07:32 keyring
-rw-r--r-- 1 ceph ceph   8 Jun  7 07:32 kv_backend
-rw-r--r-- 1 ceph ceph  21 Jun  7 07:32 magic
-rw-r--r-- 1 ceph ceph   4 Jun  7 07:32 mkfs_done
-rw-r--r-- 1 ceph ceph  41 Jun  7 07:32 osd_key
-rw-r--r-- 1 ceph ceph  15 Jun  7 07:32 path_block.db
-rw-r--r-- 1 ceph ceph  15 Jun  7 07:32 path_block.wal
-rw-r--r-- 1 ceph ceph   6 Jun  7 07:32 ready
-rw-r--r-- 1 ceph ceph  10 Jun  7 07:32 type
-rw-r--r-- 1 ceph ceph   2 Jun  7 07:32 whoami

Bu arada sorun olmasi durumunda kalan osd'yi cikarmak icin asagidaki komutlar kullanilir. Ornek id 0'da olan osd icin:

sudo ceph osd down 0; sudo ceph osd destroy 0 --yes-i-really-mean-it;ceph osd rm 0

Ayrica stderr: Device /dev/sdd not found (or ignored by filtering) gibilerinden bir hata almasi durumunda asagidaki islem yapilir. Onceden fdisk ile disk partitionlara bolunup silinse dahi mpt bilgisinin silinmesi gerekiyor. Bu arada osd yapmak istediginiz diskin isletim sisteminin yuklu oldugu root diski olmadigindan emin olmak gerekir.

dd if=/dev/zero of=/dev/sdd count=1
sudo ceph-deploy osd create zula209 --data /dev/sdd --block-db /dev/nvme0n1p1 --block-wal /dev/nvme0n1p2

Son olarak osd disklerin ve ceph kümesinin durumu aşağıdaki komutlarla kontrol edilip diğer sürece başlanır.

sudo ceph osd tree
ID CLASS WEIGHT    TYPE NAME        STATUS REWEIGHT PRI-AFF 
-1       354.94043 root default                             
-3        88.73511     host zula209                         
0   hdd   7.39459         osd.0        up  1.00000 1.00000 
1   hdd   7.39459         osd.1        up  1.00000 1.00000 
2   hdd   7.39459         osd.2        up  1.00000 1.00000 
3   hdd   7.39459         osd.3        up  1.00000 1.00000 
4   hdd   7.39459         osd.4        up  1.00000 1.00000 
5   hdd   7.39459         osd.5        up  1.00000 1.00000 
6   hdd   7.39459         osd.6        up  1.00000 1.00000 
7   hdd   7.39459         osd.7        up  1.00000 1.00000 
8   hdd   7.39459         osd.8        up  1.00000 1.00000 
9   hdd   7.39459         osd.9        up  1.00000 1.00000 
10   hdd   7.39459         osd.10       up  1.00000 1.00000 
11   hdd   7.39459         osd.11       up  1.00000 1.00000 
-5        88.73511     host zula210                         
12   hdd   7.39459         osd.12       up  1.00000 1.00000 
13   hdd   7.39459         osd.13       up  1.00000 1.00000 
14   hdd   7.39459         osd.14       up  1.00000 1.00000 
15   hdd   7.39459         osd.15       up  1.00000 1.00000 
16   hdd   7.39459         osd.16       up  1.00000 1.00000 
17   hdd   7.39459         osd.17       up  1.00000 1.00000 
18   hdd   7.39459         osd.18       up  1.00000 1.00000 
19   hdd   7.39459         osd.19       up  1.00000 1.00000 
20   hdd   7.39459         osd.20       up  1.00000 1.00000 
21   hdd   7.39459         osd.21       up  1.00000 1.00000 
22   hdd   7.39459         osd.22       up  1.00000 1.00000 
23   hdd   7.39459         osd.23       up  1.00000 1.00000 
-7        88.73511     host zula211                         
24   hdd   7.39459         osd.24       up  1.00000 1.00000 
25   hdd   7.39459         osd.25       up  1.00000 1.00000 
26   hdd   7.39459         osd.26       up  1.00000 1.00000 
27   hdd   7.39459         osd.27       up  1.00000 1.00000 
28   hdd   7.39459         osd.28       up  1.00000 1.00000 
29   hdd   7.39459         osd.29       up  1.00000 1.00000 
30   hdd   7.39459         osd.30       up  1.00000 1.00000 
31   hdd   7.39459         osd.31       up  1.00000 1.00000 
32   hdd   7.39459         osd.32       up  1.00000 1.00000 
33   hdd   7.39459         osd.33       up  1.00000 1.00000 
34   hdd   7.39459         osd.34       up  1.00000 1.00000 
35   hdd   7.39459         osd.35       up  1.00000 1.00000 
-9        88.73511     host zula212                         
36   hdd   7.39459         osd.36       up  1.00000 1.00000 
37   hdd   7.39459         osd.37       up  1.00000 1.00000 
38   hdd   7.39459         osd.38       up  1.00000 1.00000 
39   hdd   7.39459         osd.39       up  1.00000 1.00000 
40   hdd   7.39459         osd.40       up  1.00000 1.00000 
41   hdd   7.39459         osd.41       up  1.00000 1.00000 
42   hdd   7.39459         osd.42       up  1.00000 1.00000 
43   hdd   7.39459         osd.43       up  1.00000 1.00000 
44   hdd   7.39459         osd.44       up  1.00000 1.00000 
45   hdd   7.39459         osd.45       up  1.00000 1.00000 
 46   hdd   7.39459         osd.46       up  1.00000 1.00000 
47   hdd   7.39459         osd.47       up  1.00000 1.00000 

CEPH Servisleri Oluşturma

Birden fazla monitör servisinin eklenmesi gerekmektedir, bir tanesi gittiğinde ceph kümesi diğer kalan monitörler üzerinden devam edebilmektedir. Bu örnekte osd hostlar üzerinde birden fazla monitör servisi çalıştırılmaktadır. Ayrı bir sunucu üzerinden çalışması daha iyi olabilecektir. Bunun dışında mgr ve rgw gibi servislerde bu fiziksel sunucular üzerinde yedekli olacak şekilde basitçe yapılandırılmıştır.

$ sudo ceph -s
 cluster:
   id:     b49d69c7-e017-4f9f-b69b-57d3efe7987b
   health: HEALTH_WARN
           too few PGs per OSD (2 < min 30)

 services:
   mon: 4 daemons, quorum zula209,zula210,zula211,zula212
   mgr: zula209(active), standbys: zula212
   osd: 48 osds: 48 up, 48 in
   rgw: 1 daemon active

 data:
   pools:   4 pools, 32 pgs
   objects: 219  objects, 1.1 KiB
   usage:   5.7 TiB used, 349 TiB / 355 TiB avail
   pgs:     32 active+clean

Tum OSD'ler calisiyor ve ayakta. zula210,zula211 ve zula212'ye monitor eklemek icin

ceph-deploy mon add zula210
ceph-deploy mon add zula211
ceph-deploy mon add zula212

mgr ve rgw nodlarini eklemek icin sirasiyla asagidaki komutlar calistirilir.

ceph-deploy mgr create zula212
ceph-deploy rgw create zula209


POOL Oluşturma, PG_NUM ve REPLICA Ayarları

Replika sayisi 3, eger o an PG degraded durumunda ise yine 3 olacak sekilde (degrade durumunda kalan osd sayisi, veri kritik islerde yuksek tutmakta fayda var) conf dosyasi duzenlenir. Ayrica default pg sayisini belirlemek icin her bir osd icin 100 pg onerilmistir. Buna gore pg sayisi (OSD sayisi x100)/replika sayisi yani (4x12x100)/3=1600 olarak verilmistir. 2'nin kati olacak en yakin sayi 2048 oldugundan bu kapasitede bir CEPH kümesi için her pool'a toplamda verilebilecek pg sayısı en fazla 2048 olmalıdır.

[global]
osd pool default size = 3  # Write an object 3 times.
osd pool default min size = 3 # Allow writing two copy in a degraded state.
osd pool default pg num = 64
osd pool default pgp num = 64

Her bir pool için defaultta oluşturulacak pg sayısı 64 olarak yukarıda verilmiştir. Sahip olacagimiz toplam pg sayisi ise hesaba göre 2048'dir. Her bir pool icin bu sayiyi dagitmak dikkat isteyen diger bir istir. Bunun icin https://ceph.com/pgcalc/ sayfasinda bir hesaplama araci verilmistir. Buna gore pool'un gelecek yil buyume orani, kapasitenin ne kadarini kullanabilecegi ve replika sayisi gibi parametreler verilmistir. Yeni bir pool olustururken buna dikkat etmekte fayda var.

NOT: PG sayisi artirilabilir, ancak asla ilgili poolu yok edip olusturmadan azaltilamaz. Degisiklik isleminin cluster performansi uzerinde buyuk etkisi vardır.

Bunlarin disinda sudo ceph -s komutu ile clusterin durumuna bakildiginda:

 cluster:
   id:     b49d69c7-e017-4f9f-b69b-57d3efe7987b
   health: HEALTH_WARN
           too few PGs per OSD (2 < min 30)

hatasi gorulmektedir. Bu pg sayisinin OSD bazında oldukca az olmasindan kaynaklidir. sudo ceph osd lspools komutu ile olusturulmus olan pool'lar listelenebilir. 1 .rgw.root 2 default.rgw.control 3 default.rgw.meta 4 default.rgw.log

Bunlarin pg sayisi ise asagidaki komutla alinir.

sudo ceph osd pool get .rgw.root pg_num
pg_num: 8
sudo ceph osd pool get .rgw.root pgp_num
pgp_num: 8

Her bir pool'da pg ve pgp sayisi 64 olacak sekilde asagidaki sekilde guncellendi.

sudo ceph osd pool set .rgw.root pg_num 64 
set pool 1 pg_num to 64
sudo ceph osd pool set .rgw.root pgp_num 64
set pool 1 pgp_num to 64

Son olarak block device icin 1024 pg ve pgp sayisina sahip alan olusturuldu. Default'ta replika sayisi(size) 3 oldugundan dokunulmadi.Ancak degraded durumunda sayi 2'den 3'e artirildi.

sudo ceph osd pool create rbd 1024
sudo ceph osd pool get rbd pgp_num
sudo ceph osd pool set rbd min_size 3
set pool 5 min_size to 3

cluster durumu tekrar kontrol edildiginde artik OK olarak guncellendi.

sudo ceph -s
 cluster:
   id:     b49d69c7-e017-4f9f-b69b-57d3efe7987b
   health: HEALTH_OK

 services:
   mon: 4 daemons, quorum zula209,zula210,zula211,zula212
   mgr: zula209(active), standbys: zula212
   osd: 48 osds: 47 up, 47 in
   rgw: 1 daemon active

 data:
   pools:   5 pools, 1280 pgs
   objects: 219  objects, 1.1 KiB
   usage:   5.6 TiB used, 342 TiB / 348 TiB avail
   pgs:     1280 active+clean

Böylece 342TB kapasiteli, 48 osd diske ve 1280 pg sayısına sahip bir CEPH kümesi kuruldu ve kullanıma hazır hale getirildi.

Block Image Oluşturma/Silme ve Benchmark testi

Kernel'lar arasi sorunu gidermek icin asagidaki komut calistirilir. Block device image map aderken sorun olmasin diye de --image-feature layering ile imaj olusturulur.

ceph osd crush tunables legacy 

Yukaridaki komut calistirilmadiginda image olusturulsa bile map isleminde hata veriyor. legacy'ye cekildiginde ceph -s komutu ile bakildiginda asagidaki 2 hatayi veriyor.

           crush map has straw_calc_version=0
           application not enabled on 2 pool(s)

Bunlar rbd map islemi sonrasinda sirasiyla duzeltilecek.

Sonra pg ve pgp_num 128 olan rbdbench adında bir pool oluşturulur. Bu block device üzerinden bir imaj oluşturularak ext4 dosya sistemi üzerine atanır. Son olarak mount edilerek rbd üzerinden kullanılması sağlanır. benchmark testi icin ssd ve hdd poollari icin ayri ayri image olusturulup benchmark testi yapilabilir.

ceph osd pool create rbdbench 128 128
rbd create image01 --size 1024 --pool rbdbench --image-feature layering
sudo rbd map image01 --pool rbdbench --name client.admin
sudo /sbin/mkfs.ext4 -m0 /dev/rbd/rbdbench/image01
sudo mkdir /mnt/ceph-block-device
sudo mount /dev/rbd/rbdbench/image01 /mnt/ceph-block-device

islem bittikten sonra once optimal'e cekilir. sonra da her bir pool icin application seviyesinde rbd olacak sekilde izin verilir. Sonra ceph -s komutu ile durumu kontrol edilir. Örnek olarak rbdhdd ve rbdssd adında 2 pool oluşturulmuş ve ayarları aşağıda yapılmıştır.

ceph osd crush tunables optimal
ceph osd pool application enable rbdhdd rbd
ceph osd pool application enable rbdssd rbd
df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/rbd0        99G   60M   99G   1% /mnt/ceph-hdd-block-device
/dev/rbd1        99G   60M   99G   1% /mnt/ceph-ssd-block-device
  • MIMIC oncesi versiyonlarda asagidaki komut kullanilir.
rbd bench-write image01 --pool=rbdbench
rbd: bench-write is deprecated, use rbd bench --io-type write ...
bench  type write io_size 4096 io_threads 16 bytes 1073741824 pattern sequential
 SEC       OPS   OPS/SEC   BYTES/SEC
   1     24816  21333.36  87381441.21
   2     51888  25952.03  106299523.23
   3     88480  29498.70  120826687.85
   4    130704  32647.39  133723721.53
   5    176560  35315.24  144651237.79
   6    221088  40585.66  166238855.38
elapsed:     7  ops:   262144  ops/sec: 37427.80  bytes/sec: 153304276.10
  • MIMIC ve sonraki versiyonlarda asagidaki komut kullanilir.
rbd -p rbdhdd bench imagehdd --io-type write --io-size 8192 --io-threads 256 --io-total 8G --io-pattern seq
rbd -p rbdssd bench imagessd --io-type write --io-size 8192 --io-threads 256 --io-total 8G --io-pattern seq

Tüm bu işlemlerden sonra benchmark için oluşturulmuş block pool ve imajlarını kaldırmak için aşağıdaki komutlar çalıştırılır.

umount /mnt/ceph-block-device 
rm -rf /mnt/ceph-block-device/
rbd unmap rbdbench/image01
rbd rm rbdbench/image01
koruma mekanizmasini devre disi birakmak icin
ceph tell mon.* injectargs --mon-allow-pool-delete=true
ceph osd pool delete rbdbench rbdbench --yes-i-really-really-mean-it
ceph tell mon.* injectargs --mon-allow-pool-delete=false

Benchmark Ceph Object

RADOS üzerinden object gw ile benchmark testi yapabilmek için yeni kurulan ortamda öncelikle bir kullanıcı oluşturmak, yetkilendirmek ve bu kullanıcının test yapacağı pool oluşturmaktır. Aşağıda python swift kütüphanesi test işleri için kullanılabilir.

apt install python-swift swift-bench

benchmark id sinde kullanıcı oluşturmak için:

radosgw-admin user create --uid="benchmark" --display-name="benchmark" 
radosgw-admin subuser create --uid=benchmark --subuser=benchmark:swift --access=full
radosgw-admin key create --subuser=benchmark:swift --key-type=swift --secret=guessme
radosgw-admin user modify --uid=benchmark --max-buckets=0

Yetkilendirme için swift.conf dosyası örnekte olduğu gibi oluşturulur.

[bench]
auth = http://192.168.56.209:7480/auth/v1.0
user = benchmark:swift
key = Passw0rd
auth_version = 1.0

Son olarak rados ile benchmark testi 10 saniye boyunca 4M, 16 thread ile islem yapmak için aşağıdaki komut çalıştırılır.

swift-bench -c 64 -s 4096 -n 1000 -g 100 swift.conf

POOL, OSD KULLANIM ve PERFORMANS metrikleri, KOTA Tanimlama

Son olarak yapilan islemi kontrol etmek icin herbir poolun detaylarina bakmak gerekir. Asagidaki komutla crush rule setleri ile birlikte pg ve pgp sayilari kontrol edilebilir.

ceph osd pool ls detail
pool 13 'rbdssd' replicated size 3 min_size 3 crush_rule 1 object_hash rjenkins pg_num 128 pgp_num 128 last_change 458 flags hashpspool stripe_width 0
pool 14 'rbdhdd' replicated size 3 min_size 3 crush_rule 0 object_hash rjenkins pg_num 128 pgp_num 128 last_change 462 flags hashpspool stripe_width 0

Tum bunlarin disinda

ceph df detail 

komutu ile her bir pool'a ait kullanim bilgileri izlenebilir. Buna gore rbdssd icin kullanilabilir maksimum alan 471GB iken rbdhdd icin 111TB alan ayrilmistir. Henuz kullanima baslamadigindan herhangi bir kullanim alani gorunmemektedir. Iligli pool'a maksimum atilabilecek obje sayisi ve tutulabilecek en fazla olan kota olarak tanimlanabilir. Ornegin rbdssd pool'i icin en fazla 100K obje, 256 GiB alan ici asagidaki komutlar sirasiyla calistirilabilir,

ceph osd pool set-quota rbdssd max_objects 100000
ceph osd pool set-quota rbdssd max_bytes 274877906944
ceph df detail
GLOBAL:
   SIZE        AVAIL       RAW USED     %RAW USED     OBJECTS 
   351 TiB     351 TiB       55 GiB          0.02        221  
POOLS:
   NAME                    ID     QUOTA OBJECTS     QUOTA BYTES     USED        %USED     MAX AVAIL     OBJECTS     DIRTY     READ       WRITE      RAW USED 
   .rgw.root               9      N/A               N/A             1.1 KiB         0       111 TiB           4        4        27 B        4 B      3.4 KiB 
   default.rgw.control     10     N/A               N/A                 0 B         0       111 TiB           8        8         0 B        0 B          0 B 
   default.rgw.meta        11     N/A               N/A               362 B         0       111 TiB           2        2         0 B        3 B      1.1 KiB 
   default.rgw.log         12     N/A               N/A                 0 B         0       111 TiB         207      207      45 KiB     30 KiB          0 B 
   rbdssd                  13     100 k             256 GiB             0 B         0       471 GiB           0        0         0 B        0 B          0 B 
   rbdhdd                  14     N/A               N/A                 0 B         0       111 TiB           0        0         0 B        0 B          0 B 


ceph osd df komutu ile de benzer sekilde osd'lere ait kullanimlar listelenebilir. Her bir pool ve osd icin kullanim oranlarinin gosterilmesi yaninda performans metrikleri de incelenebilir.

rados df 

komutu her bir pool icin disk iops ve throughput islemini verecektir. watch komutu ile birlikte gercek zamanli cluster'in durumu izlenebilir.

ceph pg dump komutu da ceph clusterin durumunu izlemek icin kullanisli bir komuttur.

Her bir pool'a ait pg sayisi artirilabilir ancak azaltilamaz. O yuzden pg sayisini belirlerken bu noktaya dikkat etmek gerekir. Onceki ornekte olusturulan rbdssd ve rbhdd icin pg sayilarini 128'den 256'ya cikarmak icin asagidaki komutlar kullanilir. Boylece osd basina en az olmasi gereken pg sayisi 30'un uzerine cikarilmis oldu.

ceph osd pool set rbdhdd pg_num 256
ceph osd pool set rbdhdd pgp_num 256
ceph osd pool set rbdssd pg_num 256
ceph osd pool set rbdssd pgp_num 256