Ceph izvÄle. 1. daļa
Mums bija piecas kastes, desmit optiskie slÄdži, konfigurÄts BGP, pÄris desmiti SSD un kaudze SAS diskus visÄs krÄsÄs un izmÄros, kÄ arÄ« proxmox un vÄlÄÅ”anÄs ievietot visu statiku savÄ S3 krÄtuvÄ. Ne jau tas viss bija nepiecieÅ”ams virtualizÄcijai, bet, ja jau sÄku izmantot opensource, tad ir jÄdara viss pa nopietno. VienÄ«gais, kas mani uztrauca ā tas bija BGP. PasaulÄ nav neviena bezpalÄ«dzÄ«gÄka, bezatbildÄ«gÄka un amorÄlÄka par iekÅ”Äjo marÅ”rutÄÅ”anu pa BGP. Un es zinÄju, ka diezgan drÄ«z mÄs tajÄ iedziļinÄsimies.

Uzdevums bija vienkÄrÅ”s ā bija Ceph, kas darbojÄs ne Ä«paÅ”i labi. VajadzÄja izdarÄ«t to "normÄli".
Mani uzticÄtÄ klastera struktÅ«ra bija dažÄda, Ätri konfigurÄta un praktiski netunÄta. Tas sastÄvÄja no divÄm dažÄdu mezglu grupÄm ar vienu kopÄju tÄ«klu, kas kalpoja gan kÄ klastera, gan publiskais tÄ«kls. Mezgli tika apgÄdÄti ar Äetriem disku veidiem ā diviem SSD veidiem, kas tika savÄkti divÄs atseviŔķÄs izvietojuma shÄmÄs, un diviem HDD dažÄdos izmÄros, kas tika grupÄti treÅ”ajÄ grupÄ. ProblÄma ar dažÄdajiem izmÄriem tika atrisinÄta ar dažÄdiem OSD svariem.
PaÅ”u konfigurÄciju sadalÄ«jÄm divÄs daļÄs ā operÄtÄjsistÄmas tuningÄ un un paÅ”a Ceph tuningÄ un viÅa iestatÄ«jumos.
OS jauninÄÅ”ana
Tīkls
Augsts latentums ietekmÄja gan ierakstu, gan balansÄÅ”anu. Ieraksta laikÄ ā jo klients nesaÅems atbildi par veiksmÄ«gu ierakstu, kamÄr dati citÄs izvietojuma grupÄs nepÄrbaudÄ«s panÄkumus. TÄ kÄ repliku sadales noteikumi CRUSH kartÄ bija ar vienu repliku uz host, tÄ«kls tika izmantots vienmÄr.
TÄdÄļ pirmais solis bija nedaudz noregulÄt esoÅ”o tÄ«klu, vienlaikus cenÅ”oties pÄrliecinÄt par pÄreju uz atseviŔķiem tÄ«kliem.
Vispirms uzliku uzstÄdÄ«jumus tÄ«kla kartÄm. SÄku ar rindas uzstÄdÄ«jumiem:
kas bija:
ethtool -l ens1f1
root@ceph01:~# ethtool -l ens1f1
KanÄlu parametri ens1f1:
IepriekÅ” iestatÄ«tÄs maksimumi:
RX: 0
TX: 0
Cits: 1
KopÄ: 63
PaÅ”reizÄjie aparatÅ«ras iestatÄ«jumi:
RX: 0
TX: 0
Cits: 1
KopÄ: 1
root@ceph01:~# ethtool -g ens1f1
Rindas parametri ens1f1:
IepriekÅ” iestatÄ«tÄs maksimumi:
RX: 4096
RX Mini: 0
RX Jumbo: 0
TX: 4096
PaÅ”reizÄjie aparatÅ«ras iestatÄ«jumi:
RX: 256
RX Mini: 0
RX Jumbo: 0
TX: 256
root@ceph01:~# ethtool -l ens1f1
KanÄlu parametri ens1f1:
IepriekÅ” iestatÄ«tÄs maksimumi:
RX: 0
TX: 0
Cits: 1
KopÄ: 63
PaÅ”reizÄjie aparatÅ«ras iestatÄ«jumi:
RX: 0
TX: 0
Cits: 1
KopÄ: 1Redzams, ka paÅ”reizÄjie parametri ir tÄlu no maksimumiem. PalielinÄju:
root@ceph01:~#ethtool -G ens1f0 rx 4096
root@ceph01:~#ethtool -G ens1f0 tx 4096
root@ceph01:~#ethtool -L ens1f0 combined 63Vadoties pÄc lieliskas raksta
palielinÄju sÅ«tīŔanas rindas garumu txqueuelen no 1000 lÄ«dz 10 000
root@ceph01:~#ip link set ens1f0 txqueuelen 10000Un sekojot ceph dokumentÄcijai
palielinÄju MTU lÄ«dz 9000.
root@ceph01:~#ip link set dev ens1f0 mtu 9000Pievienots ../etc/network/interfaces, lai viss iepriekÅ”minÄtais ielÄdÄtos startÄjot
cat /etc/network/interfaces
root@ceph01:~# cat /etc/network/interfaces
auto lo
iface lo inet loopback
auto ens1f0
iface ens1f0 inet manual
post-up /sbin/ethtool -G ens1f0 rx 4096
post-up /sbin/ethtool -G ens1f0 tx 4096
post-up /sbin/ethtool -L ens1f0 combined 63
post-up /sbin/ip link set ens1f0 txqueuelen 10000
mtu 9000
auto ens1f1
iface ens1f1 inet manual
post-up /sbin/ethtool -G ens1f1 rx 4096
post-up /sbin/ethtool -G ens1f1 tx 4096
post-up /sbin/ethtool -L ens1f1 combined 63
post-up /sbin/ip link set ens1f1 txqueuelen 10000
mtu 9000PÄc tam, sekojot Å”ai paÅ”ai rakstÄ, sÄku apdomÄ«gi uzstÄdÄ«t kodola 4.15 iestatÄ«jumus. Å emot vÄrÄ, ka mezgliem ir 128G RAM, izveidojÄs kÄds konfigurÄcijas fails sysctl
cat /etc/sysctl.d/50-ceph.conf
net.core.rmem_max = 56623104
#MaksimÄlais datu pieÅemÅ”anas bufera lielums visiem savienojumiem 54M
net.core.wmem_max = 56623104
#MaksimÄlais datu pÄrsÅ«tīŔanas bufera lielums visiem savienojumiem 54M
net.core.rmem_default = 56623104
#Datu pieÅemÅ”anas bufera lielums pÄc noklusÄjuma visiem savienojumiem. 54M
net.core.wmem_default = 56623104
#Datu pÄrsÅ«tīŔanas bufera lielums pÄc noklusÄjuma visiem savienojumiem 54M
# katram soketam
net.ipv4.tcp_rmem = 4096 87380 56623104
#Vektora (minimÄlais, pÄc noklusÄjuma, maksimÄlais) mainÄ«gais tcp_rmem failÄ
# satur 3 vesels skaitļus, kas nosaka TCP soketu pieÅemÅ”anas bufera lielumu.
# MinimÄlais: katram TCP soketam ir tiesÄ«bas izmantot Å”o atmiÅu
# tÄ izveidoÅ”anas brÄ«dÄ«. Å Äda bufera izmantoÅ”anas iespÄja
# tiek garantÄta pat sasniedzot ierobežojuma slieksni (vidÄja atmiÅas spiediena).
# MinimÄlÄ bufera noklusÄjuma izmÄrs ir 8 Kbaiti (8192).
# NoklusÄjuma vÄrtÄ«ba: atmiÅas daudzums, kas tiek pieÅemts
# TCP soketa pÄrsÅ«tīŔanas buferim pÄc noklusÄjuma. Å Ä« vÄrtÄ«ba tiek izmantota
# kÄ aizvietotÄjs parametram /proc/sys/net/core/rmem_default, ko izmanto
# citi protokoli.
# NoklusÄjuma izmÄra buferis parasti (pÄc noklusÄjuma)
# ir 87830 baiti. Tas nosaka loga izmÄru 65535
# ar noklusÄjuma tcp_adv_win_scale un tcp_app_win = 0,
# nedaudz mazÄku nekÄ normÄlo tcp_app_win noklusÄjuma vÄrtÄ«bu.
# MaksimÄlais: maksimÄlais bufera lielums, kas var tikt automÄtiski
# pieŔķirts TCP pieÅemÅ”anai. Å Ä« vÄrtÄ«ba neaizvieto maksimÄlo,
# kas norÄdÄ«ts failÄ /proc/sys/net/core/rmem_max. Statiskas
# atmiÅas pieŔķirÅ”anas gadÄ«jumÄ, izmantojot SO_RCVBUF, Å”is parametrs nav spÄkÄ.
net.ipv4.tcp_wmem = 4096 65536 56623104
net.core.somaxconn = 5000
# MaksimÄlais atvÄrto soketu skaits, kas gaida savienojumus.
net.ipv4.tcp_timestamps=1
# Atļauj izmantot laika zīmogus (timestamps), atbilstoŔi RFC 1323.
net.ipv4.tcp_sack=1
# Atļaut izvÄles apstiprinÄjumus TCP protokolÄ
net.core.netdev_max_backlog=5000 (noklusÄjums 1000)
# maksimÄlais paketu skaits rindÄ apstrÄdei, ja
# interfeiss saÅem paketus ÄtrÄk, nekÄ kodols tos spÄj apstrÄdÄt.
net.ipv4.tcp_max_tw_buckets=262144
# MaksimÄlais soketu skaits, kas vienlaicÄ«gi atrodas TIME-WAIT stÄvoklÄ«.
# PÄrsniedzot Å”o slieksni, "liekais" sokets tiek iznÄ«cinÄts un tiek ierakstÄ«ts
# ziÅojums sistÄmas žurnÄlÄ.
net.ipv4.tcp_tw_reuse=1
#Atļaujam atkÄrtotu izmantoÅ”anu TIME-WAIT soketiem gadÄ«jumos,
# ja protokols to uzskata par droŔu.
net.core.optmem_max=4194304
#PalielinÄt maksimÄlo kopÄjo buferizÄÅ”anas ALLOCATABLE
# izmÄru, kas mÄrÄ«ts lapas vienÄ«bÄs (4096 biti)
net.ipv4.tcp_low_latency=1
#Atļauj TCP/IP stekam dot priekŔroku zema laika aizkavei
# pirms augstÄka caurlaidspÄja.
net.ipv4.tcp_adv_win_scale=1
# Å is mainÄ«gais ietekmÄ atmiÅas apjoma aprÄÄ·inu soketa buferÄ«,
# ko pieŔķir TCP loga izmÄram un lietotnes buferim.
# Ja vÄrtÄ«ba tcp_adv_win_scale ir negatÄ«va, tad izmanto nÄkamo izteiksmi:
# Bytes- bytes2 pakÄpÄ -tcp_adv_win_scale
# Kur bytes ā ir loga izmÄrs baitos. Ja vÄrtÄ«ba tcp_adv_win_scale
# ir pozitÄ«va, tad izmanto nÄkamo izteiksmi:
# Bytes- bytes2 pakÄpÄ tcp_adv_win_scale
# MainÄ«gais pieÅem veselu skaitli. NoklusÄjuma vÄrtÄ«ba ir 2,
# t.i., lietotnes buferim tiek pieŔķirta ¼ daļa no apjoma, ko nosaka mainīgais
# tcp_rmem.
net.ipv4.tcp_slow_start_after_idle=0
# lÄnas palaiÅ”anas mehÄnisms, kas atiestata loga slodzes
# vÄrtÄ«bu, ja savienojums nav ticis izmantots noteiktu laiku.
# LabÄk izslÄgt SSR serverÄ«, lai uzlabotu
# ilgstoÅ”u savienojumu veiktspÄju.
net.ipv4.tcp_no_metrics_save=1
#NesaglabÄt TCP savienojuma mÄrÄ«jumu rezultÄtus keÅ”Ä, kad tas tiek slÄgts.
net.ipv4.tcp_syncookies=0
#IzslÄgt syncookie sÅ«tīŔanas mehÄnismu
net.ipv4.tcp_ecn=0
#Explicit Congestion Notification (Skaidrs PÄrslodzes PaziÅojums) TCP
# savienojumos. Tiek izmantots, lai paziÅotu par "sastrÄgumu"
# marÅ”rutÄ uz norÄdÄ«to host vai tÄ«klu. Var izmantot,
# lai paziÅotu sÅ«tÄ«tÄjam par nepiecieÅ”amÄ«bu samazinÄt paketu pÄrsÅ«tīŔanas Ätrumu caur
# konkrÄtu marÅ”rutÄtÄju vai ugunsmÅ«ri.
net.ipv4.conf.all.send_redirects=0
# izslÄdz ICMP Redirect sÅ«tīŔanu citiem hostiem. Å Ä« iespÄja noteikti
# jÄieslÄdz, ja hosts darbojas kÄ jebkÄda veida marÅ”rutÄtÄjs.
# Mums nav marÅ”rutÄÅ”anas.
net.ipv4.ip_forward=0
#LÄ«dz ar to izslÄdzam pÄrsÅ«tīŔanu. MÄs neesam tilts, docker uz maŔīnÄm nav pacelts,
# mums tas nav nepiecieŔams.
net.ipv4.icmp_echo_ignore_broadcasts=1
#NEREGULÄJAM ICMP ECHO pieprasÄ«jumus, kas nosÅ«tÄ«ti kÄ plaÅ”saziÅas paketi
net.ipv4.tcp_fin_timeout=10
#nosaka laiku, kad sokets tiek saglabÄts FIN-WAIT-2 stÄvoklÄ« pÄc tÄ
# slÄgÅ”anas no vietÄjÄs puses. NoklusÄjums 60
net.core.netdev_budget=600 # (noklusÄjums 300)
# Ja programmatÅ«ru pÄrtraukumi neizpildÄs pietiekami ilgi,
# tad ienÄkoÅ”o datu pieauguma temps var pÄrsniegt kodola iespÄju
# iztukÅ”ot buferi. TÄ rezultÄtÄ NIC buferi pÄrplÅ«dÄ«s, un datplÅ«sma tiks zaudÄta.
# Dažreiz ir nepiecieÅ”ams palielinÄt SoftIRQs
# (programmatÅ«ras pÄrtraukumu) darbÄ«bas ilgumu ar CPU. Par to ir atbildÄ«gs netdev_budget.
# NoklusÄjuma vÄrtÄ«ba 300. Parametrs liks SoftIRQ procesam apstrÄdÄt
# 300 paketus no NIC pirms CPU atbrīvoŔanas
net.ipv4.tcp_fastopen=3
# TFO TCP Fast Open
# ja abiem, klientam un serverim, ir atbalsts TFO, kas tiek norÄdÄ«ts
# ar speciÄlu karogu TCP pakotnÄ. MÅ«su gadÄ«jumÄ tas ir plasebo, vienkÄrÅ”i
# izskatÄs labi)Arluster tÄ«kls tika nodalÄ«ti atseviŔķos 10Gbps tÄ«kla saskarnÄs atseviÅ”Ä·Ä plakanÄ tÄ«klÄ. Uz katras maŔīnas tika uzstÄdÄ«tas divu portu tÄ«kla kartes mellanox 10/25 Gbps, kas tika iekļauti divos atseviŔķos 10Gbps slÄdžos. AgregÄcija tika veikta, izmantojot OSPF, jo bonda izmantoÅ”ana ar lacp, kÄ izrÄdÄ«jÄs, parÄdÄ«ja kopÄjo caurlaidspÄju maksimums 16 Gbps, kamÄr ospf veiksmÄ«gi izmantoja pilnÄ«bÄ abas desmit uz katras maŔīnas. TurpmÄkajos plÄnos bija izmantot ROCE uz Å”iem mellanox, lai samazinÄtu latentumu. KÄ tika konfigurÄta Ŕī tÄ«kla daļa:
- TÄ kÄ paÅ”Äm maŔīnÄm ir ÄrÄjie IP adreses BGP, mums ir nepiecieÅ”ams programmatÅ«ra ā (precÄ«zÄk, rakstīŔanas brÄ«dÄ« tas bija ) jau uzstÄdÄ«ts.
- KopumÄ maŔīnÄm bija divas tÄ«kla saskarnes ā kopÄ 4 porti. Viena tÄ«kla karte ar diviem portiem skatÄ«jÄs uz fabrikas pusi, un uz tÄs bija konfigurÄts BGP, otra ā ar diviem portiem skatÄ«jÄs uz diviem dažÄdiem slÄdžiem un uz to tika pÄrsÅ«tÄ«ts OSPF.
SÄ«kÄk par OSPF konfigurÄciju: Galvenais uzdevums ā agregÄt divus linkus un nodroÅ”inÄt kļūdu toleranci.
divas tÄ«kla saskarnes ir konfigurÄtas divÄs vienkÄrÅ”Äs plakanÄs tÄ«klos ā 10.10.10.0/24 un 10.10.20.0/24
1: ens1f0: mtu 9000 qdisc mq state UP group default qlen 1000
inet 10.10.10.2/24 brd 10.10.10.255 scope global ens1f0
2: ens1f1: mtu 9000 qdisc mq state UP group default qlen 1000
inet 10.10.20.2/24 brd 10.10.20.255 scope global ens1f1pÄc kuriem maŔīnas redz viena otru.
DISKS
NÄkamajÄ solÄ« nolÄmu optimizÄt disku darbÄ«bu. SSD gadÄ«jumÄ nomainÄ«ju plÄnotÄju uz noop, HDD gadÄ«jumÄ ā deadline. Ja vienkÄrÅ”i sakot ā NOOP darbojas pÄc principa Ā«kurÅ” pirmais piecÄlies ā tam arÄ« ÄÄ«basĀ», kas angliski izklausÄs kÄ Ā«FIFO (First In, First Out)Ā». PieprasÄ«jumi stÄv rindÄ, kad tie ienÄk. DEADLINE ir vairÄk orientÄts uz lasīŔanu, plus process no rindas saÅem gandrÄ«z monopolisku piekļuvi diskam operÄcijas laikÄ. MÅ«su sistÄmai tas ir ideÄli piemÄrots ā jo ar katru disku strÄdÄ tikai viens process ā OSD deamons.
(VÄlÄjÄji, kas vÄlas izpÄtÄ«t ieejas-izejas plÄnotÄju, var izlasÄ«t par to Å”eit:
VÄlÄjÄjiem lasÄ«t krieviski: )
Ieteikumos par Linux optimizÄciju ieteicams arÄ« palielinÄt nr_request
nr_requests
nr_requests vÄrtÄ«ba nosaka I/O pieprasÄ«jumu daudzumu, kas tiek buferizÄti pirms I/O plÄnotÄjs nosÅ«ta / saÅem datus uz / no bloka ierÄ«ces. Ja izmantojÄt RAID karti / bloku ierÄ«ci, kas var apstrÄdÄt lielÄku rindu, nekÄ to ir iestatÄ«jis I/O plÄnotÄjs, nr_requests vÄrtÄ«bas palielinÄÅ”ana var palÄ«dzÄt uzlabot caurlaidspÄju un samazinÄt servera slodzi, kad serverÄ« notiek lieli I/O procesi. Ja izmantojat Deadline vai CFQ kÄ plÄnotÄju, ieteicams iestatÄ«t nr_request vÄrtÄ«bu uz 2 reizes rindas dziļuma vÄrtÄ«bu.
TOMÄR! PaÅ”i CEPH izstrÄdÄtÄji pÄrliecina mÅ«s, ka viÅu prioritÄÅ”u sistÄma darbojas labÄk.

