Category Archives: ceph
Ilk Client ve Ceph Performans Test Ornekleri
Once sisteme bir bakalim, rbd imajlarini yaratabilecegimiz pool lar mevcut mu ?
vahric:~ vahricmuhtaryan$ rados lspools
data
metadata
rbd
volumes
vms
images
backups
Simdi 20 GB lik bir disk yaratalim client uzerinden
vahric:~ vahricmuhtaryan$ rbd create rbd_disk1 –size 20480
Varsayili olarak “rbd” adli pool uzerinde yaratilacak eger siz bunu degistirmek isterseniz bu kez “-p pool_adi” parametresini kullanabilirsiniz.
Yarattigimiz diski gorelim
vahric:~ vahricmuhtaryan$ rbd ls
rbd_disk1
Ilgili disk hakkinda daha fazla bilgi alalim , gordugumuz gibi 5120 obje uzerine yayilmis kendisi
vahric:~ vahricmuhtaryan$ rbd –image rbd_disk1 info
rbd image ‘rbd_disk1’:
size 20480 MB in 5120 objects
order 22 (4096 kB objects)
block_name_prefix: rb.0.348f6.238e1f29
format: 1
Client a ilgili diski tanitalim
vahric:~ vahricmuhtaryan$ sudo rbd map rbd/rbd_disk1
Percinleyelim
vahric:~ vahricmuhtaryan$ rbd showmapped
id pool image snap device
0 rbd rbd_disk1 – /dev/rbd0
Klasik Bir Partition Yaratalim
vahric:~ vahricmuhtaryan$ sudo mkfs.xfs /dev/rbd0
log stripe unit (4194304 bytes) is too large (maximum is 256KiB)
log stripe unit adjusted to 32KiB
meta-data=/dev/rbd0 isize=256 agcount=17, agsize=326656 blks
= sectsz=512 attr=2, projid32bit=1
= crc=0 finobt=0
data = bsize=4096 blocks=5242880, imaxpct=25
= sunit=1024 swidth=1024 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=0
log =internal log bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=8 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
Mount Edelim
vahric:~ vahricmuhtaryan$ sudo mount /dev/rbd0 /mnt/
/dev/rbd0 on /mnt type xfs (rw,relatime,attr2,inode64,sunit=8192,swidth=8192,noquota)
Simdi Ufak bir Yazma Testi
vahric:~ vahricmuhtaryan$ sudo dd if=/dev/zero of=/mnt/dosya1 count=100 bs=1M
100+0 records in
100+0 records out
104857600 bytes (105 MB) copied, 0.0541026 s, 1.9 GB/s
stack@helion-cp1-c0-m1-mgmt:~$ ls -al /mnt/
total 102404
drwxr-xr-x 2 root root 35 Mar 18 11:44 .
drwxr-xr-x 23 root root 4096 Feb 26 16:09 ..
-rw-r–r– 1 root root 104857600 Mar 18 11:44 dosya1
-rw-r–r– 1 root root 0 Mar 18 11:39 test1.txt
Performans Test Ornekleri
Performans testleri yapmadan once bilinmelidirki OSD rolune sahip nodelar CPU-Intensive olup olasi bir recovery durumda dahada CPU-Intensive olacaklardir.
Memory bakimindan OSD/HDD basina 1GB-2GB Ram mutlaka olmali sistemde
Network kismi goreceli olcumleme yapmak lazim kullanim oraninza gore 10G diyip gaza gelelim
Disk , burada bizi asil etkileyen faktor Ceph i sadece object storage olarak mi yoksa ayni zamanda block access icinde kullanip kullanmayacaginiz.
Ceph kullaniyorsaniz bilinki journaling var ve bizim icin bir disk’i ikiye bolup birini journaling icin digerini data icin kullanacagiz. Ilk yazma istegi journal alana daha sonra Client’a ACK daha sonra veri data alanina gecer. Burada hizi artirmak icin journal partition’i data partition’dan ayirmak ve SSD uzerine koymak gerekli block erisimler icin bject bazli erisimler icin bu gerekli olmayabilir cunku object erisiminden bahsederken daha dusuk bir yukten bahsediyor olacagiz.
Burada 4 OSD de bir SSD kullanmak gibi bir oneride bulunmus ceph , test edilebilir bir deger gibi duruyor.
Birde filesystem sonuc olarak ceph de objeleri bir file system uzerinde tutuyor brtfs , xfs ve ext4 gibi , sececeginiz fs inde bu ise katkisi var kuskusuz.
Ceph built-in test performans olcum programi olan “rados bench” ile geliyor. Ornek olarak asagidaki komut cok olabilir ama -t 64 kaldirabilirsiniz .
Komutu incelersek ;
“data” adli pool’a , 60 saniye boyunca , yazma islemi yaptik ve 64 paralel islem belkide 64 adet instance bu isi yapiyr gibi sekillendirdik.
vahric:~ vahricmuhtaryan$ rados bench -p data 60 write –no-cleanup -t 64
Maintaining 64 concurrent writes of 4194304 bytes for up to 60 seconds or 0 objects
Object prefix: benchmark_data_
sec Cur ops started finished avg MB/s cur MB/s last lat avg lat
0 0 0 0 0 0 – 0
1 63 179 116 463.884 464 0.38101 0.37249
2 63 345 282 563.897 664 0.366082 0.371803
3 63 518 455 606.567 692 0.323779 0.379964
4 64 697 633 632.902 712 0.633568 0.375212
5 64 870 806 644.701 692 0.323645 0.372506
6 63 1052 989 659.232 732 0.324917 0.370092
7 63 1261 1198 684.468 836 0.289412 0.359564
8 64 1448 1384 691.895 744 0.640746 0.355492
9 63 1636 1573 699.005 756 0.375221 0.354127
10 63 1825 1762 704.695 756 0.296463 0.35258
11 63 2009 1946 707.533 736 0.313 0.352625
12 64 2212 2148 715.898 808 0.281 0.34923
13 63 2400 2337 718.973 756 0.301415 0.347757
14 63 2597 2534 723.895 788 0.316924 0.346277
15 63 2780 2717 724.427 732 0.352922 0.345955
16 63 2976 2913 728.144 784 0.291264 0.345326
17 63 3162 3099 729.07 744 0.345573 0.34483
18 63 3345 3282 729.226 732 0.360665 0.344803
19 64 3535 3471 730.63 756 0.355096 0.34454
2016-03-18 15:35:15.960296min lat: 0.255346 max lat: 1.08089 avg lat: 0.345816
sec Cur ops started finished avg MB/s cur MB/s last lat avg lat
20 63 3707 3644 728.693 692 0.688611 0.345816
21 63 3886 3823 728.084 716 0.380712 0.346103
22 64 4042 3978 723.167 620 0.391788 0.347741
23 63 4222 4159 723.199 724 0.637858 0.349523
24 63 4398 4335 722.395 704 0.350302 0.349731
25 64 4583 4519 722.935 736 0.324349 0.349799
26 63 4762 4699 722.818 720 0.397335 0.349641
27 63 4923 4860 719.895 644 0.320317 0.351497
28 63 5107 5044 720.466 736 0.354695 0.351503
29 64 5290 5226 720.723 728 0.357651 0.351386
30 63 5477 5414 721.762 752 0.346044 0.35118
31 63 5665 5602 722.733 752 0.322997 0.350751
32 64 5856 5792 723.895 760 0.286673 0.350305
33 63 6056 5993 726.319 804 0.286453 0.349562
34 63 6241 6178 726.718 740 0.382151 0.348804
35 64 6418 6354 726.067 704 0.70621 0.349417
36 63 6603 6540 726.562 744 0.330412 0.349448
37 63 6793 6730 727.463 760 0.307236 0.34913
38 63 6996 6933 729.685 812 0.304802 0.348192
39 64 7194 7130 731.177 788 0.308319 0.347657
2016-03-18 15:35:35.963088min lat: 0.243614 max lat: 1.09487 avg lat: 0.347097
sec Cur ops started finished avg MB/s cur MB/s last lat avg lat
40 64 7387 7323 732.195 772 0.336614 0.347097
41 63 7568 7505 732.09 728 0.305704 0.347322
42 63 7741 7678 731.133 692 0.298869 0.347838
43 64 7915 7851 730.221 692 0.385897 0.348186
44 63 8109 8046 731.349 780 0.31149 0.347653
45 63 8293 8230 731.451 736 0.341667 0.347736
46 63 8486 8423 732.329 772 0.314524 0.347356
47 63 8675 8612 732.831 756 0.319864 0.347313
48 63 8871 8808 733.894 784 0.297605 0.34688
49 63 9071 9008 735.241 800 0.294334 0.346284
50 64 9276 9212 736.854 816 0.266206 0.345516
51 64 9446 9382 735.738 680 0.322462 0.345893
52 63 9623 9560 735.28 712 0.373721 0.346026
53 64 9807 9743 735.216 732 0.351035 0.346179
54 63 9963 9900 733.229 628 0.772809 0.346678
55 63 10138 10075 732.623 700 0.36974 0.347414
56 63 10310 10247 731.824 688 0.728308 0.347864
57 64 10479 10415 730.773 672 0.326227 0.348262
58 63 10670 10607 731.414 768 0.353456 0.348211
59 63 10859 10796 731.828 756 0.304951 0.348066
2016-03-18 15:35:55.965885min lat: 0.234814 max lat: 1.11278 avg lat: 0.348373
sec Cur ops started finished avg MB/s cur MB/s last lat avg lat
60 55 11024 10969 731.163 692 0.234814 0.348373
Total time run: 60.166694
Total writes made: 11024
Write size: 4194304
Bandwidth (MB/sec): 732.897
Stddev Bandwidth: 109.541
Max bandwidth (MB/sec): 836
Min bandwidth (MB/sec): 0
Average Latency: 0.348392
Stddev Latency: 0.0837083
Max latency: 1.11278
Min latency: 0.172449
Bu arada OSD node larin CPU kuyruk ve I/O wait degerlerine dikkat …. (vmstat ciktisi)
Dikkat ederseniz cok fazla “interrupts” ve “context” islemi var bunu icinded cpu kuyruguda isler var …
2 0 0 119779248 301012 9027476 0 0 0 1020508 39561 81965 9 16 57 18 0 4 3 0 119050680 301012 9723692 0 0 0 1484501 45600 99320 9 17 52 22 0 1 4 0 118306992 301012 10419900 0 0 0 1453172 43269 89217 7 16 54 22 0 4 2 0 117552920 301012 11151764 0 0 0 1417888 47453 95868 10 17 53 20 0 2 3 0 116816936 301012 11863880 0 0 0 1441024 59888 102892 10 17 48 26 0 3 5 0 116025456 301012 12621544 0 0 0 1573439 65494 109183 10 21 49 21 0 1 1 0 115153008 301012 13466820 0 0 0 1790724 69421 125151 11 21 43 25 0 1 3 0 114280216 301012 14284316 0 0 0 1672340 66805 108805 12 21 41 25 0 1 5 0 113504304 301012 15012172 0 0 0 1482380 66205 109008 11 17 51 21 0 2 1 0 112705664 301012 15778160 0 0 0 1523221 66547 113069 9 19 48 24 0 3 5 0 111925152 301012 16550136 0 0 0 1595473 67025 116527 11 20 48 21 0 2 2 0 111107920 301012 17342984 0 0 0 1697492 67898 121723 11 21 46 22 0 3 4 0 110227744 301012 18188932 0 0 0 1722688 71108 120435 11 22 43 24 0 3 6 0 109411400 301012 18981508 0 0 0 1602492 67416 110758 10 21 46 23 0 4 3 0 108644624 301012 19716368 0 0 0 1496712 74043 111431 9 19 49 22 0 2 2 0 107804960 301012 20534756 0 0 0 1657152 82051 119790 11 21 44 24 0 3 4 0 107011064 301012 21308212 0 0 0 1672845 75802 113841 10 20 48 22 0 3 5 0 106253024 301012 22056944 0 0 0 1569166 73200 105035 10 19 48 23 0 4 1 0 105449408 301012 22834144 0 0 0 1522580 74871 107535 10 19 46 25 0 2 6 0 104693064 301012 23557616 0 0 0 1478552 66217 106022 10 17 52 21 0 4 0 0 103984384 301012 24243168 0 0 0 1387364 66384 106223 9 18 53 20 0 1 3 0 103327632 301012 24888936 0 0 0 1413308 66325 97587 9 16 55 19 0 2 2 0 102538480 301012 25643540 0 0 0 1539750 67207 101545 9 19 49 24 0 2 1 0 101758240 301012 26402912 0 0 0 1508559 73090 103293 10 19 51 21 0 4 4 0 100997856 301012 27141676 0 0 0 1508552 73194 110821 10 19 47 23 0 3 1 0 100307072 301012 27825040 0 0 0 1395524 71138 104815 9 18 54 20 0 1 5 0 99576872 301012 28523204 0 0 0 1531928 68252 106490 8 19 52 21 0 2 2 0 98788992 301012 29293932 0 0 0 1583288 74612 107305 11 19 48 22 0 12 4 0 98010560 301012 30050480 0 0 0 1515286 73645 106091 10 19 51 21 0 5 5 0 97250712 301012 30797468 0 0 0 1512376 76516 110708 9 20 49 22 0 4 2 0 96409528 301012 31580792 0 0 0 1606716 81483 119983 11 21 46 22 0 5 2 0 95567696 301012 32378328 0 0 0 1707854 80155 121890 13 21 43 24 0 4 2 0 94736072 301012 33180668 0 0 0 1656548 77087 111518 11 20 46 24 0
Ayni testi birde read icin yapalim (seq)
vahric:~ vahricmuhtaryan$ rados bench -p data 60 seq -t 64
2016-03-18 15:47:38.961955min lat: 0.168118 max lat: 0.690079 avg lat: 0.24984
sec Cur ops started finished avg MB/s cur MB/s last lat avg lat
40 63 10259 10196 1019.44 1012 0.217678 0.24984
41 64 10512 10448 1019.16 1008 0.245161 0.2499
42 63 10769 10706 1019.46 1032 0.213964 0.249931
43 63 11024 10961 1019.47 1020 0.082318 0.249911
Total time run: 43.147236
Total reads made: 11024
Read size: 4194304
Bandwidth (MB/sec): 1021.989
Average Latency: 0.249893
Max latency: 0.690079
Min latency: 0.082318
Ayni testi birde read icin yapalim (random)
vahric:~ vahricmuhtaryan$ rados bench -p data 60 rand -t 64
Guzel Linkler
Daha fazla rbd kullanimi icin : http://docs.ceph.com/docs/master/man/8/rbd/
https://www.thomas-krenn.com/en/wiki/Linux_Performance_Measurements_using_vmstat
Ceph Komutlar – 1
Kurulum sonrasi bizim icin komutlar cok onemli olacak, bu makalede ;
- ceph version gorme
- ceph cluster durmunu gorme
- ceph disk pool listeleyelim
- ceph cluster kullanimini gorme
- ceph node uzerinde diskleri gorme
- ceph cluster’a osd ekleme
- ceph cluster osd listeleme
- ceph cluster’a mon ekleme
- ceph cluster monitor node state/quarom bilgisini gorme
- ceph mon/osd/pg/crash/mds dump ile cluster map leri ayri ayri gorme
- ceph recovery isleminin izleme
- ceph osd devre disi birakma
ceph Version gorelim
root@cephadm:~# ceph -v
ceph version 9.2.0 (bb2ecea240f3a1d525bcb35670cb07bd1f0ca299)
Ceph – RBD Client’a Disk Verme
Amacimiz elimizdeki Ubuntu 14.04 Linux sunucuya Ceph uzerinden uzerinden 20 GB’lik disk alani vermek. Block access yapacagiz yani RBD Client olacak Ubuntu.
Once Ceph Cluster’daki poollari listeleyelim
root@cephadm:~# ceph osd lspools
0 rbd,
Simdi hizlica 20 GB lik bir disk imaji yaratalim ve yarattigmizi gorelim
root@cephadm:~# rbd create ubuntuya-disk –size 20G
root@cephadm:~# rbd ls
ubuntuya-disk
Eger farkli bir pool kullanmak isterseniz -p ile pool adini be;irtebilirsiniz !!!
Daha ayrinti bilgi ister isek
root@cephadm:~# rbd –image ubuntuya-disk info
rbd image ‘ubuntuya-disk’:
size 20480 MB in 5120 objects
order 22 (4096 kB objects)
block_name_prefix: rbd_data.12864b6bae7
format: 2
features: layering
flags:
Ceph – Performans (Gozu Kapali) (Referans Amacli)
Bu article tamamen referans niteligi tasiyor , hicbir bilindik benden birsery yok !
Performans
OSD -> cpu , CPU . 2 islemci iyi diyorlar
MDS kullaniyorsan yandin daha da fazal processing power (Bu arada millet ikinci cpu ekleyip compression ve dedup yapiyor ama Ceph bu konuda ilginc duruyor)
RAM olayida guzel avg OSD basina 1G , olmadi 2G iyi olur diyorlar
Networksel olarak public / internal network’u ayirin diyorlar (veri klasik 🙂 😛 )
Full SSD kullanmiyorsaniz , journal icin mutlaka SSD (eger performans ihtiyaciniz var ise)
Journal SSD icin OSD nin %10 diyenler var , her bir OSD icin 10GB ayiranlar var
Ama dedikleri su journal alani osd oldugu disk de olmasin
Birde bir SSD de 4 OSD ekleyin diyenler var , daha fazlasini koymayin diyorlar
OSD sayisini dusurmek istiyorsaniz bu arada o zaman arkada RAID kullanin derler , az OSD demek daha az deamon demek
Dokumanlari okurken insan diyor ki ah Btrfs production da olsa , ona gelinceyekadar XFS devam olmadi EXT4
RBD Client Side caching , devamli acik “rbd cache = true , rbd cache size = , rbd cache max dirty = , rbd cache max dirty age”
MAX OPEN FILE olayina dikkat “/var/lib/ceph/osd/ceph-x/current” cunku hersey file ve directory den ibaret
Ceph Monitoring – CLI ve REST API
Ceph monitoring icin 3 sey kullanabiliriz ;
- cli
- api
- 3th party gui
Cluster saglik durumu ;
root@cephadm:~# ceph health
HEALTH_WARN clock skew detected on mon.cephmon2; Monitor clock skew detected
Mesela yukarda komutu bize bisiylerin yolunda olmadigini gosteriyor. Ayni komutu “ceph health detail” seklinde verdiginizde daha fazla detaya sahip olacaksiniz
root@cephadm:~# ceph health detail
HEALTH_WARN clock skew detected on mon.cephmon2; Monitor clock skew detected
mon.cephmon2 addr 10.111.21.181:6789/0 clock skew 0.142183s > max 0.05s (latency 0.000532976s)
API icin ;
Once ceph-rest-api uygulamasini calistirin , ceph-rest-api icin flask kullanilmis ve calistirdiginizda builtin WSGI devreye giriyor istekleriniz alip islemek icin -n de client name / adini belirtiyor , kullanacaginiz degeri ls -al /etc/ceph/ diyip ilgili keyring dosyasinin adindan edinebilirsiniz.
root@cephadm:~# ceph-rest-api -n client.admin
* Running on http://0.0.0.0:5000/
212.58.13.17 – – [12/Jan/2016 17:41:07] “GET /api/v0.1/health HTTP/1.1” 200 –
Tum Event’leri gormek “tail -f” ile dosyadan akarcasina
root@cephadm:~# ceph -w
Yukardaki komut Info/Warning/Error larin hepsini gercek zamanli olarak gosterir. Isterseniz cesitli parametreleri vererek ozellestirebilirsiniz , bunlar –watch-debug veya –watch-info veya –watch-sec/warn/error diyerekte izleyebilirsiniz
Ceph Kurulumu
Hizlica ceph kurulumu …
Elimizde son guncellemeleri gecilmis Ubuntu 14.04.3 LTS Trusty isletim sistemi kurulmus linux sunucular mevcut, sunucu listesi ve gorevleri asagidaki gibi belirtilmistir.
- admin node (10.111.21.184)
- monitor node 1 (10.111.21.180)
- monitor node 2 (10.111.21.181)
monitor node 3- osd node 1 (10.111.21.185)
- osd node 2 (10.111.21.186)
osd node 3
Ilgili release key ekleyelim
root@cephadm:~# wget -q -O- ‘https://download.ceph.com/keys/release.asc’ | sudo apt-key add –
OK
Ceph paketini repoya ekleyelim
root@cephadm:~# echo deb http://download.ceph.com/debian-infernalis/ $(lsb_release -sc) main | sudo tee /etc/apt/sources.list.d/ceph.list
deb http://download.ceph.com/debian-infernalis/ trusty main
Repoyu guncelleyip “ceph-deploy” kuralim
root@cephadm:~# sudo apt-get update && sudo apt-get install ceph-deploy
Kuruluma baslamadan once ;
- admin node sifresiz diger nodelara girebilmeli cunku tum konfigrasyon islemlerini merkezi olarak yonetecegiz
- ceph-deploy yine diger nodelarda sifresiz ve sudo hakki olan bir kullanici ile login olmali (uygulama kuracak)
- “ceph-deploy –username” parametresi ile root dahil yarattiginiz kullanici adini belirtebilirsiniz
- ntp tum nodelarda kurulu ve konfigre edilmis olmali, tum nodelar ayni saat degerine sahip olmali
- openssh-server paketi tum nodelarda kurulu olmali
- SELinux kapali olmali
- iptables kurulum engellememsi icin kapali
Ben kurulumumda “root” kullanicisini kullanacagim , onerilmiyor, productionda bu sekilde kullanmayin diyorlar , keza ceph adli bir kullanicida sistemde yaratmayin cunku hackerlar bunu bidiklerinden brute force icin kullanmaya baslasmislar.
SSH Key Yaratalim
root@cephadm:~# ssh-keygen
Dikkat ! “passphrase” bos gecin , sifre atamayin
Key Transfer
Once monitor node 1 icin yapiyorum
root@cephadm:~# ssh-copy-id root@10.111.21.180
The authenticity of host ‘10.111.21.180 (10.111.21.180)’ can’t be established.
ECDSA key fingerprint is 2e:b7:48:94:bb:69:44:ac:3f:c0:e7:f4:8e:a6:17:c0.
Are you sure you want to continue connecting (yes/no)? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed — if you are prompted now it is to install the new keys
root@10.111.21.180’s password:
Number of key(s) added: 1
Now try logging into the machine, with: “ssh ‘root@10.111.21.180′”
and check to make sure that only the key(s) you wanted were added.
Dikkat ! ayni islemi 10.111.21.181,10.111.21.185,10.111.21.186 makinelerindede yapin
Her Node Uzerindeki /etc/hosts dosyasini guncelleyin, benim icin asagidaki ayarlar gecerli , hostname uzerinden birbirlerini pingleyebilmelisiniz
# Ceph MON Nodes
10.111.21.180 cephmon1
10.111.21.181 cephmon2
# Ceph OSD Nodes
10.111.21.185 cephosd1
10.111.21.186 cephosd2
# Ceph Admin Node
10.111.21.184 cephadm
Admin Node uzerinde bir dizin yaratin ve “ceph-deploy” buradan tetikleyin
root@cephadm:~# mkdir cephclusterconfigfiles
root@cephadm:~# cd cephclusterconfigfiles/
Kuruluma baslamadan once oldu ya birsikinti yasadiniz ve tum islemleri sifirlamak istiyorsunuz bu durumda “ceph deploy purgedata nodex nodey” ve “ceph deploy forgetkeys” komutunu kullanin
Ilk ceph baslangic konfig ve keyring dosyasini yaratmak gerekiyor
root@cephadm:~/cephclusterconfigfiles# ceph-deploy –username root new cephmon1
veya (kullanici belirtmek istemezseniz)
root@cephadm:~/cephclusterconfigfiles# ceph-deploy new cephmon1
Iki OSD ile sistemi ayaga kaldiracagiz , onun icin ilgili asagidaki satiri [global] altina ekleyin
osd pool default size = 2
Not : Varsayili deger 3
Kuruluma baslayalim
root@cephadm:~/cephclusterconfigfiles# ceph-deploy install cephmon1 cephmon2 cephosd1 cephosd2 cephadm
Tum ceph binaryleri ilgili nodelara kurulacak
Ilk monitor node’u yaratalim
root@cephadm:~/cephclusterconfigfiles# ceph-deploy mon create-initial
OSD nodelara birer tane 16Gb lik disk ekledim , isletim sistemi bunu /dev/sdb olarak gordu
OSD node ve diskleri hazirlayalim
Asagidaki ornek ikinci node icin , tum node larda bunu yapmalisiniz
root@cephadm:~/cephclusterconfigfiles# ceph-deploy osd prepare cephosd2:/dev/sdb
Bu islemi yaptiginizde goreceksinizki ceph-deploy ilgili node uzerinde guzel guzel partition yaratmis ve onu xfs olarak formatlamis noatime parametresinide vermis olarak.
Asaidaki gibi mount ciktilarina sahip olmus olacaksiniz
/dev/sdb1 on /var/lib/ceph/osd/ceph-2 type xfs (rw,noatime,inode64)
Islemlerde asagidaki gibi “ready” mesaji alip almadiniginiza dikkat edin.
[ceph_deploy.osd][DEBUG ] Host cephosd1 is now ready for osd use.
Simdi OSD leri aktive edelim
root@cephadm:~/cephclusterconfigfiles# ceph-deploy osd activate cephosd2:/dev/sdb1
Burada dikkat /dev/sdb degil /dev/sdb1 olarak verdim aktive ederken
Admin node uzerindeki config sync edelim
root@cephadm:~/cephclusterconfigfiles# ceph-deploy admin cephadm cephmon1 cephosd1 cephosd2
[ceph_deploy.admin][DEBUG ] Pushing admin keys and conf to cephadm
[cephadm][DEBUG ] connected to host: cephadm
[cephadm][DEBUG ] detect platform information from remote host
[cephadm][DEBUG ] detect machine type
[cephadm][DEBUG ] write cluster configuration to /etc/ceph/{cluster}.conf
[ceph_deploy.admin][DEBUG ] Pushing admin keys and conf to cephmon1
[cephmon1][DEBUG ] connected to host: cephmon1
[cephmon1][DEBUG ] detect platform information from remote host
[cephmon1][DEBUG ] detect machine type
[cephmon1][DEBUG ] write cluster configuration to /etc/ceph/{cluster}.conf
[ceph_deploy.admin][DEBUG ] Pushing admin keys and conf to cephosd1
[cephosd1][DEBUG ] connected to host: cephosd1
[cephosd1][DEBUG ] detect platform information from remote host
[cephosd1][DEBUG ] detect machine type
[cephosd1][DEBUG ] write cluster configuration to /etc/ceph/{cluster}.conf
[ceph_deploy.admin][DEBUG ] Pushing admin keys and conf to cephosd2
[cephosd2][DEBUG ] connected to host: cephosd2
[cephosd2][DEBUG ] detect platform information from remote host
[cephosd2][DEBUG ] detect machine type
[cephosd2][DEBUG ] write cluster configuration to /etc/ceph/{cluster}.conf
ve
root@cephadm:~# ceph health
HEALTH_OK
Bu islemlerden sonra MON ve OSD makinelerinde “ps -fe” yaparak calisan ceph deamon larini gormeye baslayabilirsiniz
ceph 3829 1 0 13:19 ? 00:00:00 /usr/bin/ceph-mon –cluster=ceph -i cephmon1 -f –setuser ceph –setgroup ceph
ceph 1728 1 0 14:38 ? 00:00:01 /usr/bin/ceph-osd –cluster=ceph -i 1 -f –setuser ceph –setgroup ceph
ceph 1694 1 0 14:45 ? 00:00:01 /usr/bin/ceph-osd –cluster=ceph -i 2 -f –setuser ceph –setgroup ceph
Nodelardaki configler “/etc/ceph” altinda bulabilirsiniz
Bu kurulum aslinda komutlarla oynamak icindi , production’da calistirmak icin degil.
Esitliklerle Ceph
ceph = open source distributed storage system
ceph = POSIX uyumlu ve snapshot destekler
ceph genisleyebilir = gigabyte –> exabyte veya x86 tabanli 1000 server’a
ceph’in felsefesi = her bilesen yatayda buyuyebilmeli, asla single point of failure olmamali, software tabanli olmali, herkesin erisebilecegi donanimlar uzerinde olmali, mumkun oldugu kadar kendi kendini yonetebilmeli
tek bir sapka altinda = block , file ve object destekler
gucunu = object tabanli olmadan alir , ona gore block/file/obje hepsi birdir ve bunlari objeler halinde tutar, yedekler , dagitir
2D Ceph = {
}
Kus Bakisi Ceph = {
}
Metadata = data hakkinda data 🙂 , her okuma/yazam isteginde neyi nereden okuyacagimiz eger storage kullaniyorsak storage’a ait metadata tablosuna erisip ogreniyoruz demek, bunun icin eski storage tipleri belli bir noktaya kadar genisleyebiliyor . Ufak bir NOT GPFS veya yeni adiyla IBM Spectrum Scale meta data olayini dagitik metadata process’i gelistirerek cozmus {
}
CRUSH = Yeni bir “Metadata Lookup” tipi , daha dogrusu artik neyin nereden okunacagi ve yazilacagi daginik olarak ve isleme tabi tutarak bulunuyor. Bu sayede daha hizli ve exabyte seviyesinde yapilari destekleyebliyor.
CRUSH ayni zamanda = tum ortamdan haberdar bir yapisi var , disk , sunucu , sunucunun bulundugu kabin , kabin’in oldugu datacenter gibi . Oyle ki ilk objeyi yazdiginda yedeginin nereye konacagini hesaplar ki herhangi bir bilesen bozuldugunda datanin problemsiz erisilebilir olmasini saglasin. Olasi bir problemde yine yedek objeyi kullanarak datayi cogaltaraktan yine yedekliligi ust seviyeye cikartir.
ceph = raid yok , spare disk yok , illa ayni boyutlarda disklere gerek yok
Erasure Coding = Normalde her bir obje’ni ayni boyutda farkli bir kopyasi yaratilir , erasure coding farkli bir algoritma guderek objeyi daha dusuk maliyetle yedekli olarak tutar.
RBD = Ceph block device access protokolu , bircok linux isletim sisteminde kernel seviyesinde destek var
RBD Destekler = Full/Incremental Snapshot/Thin Provisioning/Copy-on-Write , in-memory caching
RBD Erisim = {
}
CephFS = Henuz “production ready” degil , kendisi Ceph’in file access bileseni, HDFS (Hadoop) replace olacak gozuyle bakiliyor
Ceph Object Storage = Ceph halihazirda object based bir storage olup , datayi object olarakda tutabilir.
Ceph Object Gateway (RadosGw) = RADOS gateway client’in RESTFUL API kullanarak sisteme erismesini saglar. Bunlar {
- Swift Uyumlu
- S3 Uyumlu
- Admin API (Yonetim icin)
}
librgw = RADOS gateway , client bu kutuphaneyi kullaniyor
librados = RADOS gateway bu kutuphane ile ceph cluster’a erisiyor
Ceph Object Erisim Diyagrami = {
}
ceph alternatifleri (tum yonleri ile degil) = {
- GPFS
- iRODS
- HDFS
- Lustre
- Gluster
}
Buyuk Resme Baktigimizda = {
RADOS (Reliable Autonomic Distributed Object Store) = Ceph in kalbi , turune bakilmaksizin , tum erisim methodlari ile gelen (block,file,object) verinin saklanmasi , yedeklenmesi , tutarli olmasi , tutarli olmasi icin yapilmasi gereken ne var ise bu katman bu deamon tarafindan yapiliyor.
OSD (Object Storage Device) = Ceph cluster sisteminde veri OSD denilen parcalara yaziliyor veya buradan okunuyor. OSD bizim icin disk veya disk parcacigi anlaminda ve bu disk bir partition olabilecegi gibi bir dizinde olabilir. Her bir disk icin bir OSD deamon calisiyor sistem uzerinde.
Ceph Monitor (MON) = Ceph cluster’inin saglik durumun gozlemler ve tum durumu (OSD, MON, PG, and CRUSH maps) bilir. Tum ceph nodelar MON ile konusup durum bilgisini belirtir.
RBD = ( Tekrar ) block access
RGW = ( Tekrar ) object access
MDS (Metadata Server) = CephFS icin file Metadata’sini tutar
CephFS = ( Tekrar ) file access
}
Pool = RADOS tum objeleri “pool” icersinde tutar
OSD = Normalde her yazilan data’nin bir yedegi oldugun ilgili data’yi iceren primary OSD ve yedegini iceren secondary OSD mevcut olup . Olasi bir problemde eger primary kaybedilir ise secondary primary olabilir ve RADOS arkada ikinci bir OSD bulup sistem tekrardan tutarli hale getirebilir. Bu islemlerden “client” etkilenmez.
Client OSD ile direkt iletisime gecer = Bunun icin oncelikle Client MON’u sorgular ve tum ceph cluster haritasini elde eder ve gerektiginde ilgili OSD ile direkt iletisime gecebilir.
OSD lerde bir dosya sistemi kullanir = xfs , ext4 veya btrfs .
XATTRs = Veriye ek metadata bilgisi eklemek icin kullanilir , sanki http request veya response’a header eklemek gibi.
Journal = Ceph’de journaling yapan file sistem kullandigindan datalar once log’a sonra dosya sistemine yazilacaktir. Performans direkt etkileneceginden journal diski SSD olmasi gerekmektedir, daha sonra data asil file sistem’e sync olacaktir.
{
}
OSD RAID istemez = her biri standalone disk olabilir fakat bazi durumlarda raid yapilabilir , cok diskli sunucularda her disk icin calisacak OSD deamon icin RAM yeterli olmayabilir.
librados = C Kutuphanesi , uygulamanin direk RADOS ile iletisime gecmesini sagliyor.
KRBD = Kernel RBD
Ceph Object Gateway = Kendine has kullanici yonetimi vardir , load balance icin birden fazla GW olabilir. FastCGI-capable web server
Object = neye benzer derseniz (asagida) , bunlarin hepsi OSD lere yaziliyor {
}
CRUSH Lookup =
- Client MON a baglanip Cluster MAP i cekiyor
- Client yazma isteginde bulunuyor ve data isim ve pool adi ile objeye cevriliyor
- Obje Placement Group ID ile hash’leniyor
- Daha sonra CRUSH algoritmasi sayesinde primary OSD bulunuyor
- Client direkt ilgili OSD ile iletisime gecip veriyi yaziyor
- Datanin yazildigi Node tekrarda CRASH Lookup yaparak ikinci Placement Group ve OSD bulur ve veri yazilir
- Veri yedekliligi saglanir
{
}
veya
{
}
Ortamdan Haberdar Demistik = Gordugunuz gibi DC, Sira , Kabin hepsini belirtebiliyorsunuz, bu liste sistem tarafindan yaratildigi gibi mudahale etme sansinizda var. Bu yapi onemli cunku yedeklilik buna gore sekilleniyor.
{
}
Recovery ve Rebalance = Olasi bilesen kaybi ve sisteme yeni eklenen OSD ler oldugunda sistem otomatik recovery ve rebalance islemi yapar. Yeni eklenen OSD leri “0” yuk parametresi ile girmeniz ve degeri kontrollu bir sekilde yukselmeniz oneriliyor.
Placement Group (PG) = Sanal kontenyner olarak adlandirabiliriz , sistemde bir suru obje olacagini dusunurseniz , bunlari daha kolay bulunabilmesi icin bir cesit guruplama / ara katman . Replikasyon sayiniza gore birden fazla OSD ile iliski icindedir.
PGP = PG
PG Hesaplama = Cikan sonuclari 2 katlari ile yuvarlayin 🙂
{
Ceph Cluster Basina
Toplam PG = (Toplam OSD * 100) / replikasyon_sayisi Ceph Cluster Pool Basina
Toplam PG = (Toplam OSD * 100) / replikasyon_sayisi / pool sayisi
}
Bir bakima OSD ler yan yana gelerek PG leri yaratirlara , PG lerin durumuda haliyle altindaki OSD lerin saglikli calisip calismadiklarina bagli , bunu icin OSD lerden primary olan ayni zamanda diger OSD lerle arasinda peering kurar ve bu peering’in status eger ok ise PG aktif ve calisiyor demektir baska bir deyisle bu PG e veri yazabiliriz demek oluyor.
Acting Set = PG den sorumlu olan OSD ler veya baska bir deyisle PG olusturan OSD ler 🙂
Ceph Cluster MAP = MON + OSD + PG + CRUSH + MDS
epoc = bir cesit versionlama veya numaralama
CRUSH Rule = replika veya erasure coding
CRUSH Rule Resimle ve Koruma = {
}
Background Petrol Read = {
Click to access ps1q06-20050212-Habas.pdf
}