WBThrottle un / vai nr_requests
WBThrottle un / vai nr_requests
Failu krÄtuve izmanto buferizÄtas I/O operÄcijas rakstīŔanai; tas piedÄvÄ virkni priekÅ”rocÄ«bu, ja failu krÄtuves žurnÄls atrodas ÄtrÄkajÄ nesÄjÄ. Klienta pieprasÄ«jumi saÅem paziÅojumus, tiklÄ«dz dati ir rakstÄ«ti žurnÄlÄ, un pÄc tam tiek pÄrsÅ«tÄ«ti uz paÅ”u datu disku vÄlÄk, izmantojot standarta Linux funkcionalitÄti. Tas ļauj OSD spoles diskam piedÄvÄt rakstīŔanas latentumu, kas ir lÄ«dzÄ«gs SSD, kad dati tiek rakstÄ«ti nelielos pakeÅ”os. Å Äds aizkavÄts atliktais ieraksts arÄ« ļauj paÅ”am kodolam pÄrstrukturÄt I/O pieprasÄ«jumus uz disku ar cerÄ«bu vai nu apvienot tos, vai ļaut esoÅ”ajÄm diskÄ esoÅ”ajÄm galvÄm izvÄlÄties optimÄlÄku ceļu virs savÄm plÄksnÄm. Gala rezultÄts ir tas, ka jÅ«s varat izspiest nedaudz vairÄk I/O operÄciju no katra diska, nekÄ tas bÅ«tu iespÄjams, veicot tieÅ”as vai sinhroniskas I/O operÄcijas.
TomÄr, rodas noteikta problÄma, ja ienÄkoÅ”o ierakstu apjoms Å”ajÄ Ceph klasterÄ« pÄrsniedz visu pamatdisku iespÄjas. Å ÄdÄ scenÄrijÄ kopÄjais I/O operÄciju skaits, kas gaida ierakstu diskÄ, var nekontrolÄjami pieaugt un rezultÄtÄ izveidot I/O operÄciju rindas, kas aizpilda visu disku un Ceph rindas. LasīŔanas pieprasÄ«jumi ietekmÄ Ä«paÅ”i slikti, jo tie ieÄ·eras starp rakstīŔanas pieprasÄ«jumiem, kas var prasÄ«t vairÄkas sekundes, lai pÄrsÅ«tÄ«tu uz galveno disku.
Lai risinÄtu Å”o problÄmu, Ceph ir iebÅ«vÄts mehÄnisms atliktÄs rakstīŔanas (writeback) dzÄÅ”anas kontrolei ar nosaukumu WBThrottle. Tas ir izstrÄdÄts, lai ierobežotu kopÄjo atliktÄs rakstīŔanas I/O operÄciju apjomu, kas var tikt ievietots rindÄ un uzsÄkt savu izmeÅ”anas procesu agrÄk, nekÄ tas notiktu dabiski, ieslÄdzot paÅ”u kodolu. DiemžÄl testi rÄda, ka noklusÄjuma iestatÄ«jumi joprojÄm var neierobežot esoÅ”o uzvedÄ«bu lÄ«dz lÄ«menim, kas varÄtu samazinÄt ietekmi uz lasīŔanas latentumu. RegulÄÅ”ana var mainÄ«t Å”o uzvedÄ«bu un samazinÄt kopÄjo rakstīŔanas rindu garumu, padarot iespÄjamu vieglÄku ietekmi. TomÄr pastÄv kÄds kompromiss: samazinot kopÄjo maksimÄli atļauto rakstīŔanas ierakstu skaitu, jÅ«s varat samazinÄt paÅ”a kodola iespÄju maksimizÄt savu efektivitÄti, kÄrtÄ«bÄ saÅemto pieprasÄ«jumu. Ir vÄrts pÄrdomÄt, kas ir svarÄ«gÄks jÅ«su konkrÄtajÄ lietoÅ”anas gadÄ«jumÄ, darba slodzÄs un pielÄgot atbilstoÅ”i tam.
Lai pÄrvaldÄ«tu atliktÄs rakstīŔanas rindas dziļumu, jÅ«s varat vai nu samazinÄt kopÄjo maksimÄli atļauto neizpildÄ«to I/O operÄciju skaitu, izmantojot WBThrottle iestatÄ«jumus, vai arÄ« samazinÄt maksimÄlo vÄrtÄ«bu neizpildÄ«tÄm operÄcijÄm paÅ”Ä kodola bloku lÄ«menÄ«. Abi var efektÄ«vi pÄrvaldÄ«t vienu un to paÅ”u uzvedÄ«bu, un tieÅ”i jÅ«su izvÄles bÅ«s pamats Ŕīs iestatīŔanas Ä«stenoÅ”anai.
ArÄ« jÄatzÄ«mÄ, ka esoÅ”Ä Ceph operÄciju prioritÄÅ”u sistÄma ir efektÄ«vÄka Ä«sÄm pieprasÄ«juma operÄcijÄm diska lÄ«menÄ«. Samazinot kopÄjo rindu skaitu uz Å”o disku, galvenÄ atraÅ”anÄs vieta rindÄ tiek pÄrvietota uz Ceph, kur tam ir lielÄka kontrole pÄr to, kÄda prioritÄte ir I/O operÄcijai. ApskatÄ«sim nÄkamo piemÄru:
echo 8 > /sys/block/sda/queue/nr_requestsPARASTS
Un vÄl dažÄdi kodola iestatÄ«jumi, kas ļauj jÅ«su maŔīnai bÅ«t mÄ«kstÄkai un gludÄkai, izspiest vÄl nedaudz veiktspÄjas no aparatÅ«ras.
cat /etc/sysctl.d/60-ceph2.conf
kernel.pid_max = 4194303
# Disk drives in each machine are 25, so we calculated that there would be many processes
kernel.threads-max=2097152
# Threads, of course, also.
vm.max_map_count=524288
# Increased the number of memory mapping areas for the process.
# As indicated in the documentation for kernel variables
# Memory mapping areas are used as a side effect of calls
# malloc, directly via mmap, mprotect, and madvise, as well as when loading
# shared libraries.
fs.aio-max-nr=50000000
# Tuning input-output parameters
# The Linux kernel provides an asynchronous non-blocking input-output (AIO) function,
# which allows a process to initiate multiple input-output operations
# simultaneously, without waiting for any of them to finish.
# This helps improve application performance,
# which can overlap processing and input-output.
# The parameter aio-max-nr determines the maximum number of allowed
# simultaneous requests.
vm.min_free_kbytes=1048576
# The minimum size of free memory that needs to be maintained.
# Set to 1GB, which is quite sufficient for the operating system to function,
# and prevents the OOM Killer from affecting OSD processes. Although there is plenty
# of memory available, having a reserve does not hurt.
vm.swappiness=10
# Instruct to use swap if 10% of memory is free.
# On machines with 128G RAM, 10% is 12GB. More than enough for operation.
# The default parameter of 60% would cause the system to lag by going into swap,
# when there's still plenty of free memory.
vm.vfs_cache_pressure=1000
# Increasing from the default 100. Forcing the kernel to unload
# unused memory pages from the cache more aggressively.
vm.zone_reclaim_mode=0
# Allows setting more or less aggressive approaches to
# reclaiming memory when the zone runs out of memory.
# If set to zero, no zone reclaim occurs.
# For file servers or workloads
# it is advantageous if their data is cached, leaving zone_reclaim_mode
# disabled is preferable, since the caching effect
# is likely more important than the location of the data.
vm.dirty_ratio=20
# The percentage of RAM that can be allocated for "dirty" pages
# Calculated from an approximate estimate:
# The system has 128GB of memory.
# Approximately 20 SSD drives, which are configured in CEPH
# to allocate 3GB of RAM for caching.
# Approximately 40 HDD drives, for which this parameter equals 1GB.
# 20% of 128 is 25.6GB. Therefore, in case of maximum memory utilization,
# the system would have 2.4GB of memory left. Which should be enough for it to survive and await
# the cavalry - meaning the arrival of DevOps to fix everything.
vm.dirty_background_ratio=3
# The percentage of system memory that can be filled with dirty pages before
# background processes pdflush/flush/kdmflush write them to disk.
fs.file-max=524288
# We will likely have many more open files than indicated by default. IegremdÄÅ”anÄs CEPH
IestatÄ«jumi, pie kuriem vÄlÄtos apstÄties sÄ«kÄk:
cat /etc/ceph/ceph.conf
osd:
journal_aio: true # Trīs parametri, kas iekļauj
journal_block_align: true # tieŔo i/o
journal_dio: true # žurnÄlam
journal_max_write_bytes: 1073714824 # Nedaudz paplaÅ”inÄsim maksimÄlo izmÄru
# vienreizÄji rakstÄmÄs operÄcijas žurnÄlÄ
journal_max_write_entries: 10000 # Un arī vienlaicīgo ierakstu skaits
journal_queue_max_bytes: 10485760000
journal_queue_max_ops: 50000
rocksdb_separate_wal_dir: true # NolÄmÄm veidot atseviŔķu wal
# Pat mÄÄ£inÄjÄm pieÅemt Å”o jautÄjumu
# NVMe
bluestore_block_db_create: true # Nu arÄ« žurnÄlam atseviŔķa ierÄ«ce
bluestore_block_db_size: '5368709120 #5G'
bluestore_block_wal_create: true
bluestore_block_wal_size: '1073741824 #1G'
bluestore_cache_size_hdd: '3221225472 # 3G'
# liels operatÄ«vÄs atmiÅas apjoms ļauj
# uzglabÄt diezgan lielus apjomus
bluestore_cache_size_ssd: '9663676416 # 9G'
keyring: /var/lib/ceph/osd/ceph-$id/keyring
osd_client_message_size_cap: '1073741824 #1G'
osd_disk_thread_ioprio_class: idle
osd_disk_thread_ioprio_priority: 7
osd_disk_threads: 2 # pavedienu skaits demonam uz vienu disku
osd_failsafe_full_ratio: 0.95
osd_heartbeat_grace: 5
osd_heartbeat_interval: 3
osd_map_dedup: true
osd_max_backfills: 2 # vienlaicÄ«go piepildÄ«juma operÄciju skaits uz vienu OSD.
osd_max_write_size: 256
osd_mon_heartbeat_interval: 5
osd_op_threads: 16
osd_op_num_threads_per_shard: 1
osd_op_num_threads_per_shard_hdd: 2
osd_op_num_threads_per_shard_ssd: 2
osd_pool_default_min_size: 1 # ÄŖpatnÄ«bas alkatÄ«bas. Ä»oti Ätri sÄkÄs
osd_pool_default_size: 2 # vietas trūkums, jo pagaidu
# risinÄjums tika pieÅemts samazinÄt
# datu replikÄciju skaitu
osd_recovery_delay_start: 10.000000
osd_recovery_max_active: 2
osd_recovery_max_chunk: 1048576
osd_recovery_max_single_start: 3
osd_recovery_op_priority: 1
osd_recovery_priority: 1 # parametrs regulÄjams pÄc nepiecieÅ”amÄ«bas
osd_recovery_sleep: 2
osd_scrub_chunk_max: 4Daži parametri, kas tika pÄrbaudÄ«ti QA versijÄ 12.2.12, trÅ«kst versijÄ ceph 12.2.2, piemÄram osd_recovery_threads. TÄpÄc plÄnos bija iekļauta atjauninÄÅ”ana ražoÅ”anÄ lÄ«dz 12.2.12. Prakse parÄdÄ«ja saderÄ«bu vienÄ klasterÄ« ar versijÄm 12.2.2 un 12.2.12, kas ļauj veikt rullÄjoÅ”u atjauninÄjumu.
Testa klasteris
Dabis, testÄÅ”anai bija nepiecieÅ”ama tieÅ”i tÄda pati versija kÄ ražoÅ”anÄ, taÄu, kad es uzsÄku darbu ar klasteri, repozitorijÄ bija tikai jaunÄka versija. PÄrskatot, ka atŔķirÄ«bas starp nelielajÄm versijÄm nav lielas,1393 rindas konfigurÄcijÄs pret 1436 (jauno versiju), nolÄmÄm sÄkt testÄt jauno (tÄpat bÅ«s jÄatjaunina, kamdÄļ braukt ar veco miskasti)
VienÄ«gais, ko mÄs mÄÄ£inÄjÄm saglabÄt no vecÄs versijas, bija pakete ceph-deploy, jo daļa utilÄ«tu (un daļa darbinieku) bija pielÄgota tÄs sintaksei. JaunÄ versija bÅ«tiski atŔķīrÄs, taÄu tas ietekmÄja paÅ”a klastera darbÄ«bu, un mÄs to atstÄjÄm versijÄ. 1.5.39
TÄ kÄ komanda ceph-disk skaidri norÄda, ka tÄ ir novecojusi un aicina izmantot, cienÄ«jamie, komandu ceph-volume ā mÄs sÄkÄm izveidot OSD tieÅ”i ar Å”o komandu, netÄrÄjot laiku novecojuÅ”ai.
PlÄns bija tÄds ā izveidot spoguli no divÄm SSD diskiem, uz kuriem tiks novietoti OSD žurnÄli, kuri, savukÄrt, atrodas uz griezÄjdiskiem SAS. TÄdÄjÄdi mÄs aizsargÄsim datus pret problÄmÄm, ja diska žurnÄls sabojÄjas.
Klasteri sÄka veidot pÄc dokumentÄcijas
cat /etc/ceph/ceph.conf
root@ceph01-qa:~# cat /etc/ceph/ceph.conf # iepriekÅ” sagatavotÄ konfigurÄcija
[client]
rbd_cache = true
rbd_cache_max_dirty = 50331648
rbd_cache_max_dirty_age = 2
rbd_cache_size = 67108864
rbd_cache_target_dirty = 33554432
rbd_cache_writethrough_until_flush = true
rbd_concurrent_management_ops = 10
rbd_default_format = 2
[global]
auth_client_required = cephx
auth_cluster_required = cephx
auth_service_required = cephx
cluster network = 10.10.10.0/24
debug_asok = 0/0
debug_auth = 0/0
debug_buffer = 0/0
debug_client = 0/0
debug_context = 0/0
debug_crush = 0/0
debug_filer = 0/0
debug_filestore = 0/0
debug_finisher = 0/0
debug_heartbeatmap = 0/0
debug_journal = 0/0
debug_journaler = 0/0
debug_lockdep = 0/0
debug_mon = 0/0
debug_monc = 0/0
debug_ms = 0/0
debug_objclass = 0/0
debug_objectcatcher = 0/0
debug_objecter = 0/0
debug_optracker = 0/0
debug_osd = 0/0
debug_paxos = 0/0
debug_perfcounter = 0/0
debug_rados = 0/0
debug_rbd = 0/0
debug_rgw = 0/0
debug_throttle = 0/0
debug_timer = 0/0
debug_tp = 0/0
fsid = d0000000d-4000-4b00-b00b-0123qwe123qwf9
mon_host = ceph01-q, ceph02-q, ceph03-q
mon_initial_members = ceph01-q, ceph02-q, ceph03-q
public network = 8.8.8.8/28 # adrese ir mainīta, protams ))
rgw_dns_name = s3-qa.mycompany.ru # un Ŕī adrese arī ir mainīta
rgw_host = s3-qa.mycompany.ru # un Ŕī arī
[mon]
mon allow pool delete = true
mon_max_pg_per_osd = 300 # vairÄk nekÄ trÄ«s simti plÄnojumu grupu
# uz diska, izlemts neriskÄt
# lai gan parametrs, protams, atkarīgs no baseinu skaita,
# to izmÄriem un OSD skaita. Mazs, bet veselÄ«gs PG
# arÄ« nav labÄkais variants - cieÅ” balansÄÅ”anas precizitÄte
mon_osd_backfillfull_ratio = 0.9
mon_osd_down_out_interval = 5
mon_osd_full_ratio = 0.95 # paŔlaik SSD diskiem vieta to
# žurnÄlam ir tas pats ierÄ«ces, kas OSD
# izlemts, ka 5% no diska (kas pats ir 1.2Tb)
# bÅ«tu pilnÄ«gi pietiekami un korelÄ ar parametru
# bluestore_block_db_size plus variÄcija uz lielÄm
# plÄnojumu grupÄm
mon_osd_nearfull_ratio = 0.9
mon_pg_warn_max_per_osd = 520
[osd]
bluestore_block_db_create = true
bluestore_block_db_size = 5368709120 #5G
bluestore_block_wal_create = true
bluestore_block_wal_size = 1073741824 #1G
bluestore_cache_size_hdd = 3221225472 # 3G
bluestore_cache_size_ssd = 9663676416 # 9G
journal_aio = true
journal_block_align = true
journal_dio = true
journal_max_write_bytes = 1073714824
journal_max_write_entries = 10000
journal_queue_max_bytes = 10485760000
journal_queue_max_ops = 50000
keyring = /var/lib/ceph/osd/ceph-$id/keyring
osd_client_message_size_cap = 1073741824 #1G
osd_disk_thread_ioprio_class = idle
osd_disk_thread_ioprio_priority = 7
osd_disk_threads = 2
osd_failsafe_full_ratio = 0.95
osd_heartbeat_grace = 5
osd_heartbeat_interval = 3
osd_map_dedup = true
osd_max_backfills = 4
osd_max_write_size = 256
osd_mon_heartbeat_interval = 5
osd_op_num_threads_per_shard = 1
osd_op_num_threads_per_shard_hdd = 2
osd_op_num_threads_per_shard_ssd = 2
osd_op_threads = 16
osd_pool_default_min_size = 1
osd_pool_default_size = 2
osd_recovery_delay_start = 10.0
osd_recovery_max_active = 1
osd_recovery_max_chunk = 1048576
osd_recovery_max_single_start = 3
osd_recovery_op_priority = 1
osd_recovery_priority = 1
osd_recovery_sleep = 2
osd_scrub_chunk_max = 4
osd_scrub_chunk_min = 2
osd_scrub_sleep = 0.1
rocksdb_separate_wal_dir = true# ŃŠ¾Š·Š“аем Š¼Š¾Š½ŠøŃоŃŃ
root@ceph01-qa:~#ceph-deploy mon create ceph01-q
# Š³ŠµŠ½ŠµŃŠøŃŃŠµŠ¼ ŠŗŠ»ŃŃŠø Š“Š»Ń Š°ŃŃŠµŠ½ŃŠøŃŠøŠŗŠ°ŃŠøŠø ноГ в клаŃŃŠµŃе
root@ceph01-qa:~#ceph-deploy gatherkeys ceph01-q
# ŠŃо ŠµŃли поŃŃŃŃŠ½Š¾. ŠŃли Ń Š½Š°Ń Š½ŠµŃŠŗŠ¾Š»Ńко Š¼Š°Ńин ГоŃŃŃŠæŠ½Ń - ŃŠµ, ŠŗŠ¾ŃŠ¾ŃŃŠµ Š¾ŠæŠøŃŠ°Š½Ń в ŠŗŠ¾Š½Ńиге в ŃŠµŠŗŃŠøŠø
# mon_initial_members = ceph01-q, ceph02-q, ceph03-q
# можно запŃŃŃŠøŃŃ ŃŃŠø Гве ŠŗŠ¾Š¼Š°Š½Š“Ń Š² виГе оГной
root@ceph01-qa:~#ceph-deploy mon create-initial
# ŠŠ¾Š»Š¾Š¶ŠøŠ¼ ŠŗŠ»ŃŃŠø в ŃŠŗŠ°Š·Š°Š½Š½Ńе в ŠŗŠ¾Š½Ńиге меŃŃŠ°
root@ceph01-qa:~#cat ceph.bootstrap-osd.keyring > /var/lib/ceph/bootstrap-osd/ceph.keyring
root@ceph01-qa:~#cat ceph.bootstrap-mgr.keyring > /var/lib/ceph/bootstrap-mgr/ceph.keyring
root@ceph01-qa:~#cat ceph.bootstrap-rgw.keyring > /var/lib/ceph/bootstrap-rgw/ceph.keyring
# ŃŠ¾Š·Š“аГим ŠŗŠ»ŃŃ Š“Š»Ń ŃŠæŃŠ°Š²Š»ŠµŠ½ŠøŃ ŠŗŠ»Š°ŃŃŠµŃом
root@ceph01-qa:~#ceph-deploy admin ceph01-q
# Šø менеГжеŃ, плагинами ŃŠæŃавлŃŃŃ
root@ceph01-qa:~#ceph-deploy mgr create ceph01-qPirmais, ar ko sastapos, strÄdÄjot ar Å”o ceph-deploy versiju klasterÄ« ar versiju 12.2.12 ā tas ir kļūda, mÄÄ£inot izveidot OSD ar db uz programmatÅ«ras RAID ā
root@ceph01-qa:~#ceph-volume lvm create --bluestore --data /dev/sde --block.db /dev/md0
blkid nevarÄja noteikt PARTUUID ierÄ«cei: /dev/md1TieÅ”Äm, blkid nerÄda PARTUUID, bija jÄizveido sadaļas paÅ”rocÄ«gi:
root@ceph01-qa:~#parted /dev/md0 mklabel GPT
# sekciju būs daudz,
# bez GPT tÄs izveidot neizdosies
# sekcijas izmÄrs, ko mÄs norÄdÄ«jÄm iepriekÅ”ÄjÄ konfigurÄcijÄ = bluestore_block_db_size: '5368709120 #5G'
# Man ir 20 diski OSD, paŔrocīgi izveidot sadaļas slinkums
# tÄpÄc izveidoju ciklu
root@ceph01-qa:~#for i in {1..20}; do echo -e "nnnn+5Gnw" | fdisk /dev/md0; doneIzskatÄs, ka visi ir gatavi, mÄÄ£inÄm vÄlreiz izveidot OSD un saÅemam nÄkamo kļūdu (kura, starp citu, ražoÅ”anÄ nerÄdÄ«jÄs)
pie OSD bluestore veidoÅ”anas bez WAL ceļa norÄdīŔanas, bet ar db norÄdīŔanu
root@ceph01-qa:~#ceph-volume lvm create --bluestore --data /dev/sde --block.db /dev/md0
stderr: 2019-04-12 10:39:27.211242 7eff461b6e00 -1 bluestore(/var/lib/ceph/osd/ceph-0/) _read_fsid neparsÄjams uuid
stderr: 2019-04-12 10:39:27.213185 7eff461b6e00 -1 bdev(0x55824c273680 /var/lib/ceph/osd/ceph-0//block.wal) atvÄrt atvÄrts ieguva: (22) Nepareizs arguments
stderr: 2019-04-12 10:39:27.213201 7eff461b6e00 -1 bluestore(/var/lib/ceph/osd/ceph-0/) _open_db pievienot blokota ierÄ«ce(/var/lib/ceph/osd/ceph-0//block.wal) atgriezÄs: (22) Nepareizs arguments
stderr: 2019-04-12 10:39:27.999039 7eff461b6e00 -1 bluestore(/var/lib/ceph/osd/ceph-0/) mkfs neizdevÄs, (22) Nepareizs arguments
stderr: 2019-04-12 10:39:27.999057 7eff461b6e00 -1 OSD::mkfs: ObjectStore::mkfs neizdevÄs ar kļūdu (22) Nepareizs arguments
stderr: 2019-04-12 10:39:27.999141 7eff461b6e00 -1 ** KĻŪDA: tukÅ”a objekta krÄtuves izveide /var/lib/ceph/osd/ceph-0/: (22) Nepareizs argumentsJa tomÄr uz to paÅ”u spoguļa (vai citÄ vietÄ, pÄc izvÄles) izveido vÄl vienu sadaļu WAL un norÄda to OSD izveidÄ ā tad viss ies gludi (izÅemot atseviÅ”Ä·Ä WAL parÄdīŔanos, kuru, iespÄjams, jÅ«s nemaz negribÄjÄt).
TomÄr, Åemot vÄrÄ, ka tÄpat tÄlÄ plÄnotÄ ir WAL pÄrcelÅ”ana uz NVMe, tad prakse izrÄdÄ«jÄs lieka.
root@ceph01-qa:~#ceph-volume lvm create --bluestore --data /dev/sdf --block.wal /dev/md0p2 --block.db /dev/md1p2IzveidojÄm monitorus, menedžerus un OSD. Tagad vÄlamies tos grupÄt dažÄdi, jo plÄnoti ir dažÄdu veidu diski ā Ätri baseini uz SSD un lieli, bet lÄni uz HDD.
Uzcelsim, ka serveros ir 20 diski, pirmais desmit ir viens veids, otrais ā cits.
SÄkotnÄjÄ, noklusÄjuma, karte izskatÄs Å”Ädi:
ceph osd tree
root@ceph01-qa:~# ceph osd tree
ID KLASE SVARS TIPS NOSAUKUMS STATUSS PÄRVARÄT
-1 14.54799 sakne noklusÄjuma
-3 9.09200 hosts ceph01-qa
0 ssd 1.00000 osd.0 augÅ”Ä 1.00000 1.00000
1 ssd 1.00000 osd.1 augÅ”Ä 1.00000 1.00000
2 ssd 1.00000 osd.2 augÅ”Ä 1.00000 1.00000
3 ssd 1.00000 osd.3 augÅ”Ä 1.00000 1.00000
4 hdd 1.00000 osd.4 augÅ”Ä 1.00000 1.00000
5 hdd 0.27299 osd.5 augÅ”Ä 1.00000 1.00000
6 hdd 0.27299 osd.6 augÅ”Ä 1.00000 1.00000
7 hdd 0.27299 osd.7 augÅ”Ä 1.00000 1.00000
8 hdd 0.27299 osd.8 augÅ”Ä 1.00000 1.00000
9 hdd 0.27299 osd.9 augÅ”Ä 1.00000 1.00000
10 hdd 0.27299 osd.10 augÅ”Ä 1.00000 1.00000
11 hdd 0.27299 osd.11 augÅ”Ä 1.00000 1.00000
12 hdd 0.27299 osd.12 augÅ”Ä 1.00000 1.00000
13 hdd 0.27299 osd.13 augÅ”Ä 1.00000 1.00000
14 hdd 0.27299 osd.14 augÅ”Ä 1.00000 1.00000
15 hdd 0.27299 osd.15 augÅ”Ä 1.00000 1.00000
16 hdd 0.27299 osd.16 augÅ”Ä 1.00000 1.00000
17 hdd 0.27299 osd.17 augÅ”Ä 1.00000 1.00000
18 hdd 0.27299 osd.18 augÅ”Ä 1.00000 1.00000
19 hdd 0.27299 osd.19 augÅ”Ä 1.00000 1.00000
-5 5.45599 resursu ceph02-q
20 ssd 0.27299 osd.20 augÅ”Ä 1.00000 1.00000
21 ssd 0.27299 osd.21 augÅ”Ä 1.00000 1.00000
22 ssd 0.27299 osd.22 augÅ”Ä 1.00000 1.00000
23 ssd 0.27299 osd.23 augÅ”Ä 1.00000 1.00000
24 hdd 0.27299 osd.24 augÅ”Ä 1.00000 1.00000
25 hdd 0.27299 osd.25 augÅ”Ä 1.00000 1.00000
26 hdd 0.27299 osd.26 augÅ”Ä 1.00000 1.00000
27 hdd 0.27299 osd.27 augÅ”Ä 1.00000 1.00000
28 hdd 0.27299 osd.28 augÅ”Ä 1.00000 1.00000
29 hdd 0.27299 osd.29 augÅ”Ä 1.00000 1.00000
30 hdd 0.27299 osd.30 augÅ”Ä 1.00000 1.00000
31 hdd 0.27299 osd.31 augÅ”Ä 1.00000 1.00000
32 hdd 0.27299 osd.32 augÅ”Ä 1.00000 1.00000
33 hdd 0.27299 osd.33 augÅ”Ä 1.00000 1.00000
34 hdd 0.27299 osd.34 augÅ”Ä 1.00000 1.00000
35 hdd 0.27299 osd.35 augÅ”Ä 1.00000 1.00000
36 hdd 0.27299 osd.36 augÅ”Ä 1.00000 1.00000
37 hdd 0.27299 osd.37 augÅ”Ä 1.00000 1.00000
38 hdd 0.27299 osd.38 augÅ”Ä 1.00000 1.00000
39 hdd 0.27299 osd.39 augÅ”Ä 1.00000 1.00000
-7 6.08690 resursu ceph03-q
40 ssd 0.27299 osd.40 augÅ”Ä 1.00000 1.00000
41 ssd 0.27299 osd.41 augÅ”Ä 1.00000 1.00000
42 ssd 0.27299 osd.42 augÅ”Ä 1.00000 1.00000
43 ssd 0.27299 osd.43 augÅ”Ä 1.00000 1.00000
44 hdd 0.27299 osd.44 augÅ”Ä 1.00000 1.00000
45 hdd 0.27299 osd.45 augÅ”Ä 1.00000 1.00000
46 hdd 0.27299 osd.46 augÅ”Ä 1.00000 1.00000
47 hdd 0.27299 osd.47 augÅ”Ä 1.00000 1.00000
48 hdd 0.27299 osd.48 augÅ”Ä 1.00000 1.00000
49 hdd 0.27299 osd.49 augÅ”Ä 1.00000 1.00000
50 hdd 0.27299 osd.50 augÅ”Ä 1.00000 1.00000
51 hdd 0.27299 osd.51 augÅ”Ä 1.00000 1.00000
52 hdd 0.27299 osd.52 augÅ”Ä 1.00000 1.00000
53 hdd 0.27299 osd.53 augÅ”Ä 1.00000 1.00000
54 hdd 0.27299 osd.54 augÅ”Ä 1.00000 1.00000
55 hdd 0.27299 osd.55 augÅ”Ä 1.00000 1.00000
56 hdd 0.27299 osd.56 augÅ”Ä 1.00000 1.00000
57 hdd 0.27299 osd.57 augÅ”Ä 1.00000 1.00000
58 hdd 0.27299 osd.58 augÅ”Ä 1.00000 1.00000
59 hdd 0.89999 osd.59 augÅ”Ä 1.00000 1.00000
Izveidosim savus virtuÄlos stendus un serverus ar melnajiem jokeriem un pÄrÄjo:
root@ceph01-q:~#ceph osd crush add-bucket rack01 sakne #izveidojÄm jauno sakni
root@ceph01-q:~#ceph osd crush add-bucket ceph01-q host #izveidojÄm jaunu resursu
root@ceph01-q:~#ceph osd crush move ceph01-q root=rack01 #pÄrvietojÄm serveri uz citu stendu
root@ceph01-q:~#osd crush add 28 1.0 host=ceph02-q # pievienojÄm OSD serverim
# Ja esam nepareizi izveidojuÅ”i, varam dzÄst
root@ceph01-q:~# ceph osd crush remove osd.4
root@ceph01-q:~# ceph osd crush remove rack01ProblÄmas, ar kurÄm mÄs saskÄrÄmies cÄ«Åas klasterÄ«, mÄÄ£inot izveidot jaunus resursus un pÄrvietot tos uz esoÅ”u stendu ā komanda ceph osd crush move ceph01-host root=rack01 iestrÄga, un monitora sÄka krist viens pÄc otra. Komandas pÄrtraukÅ”ana ar vienkÄrÅ”o CTRL+C atgrieza klasteri dzÄ«vo pasaulÄ.
MeklÄÅ”ana parÄdÄ«ja Å”Ädu problÄmu:
RisinÄjums izrÄdÄ«jÄs iznests crushmap un izdzÄst no turienes sadaļu rule replicated_ruleset
root@ceph01-prod:~#ceph osd getcrushmap -o crushmap.row #izmetam karti neapstrÄdÄtÄ veidÄ
root@ceph01-prod:~#crushtool -d crushmap.row -o crushmap.txt #pÄrvÄrÅ”am to lasÄmÄ
root@ceph01-prod:~#vim crushmap.txt #rediÄ£Äjam, izdzÄÅ”ot rule replicated_ruleset
root@ceph01-prod:~#crushtool -c crushmap.txt -o new_crushmap.row #kompiliÄjam atpakaļ
root@ceph01-prod:~#ceph osd setcrushmap -i new_crushmap.row #ielÄdÄjam klasterÄ«UzmanÄ«bu: Ŕī operÄcija var izsaukt pÄrbalansÄÅ”anu placement group starp OSD. Mums tas izraisÄ«ja, taÄu ļoti nedaudz.
DÄ«vainÄ«ba, ar ko mÄs saskÄrÄmies testÄÅ”anas klasterÄ«, ir tÄ, ka pÄc servera restartÄÅ”anas OSD aizmirsÄ«s, ka tie tika pÄrvietoti uz jaunajiem serveriem un plauktiem, un atgriezÄ«sies sÄkotnÄjÄ noklusÄjuma stÄvoklÄ«.
Galu galÄ, izveidojot galÄ«go shÄmu, kurÄ mÄs izveidojÄm atseviŔķu root ssd diskiem un atseviŔķu spindulveida diskiem, mÄs izklÄ«dÄm visus OSD plauktos un vienkÄrÅ”i izdzÄsam noklusÄjuma root. PÄc restartÄÅ”anas OSD palika savÄs vietÄs.
PÄcÄk rakÄjoties dokumentÄcijÄ, atradÄm parametrus, kas ir atbildÄ«gi par Å”o uzvedÄ«bu. Par to otrajÄ daļÄ.
KÄ mÄs izveidojÄm dažÄdas grupas pÄc disk tipu.
SÄksim ar divu root izveidi ā ssd un hdd.
root@ceph01-q:~#ceph osd crush add-bucket ssd-root root
root@ceph01-q:~#ceph osd crush add-bucket hdd-root rootTÄ kÄ fiziski serveri atrodas dažÄdos plauktos ā ÄrtÄ«bas labad izveidojÄm plauktus un tajos jau serverus.
# Š”ŃŠ¾Š¹ŠŗŠø:
root@ceph01-q:~#ceph osd crush add-bucket ssd-rack01 rack
root@ceph01-q:~#ceph osd crush add-bucket ssd-rack02 rack
root@ceph01-q:~#ceph osd crush add-bucket ssd-rack03 rack
root@ceph01-q:~#ceph osd crush add-bucket hdd-rack01 rack
root@ceph01-q:~#ceph osd crush add-bucket hdd-rack01 rack
root@ceph01-q:~#ceph osd crush add-bucket hdd-rack01 rack
# Š”ŠµŃŠ²ŠµŃа
root@ceph01-q:~#ceph osd crush add-bucket ssd-ceph01-q host
root@ceph01-q:~#ceph osd crush add-bucket ssd-ceph02-q host
root@ceph01-q:~#ceph osd crush add-bucket ssd-ceph03-q host
root@ceph01-q:~#ceph osd crush add-bucket hdd-ceph01-q host
root@ceph01-q:~#ceph osd crush add-bucket hdd-ceph02-q host
root@ceph01-q:~#ceph osd crush add-bucket hdd-ceph02-q hostun sadalÄ«jÄm diskus pÄc to veidiem dažÄdos serveros.
root@ceph01-q:~# Diski no 0 lÄ«dz 3 ir SSD, atrodas ceph01-q, iestÄjam tos serverÄ«
root@ceph01-q:~# ssd-ceph01-q
root@ceph01-q:~#ceph osd crush add 0 1 host=ssd-ceph01-q
root@ceph01-q:~#ceph osd crush add 1 1 host=ssd-ceph01-q
root@ceph01-q:~#ceph osd crush add 2 1 host=ssd-ceph01-q
root@ceph01-q:~#ceph osd crush add 3 1 host=ssd-ceph01-q
root-ceph01-q:~# analoÄ£iski ar citiem serveriem.Sadalot diskus pa ssd-root un hdd-root, mÄs atstÄjÄm root-default tukÅ”u, tÄpÄc varam to dzÄst.
root-ceph01-q:~#ceph osd crush remove defaultTÄlÄk jÄizveido izplatīŔanas noteikumi, ko piesaistÄ«sim izveidotajiem pulciÅiem ā noteikumos norÄdÄ«sim, kuros root var glabÄt mÅ«su pÅ«la datus un replikas unikÄluma lÄ«meni ā piemÄram, replikÄm jÄbÅ«t obligÄti uz dažÄdiem serveriem vai dažÄdos plauktos (var pat bÅ«t dažÄdos root, ja mums ir tÄda izplatīŔana).
Pirms izvÄlÄties veidu, labÄk izlasÄ«t dokumentÄciju:
root-ceph01-q:~#ceph osd crush rule create-simple rule-ssd ssd-root host firstn
root-ceph01-q:~#ceph osd crush rule create-simple rule-hdd hdd-root host firstn
root-ceph01-q:~# MÄs norÄdÄ«jÄm divus noteikumus, kuros dati replikÄjas
root-ceph01-q:~# starp hostiem - t.i., replikai jÄbÅ«t uz cita hosta,
root-ceph01-q:~# pat ja tie ir vienÄ plauktÄ
root-ceph01-q:~# RažoÅ”anÄ, ja ir iespÄja, labÄk izkliedÄt hostus
root-ceph01-q:~# pa plauktiem un norÄdÄ«t izplatÄ«t replikas pa plauktiem:
root-ceph01-q:~# ##ceph osd crush rule create-simple rule-ssd ssd-root rack firstnTÄtad, mÄs izveidojam baseinus, kuros nÄkotnÄ vÄlÄsimies glabÄt mÅ«su virtualizÄcijas diska attÄlus ā PROXMOX:
root-ceph01-q:~# #ceph osd pool create {NAME} {pg_num} {pgp_num}
root-ceph01-q:~# ceph osd pool create ssd_pool 1024 1024
root-ceph01-q:~# ceph osd pool create hdd_pool 1024 1024Un norÄdÄm Å”iem baseiniem, kÄdi izvietoÅ”anas noteikumi jÄievÄro
root-ceph01-q:~#ceph osd crush rule ls # skatÄmies noteikumu sarakstu
root-ceph01-q:~#ceph osd crush rule dump rule-ssd | grep rule_id #izvÄlamies nepiecieÅ”amÄ ID
root-ceph01-q:~#ceph osd pool set ssd_pool crush_rule 2
Pie plÄnojot placment grupu skaitu, jÄpieiet ar iepriekÅ”Äju izpratni par savu klasteri ā cik apmÄram OSD tur bÅ«s, kÄds datu apjoms (procentos no kopÄjÄ apjoma) bÅ«s baseinÄ, cik kopÄjais datu apjoms.
KopumÄ vÄlams, lai uz diska nebÅ«tu vairÄk par 300 placment grupÄm, un bÅ«s vieglÄk balansÄt ar mazÄm placment grupÄm ā tas ir, ja viss jÅ«su baseins aizÅem 10 Tb un tajÄ ir 10 PG ā tad balansÄt, pÄrvietojot terabaitus (pg) bÅ«s sarežģīti ā pÄrvietot smiltis ar maziem graudiem pa spainīŔiem ir vieglÄk un vienmÄrÄ«gÄk).
Bet jÄpatur prÄtÄ, ka jo vairÄk PG ā jo vairÄk resursu tiek patÄrÄts uz to izvietoÅ”anas aprÄÄ·inÄÅ”anu ā sÄk tikt izmantota atmiÅa un CPU.
Aptuvena izpratne var , ko snieguÅ”i CEPH dokumentÄcijas izstrÄdÄtÄji.
MateriÄlu saraksts:
Avots: habr.com
