{"id":77266,"date":"2020-04-09T13:42:08","date_gmt":"2020-04-09T11:42:08","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/tips-tricks-v-rabote-s-ceph-v-nagruzhennyh-proektah"},"modified":"2020-04-09T13:42:08","modified_gmt":"2020-04-09T11:42:08","slug":"tips-tricks-v-rabote-s-ceph-v-nagruzhennyh-proektah","status":"publish","type":"post","link":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/tips-tricks-v-rabote-s-ceph-v-nagruzhennyh-proektah","title":{"rendered":"Porady i triki dotycz\u0105ce pracy z Ceph w obci\u0105\u017conych projektach","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Porady i triki w pracy z Ceph w obci\u0105\u017conych projektach\" src=\"\/wp-content\/uploads\/2020\/04\/1d60f91e55b20a5dc4346bd8087bc11e.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nU\u017cywaj\u0105c Ceph jako sieciowe magazynowanie w r\u00f3\u017cnych projektach o r\u00f3\u017cnym obci\u0105\u017ceniu, mo\u017cemy napotka\u0107 r\u00f3\u017cne zadania, kt\u00f3re na pierwszy rzut oka nie wydaj\u0105 si\u0119 proste ani trywialne. Na przyk\u0142ad:<\/p>\n<ul>\n<li> migracja danych ze starego Ceph do nowego z cz\u0119\u015bciowym wykorzystaniem poprzednich serwer\u00f3w w nowym klastrze;<\/li>\n<li> rozwi\u0105zanie problemu rozdzielania przestrzeni dyskowej w Ceph.<\/li>\n<\/ul>\n<p>\nZajmuj\u0105c si\u0119 takimi zadaniami, stykamy si\u0119 z konieczno\u015bci\u0105 poprawnego wyci\u0105gni\u0119cia OSD bez utraty danych, co jest szczeg\u00f3lnie istotne przy du\u017cych woluminach danych. O tym b\u0119dzie mowa w artykule.<\/p>\n<p>Opisane poni\u017cej metody s\u0105 aktualne dla wszystkich wersji Ceph. Ponadto we\u017amie si\u0119 pod uwag\u0119 fakt, \u017ce w Ceph mo\u017cna przechowywa\u0107 du\u017c\u0105 ilo\u015b\u0107 danych: aby zapobiec utracie danych i innym problemom, niekt\u00f3re dzia\u0142ania b\u0119d\u0105 \u201edzielone\u201d na kilka innych.<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3>Wst\u0119p do OSD<\/h3>\n<p>\nPoniewa\u017c dwa z trzech omawianych przepis\u00f3w dotycz\u0105 OSD (<noindex><a rel=\"nofollow\" href=\"https:\/\/docs.ceph.com\/docs\/master\/man\/8\/ceph-osd\/\">Object Storage Daemon<\/a><\/noindex>), przed przej\u015bciem do cz\u0119\u015bci praktycznej \u2014 w skr\u00f3cie opowiemy, czym to w\u0142a\u015bciwie jest w Ceph i dlaczego jest tak wa\u017cne.<\/p>\n<p>Przede wszystkim nale\u017cy powiedzie\u0107, \u017ce ca\u0142y klaster Ceph sk\u0142ada si\u0119 z wielu OSD. Im wi\u0119cej ich jest, tym wi\u0119cej wolnej przestrzeni danych w Ceph. St\u0105d \u0142atwo zrozumie\u0107 <b>g\u0142\u00f3wn\u0105 funkcj\u0119 OSD<\/b>: przechowuje dane obiekt\u00f3w Ceph na systemach plik\u00f3w wszystkich w\u0119z\u0142\u00f3w klastra i zapewnia dost\u0119p sieciowy do nich (do odczytu, zapisu i innych \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432).<\/p>\n<p>Na tym samym poziomie ustalane s\u0105 parametry replikacji poprzez kopiowanie obiekt\u00f3w mi\u0119dzy r\u00f3\u017cnymi OSD. I tutaj mo\u017cna napotka\u0107 r\u00f3\u017cne problemy, o rozwi\u0105zaniu kt\u00f3rych b\u0119dzie mowa dalej.<\/p>\n<h2>Przypadek nr 1. Bezpieczne wyci\u0105ganie OSD z klastra Ceph bez utraty danych<\/h2>\n<p>\nPotrzeba wyci\u0105gni\u0119cia OSD mo\u017ce by\u0107 spowodowana usuni\u0119ciem serwera z klastra \u2014 na przyk\u0142ad w celu jego wymiany na inny serwer \u2014 co mia\u0142o miejsce w naszym przypadku, co by\u0142o powodem napisania artyku\u0142u. Ostatecznym celem dzia\u0142a\u0144 jest wyci\u0105gni\u0119cie wszystkich OSD i mon\u00f3w na tym serwerze, aby mo\u017cna by\u0142o go zatrzyma\u0107.<\/p>\n<p>Dla wygody i unikni\u0119cia sytuacji, w kt\u00f3rej podczas wykonywania polece\u0144 pope\u0142nimy b\u0142\u0105d w wskazywaniu odpowiedniego OSD, zdefiniujemy oddzieln\u0105 zmienn\u0105, kt\u00f3rej warto\u015bci\u0105 b\u0119dzie numer usuwanego OSD. Nazwijmy j\u0105 <code>${ID}<\/code> \u2014 tutaj i w dalszej cz\u0119\u015bci taka zmienna zast\u0119puje numer OSD, z kt\u00f3rym pracujemy.<\/p>\n<p>Zobaczmy stan przed rozpocz\u0119ciem prac:<\/p>\n<pre><code class=\"bash\">root@hv-1 ~ # ceph osd tree\nID CLASS WEIGHT  TYPE NAME      STATUS REWEIGHT PRI-AFF\n-1       0.46857 root default\n-3       0.15619      host hv-1\n-5       0.15619      host hv-2\n 1   ssd 0.15619      osd.1     up     1.00000  1.00000\n-7       0.15619      host hv-3\n 2   ssd 0.15619      osd.2     up     1.00000  1.00000<\/code><\/pre>\n<p>\nAby zainicjowa\u0107 usuni\u0119cie OSD, nale\u017cy stopniowo wykona\u0107 <code>reweight<\/code> na niej do zera. W ten spos\u00f3b zmniejszamy ilo\u015b\u0107 danych w OSD poprzez ich balansowanie na inne OSD. W tym celu wykonuje si\u0119 nast\u0119puj\u0105ce polecenia:<\/p>\n<pre><code class=\"bash\">ceph osd reweight osd.${ID} 0.98\nceph osd reweight osd.${ID} 0.88\nceph osd reweight osd.${ID} 0.78<\/code><\/pre>\n<p>\n\u2026 i tak dalej do zera.<\/p>\n<p><b>Stopniowe balansowanie jest konieczne<\/b>, aby nie utraci\u0107 danych. Jest to szczeg\u00f3lnie wa\u017cne, je\u015bli w OSD znajduje si\u0119 du\u017ca ilo\u015b\u0107 danych. Aby dok\u0142adnie upewni\u0107 si\u0119, \u017ce po wykonaniu polece\u0144 <code>reweight<\/code> wszystko posz\u0142o pomy\u015blnie, mo\u017cna wykona\u0107 <code>ceph -s<\/code> lub w osobnym oknie terminala uruchomi\u0107 <code>ceph -w<\/code> aby obserwowa\u0107 zmiany w czasie rzeczywistym.<\/p>\n<p>Gdy OSD jest \"opustoszona\", mo\u017cna przyst\u0105pi\u0107 do standardowej operacji jej usuni\u0119cia. W tym celu przeka\u017cemy odpowiedni\u0105 OSD w stan <code>down<\/code>:<\/p>\n<pre><code class=\"bash\">ceph osd down osd.${ID}<\/code><\/pre>\n<p>\n\"Wydob\u0119dziemy\" OSD z klastra:<\/p>\n<pre><code class=\"bash\">ceph osd out osd.${ID}<\/code><\/pre>\n<p>\nZatrzymamy us\u0142ug\u0119 OSD i odmontujemy jej partycj\u0119 w FS:<\/p>\n<pre><code class=\"bash\">systemctl stop ceph-osd@${ID}\numount \/var\/lib\/ceph\/osd\/ceph-${ID}<\/code><\/pre>\n<p>\nUsuniemy OSD z <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.ceph.com\/docs\/nautilus\/rados\/operations\/crush-map\/\">mapy CRUSH<\/a><\/noindex>:<\/p>\n<pre><code class=\"bash\">ceph osd crush remove osd.${ID}<\/code><\/pre>\n<p>\nUsuniemy u\u017cytkownika OSD:<\/p>\n<pre><code class=\"bash\">ceph auth del osd.${ID}<\/code><\/pre>\n<p>\nI wreszcie usuniemy sam\u0105 OSD:<\/p>\n<pre><code class=\"bash\">ceph osd rm osd.${ID}<\/code><\/pre>\n<p>\n<b>Uwaga<\/b>: je\u015bli u\u017cywasz wersji Ceph Luminous lub wy\u017cszej, to powy\u017csze dzia\u0142ania zwi\u0105zane z usuni\u0119ciem OSD mo\u017cna sprowadzi\u0107 do dw\u00f3ch polece\u0144:<\/p>\n<pre><code class=\"bash\">ceph osd out osd.${ID}\nceph osd purge osd.${ID}\n<\/code><\/pre>\n<p>\nJe\u015bli po wykonaniu powy\u017cszych dzia\u0142a\u0144 wykonasz polecenie <code>ceph osd tree<\/code>, powinno by\u0107 wida\u0107, \u017ce na serwerze, na kt\u00f3rym przeprowadzano prace, nie ma ju\u017c OSD, dla kt\u00f3rych przeprowadzano wcze\u015bniejsze operacje:<\/p>\n<pre><code class=\"bash\">root@hv-1 ~ # ceph osd tree\nID CLASS WEIGHT  TYPE NAME     STATUS REWEIGHT PRI-AFF\n-1       0.46857      root default\n-3       0.15619      host hv-1\n-5       0.15619      host hv-2\n-7       0.15619      host hv-3\n 2   ssd 0.15619      osd.2    up     1.00000  1.00000<\/code><\/pre>\n<p>\nPrzy okazji zauwa\u017cymy, \u017ce stan klastra Ceph przechodzi w <code>HEALTH_WARN<\/code>, a tak\u017ce zobaczymy zmniejszenie liczby OSD oraz dost\u0119pnego miejsca na dysku. <\/p>\n<p>Dalej opisane b\u0119d\u0105 dzia\u0142ania, kt\u00f3re b\u0119d\u0105 wymagane, je\u015bli chcesz ca\u0142kowicie zatrzyma\u0107 serwer i odpowiednio usun\u0105\u0107 go z Ceph. W takim przypadku wa\u017cne jest, aby pami\u0119ta\u0107, \u017ce <b>przed wy\u0142\u0105czeniem serwera nale\u017cy wyodr\u0119bni\u0107 wszystkie OSD<\/b> na tym serwerze.<\/p>\n<p>Je\u015bli na tym serwerze nie pozosta\u0142y ju\u017c \u017cadne OSD, to po ich usuni\u0119ciu nale\u017cy wykluczy\u0107 z mapy OSD serwer <code>hv-2<\/code>, wykonuj\u0105c nast\u0119puj\u0105ce polecenie:<\/p>\n<pre><code class=\"bash\">ceph osd crush rm hv-2<\/code><\/pre>\n<p>\nUsuwamy <code>mon<\/code> z serwera <code>hv-2<\/code>, uruchamiaj\u0105c polecenie poni\u017cej na innym serwerze (tj. w tym przypadku \u2014 na <code>hv-1<\/code>):<\/p>\n<pre><code class=\"bash\">ceph-deploy mon destroy hv-2<\/code><\/pre>\n<p>\nPo tym mo\u017cna zatrzyma\u0107 serwer i przej\u015b\u0107 do kolejnych dzia\u0142a\u0144 (jego ponownego wdra\u017cania itd.).<\/p>\n<h2>Przypadek nr 2. Rozdzia\u0142 przestrzeni dyskowej w ju\u017c utworzonym klastrze Ceph<\/h2>\n<p>\nDrug\u0105 histori\u0119 rozpoczn\u0119 od wprowadzenia na temat PG (<noindex><a rel=\"nofollow\" href=\"https:\/\/docs.ceph.com\/docs\/mimic\/rados\/operations\/placement-groups\/\">Placement Groups<\/a><\/noindex>). G\u0142\u00f3wna rola PG w Ceph polega przede wszystkim na agregowaniu obiekt\u00f3w Ceph i dalszej replikacji w OSD. Wz\u00f3r, za pomoc\u0105 kt\u00f3rego mo\u017cna obliczy\u0107 potrzebn\u0105 liczb\u0119 PG, znajduje si\u0119 w <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.ceph.com\/docs\/mimic\/rados\/operations\/placement-groups\/#choosing-the-number-of-placement-groups\">odpowiedniej sekcji<\/a><\/noindex> dokumentacji Ceph. Tam te\u017c ten problem zosta\u0142 om\u00f3wiony na konkretnych przyk\u0142adach.<\/p>\n<p>Tak wi\u0119c: jednym z powszechnych problem\u00f3w podczas eksploatacji Ceph jest niezr\u00f3wnowa\u017cona liczba OSD i PG pomi\u0119dzy pulami w Ceph.<\/p>\n<p>Po pierwsze, mo\u017ce zaistnie\u0107 sytuacja, w kt\u00f3rej wskazana zostanie zbyt du\u017ca liczba PG w ma\u0142ej obj\u0119to\u015bci pu\u0142ki, co w zasadzie jest nieracjonalnym wykorzystaniem przestrzeni dyskowej w klastrze. Po drugie, w praktyce pojawia si\u0119 powa\u017cniejszy problem: przepe\u0142nienie danych w jednym z OSD. To prowadzi do stanu klastra najpierw w <code>HEALTH_WARN<\/code>, a potem w <code>HEALTH_ERR<\/code>. Wszystkiemu winien jest fakt, \u017ce Ceph przy obliczaniu dost\u0119pnej obj\u0119to\u015bci danych (mo\u017cna to sprawdzi\u0107 za pomoc\u0105 <code>MAX AVAIL<\/code> w wyniku polecenia <code>ceph df<\/code> dla ka\u017cdej puli osobno) opiera si\u0119 na obj\u0119to\u015bci dost\u0119pnych danych w OSD. Je\u015bli chocia\u017c w jednym OSD b\u0119dzie za ma\u0142o miejsca, to wi\u0119cej danych nie da si\u0119 zapisa\u0107, dop\u00f3ki dane nie zostan\u0105 w\u0142a\u015bciwie rozdzielone pomi\u0119dzy wszystkie OSD.<\/p>\n<p>Warto zaznaczy\u0107, \u017ce te problemy <b>w wi\u0119kszym stopniu s\u0105 rozwi\u0105zywane na etapie konfiguracji klastra Ceph<\/b>. Jednym z narz\u0119dzi, z kt\u00f3rego mo\u017cna skorzysta\u0107, jest <noindex><a rel=\"nofollow\" href=\"http:\/\/blog.easter-eggs.org\/index.php\/post\/2013\/09\/27\/%5BLibvirt%5D-Migrating-from-on-disk-raw-images-to-RBD-storage\">Ceph PGCalc<\/a><\/noindex>. Dzi\u0119ki niemu mo\u017cna w spos\u00f3b wizualny obliczy\u0107 potrzebn\u0105 liczb\u0119 PG. Niemniej jednak mo\u017cna z niego skorzysta\u0107 r\u00f3wnie\u017c w sytuacji, gdy klaster Ceph <i>ju\u017c<\/i> jest nieprawid\u0142owo skonfigurowany. Nale\u017cy zaznaczy\u0107, \u017ce w ramach prac naprawczych prawdopodobnie b\u0119dzie trzeba zmniejszy\u0107 liczb\u0119 PG, a ta mo\u017cliwo\u015b\u0107 nie by\u0142a dost\u0119pna w starszych wersjach Ceph (pojawi\u0142a si\u0119 dopiero w wersji <noindex><a rel=\"nofollow\" href=\"https:\/\/ceph.com\/rados\/new-in-nautilus-pg-merging-and-autotuning\/\">Nautilus<\/a><\/noindex>).<\/p>\n<p>Wyobra\u017amy sobie wi\u0119c nast\u0119puj\u0105c\u0105 sytuacj\u0119: klaster ma status <code>HEALTH_WARN<\/code> z powodu tego, \u017ce w jednym z OSD ko\u0144czy si\u0119 miejsce. O tym \u015bwiadczy\u0107 b\u0119dzie b\u0142\u0105d <code>HEALTH_WARN: 1 near full osd<\/code>. Poni\u017cej przedstawiono algorytm wyj\u015bcia z takiej sytuacji.<\/p>\n<p>Na pocz\u0105tku nale\u017cy rozdzieli\u0107 istniej\u0105ce dane pomi\u0119dzy pozosta\u0142e OSD. Tak\u0105 operacj\u0119 ju\u017c wykonywali\u015bmy w pierwszym przypadku, gdy 'osuszali\u015bmy' w\u0119ze\u0142 \u2014 z t\u0105 r\u00f3\u017cnic\u0105, \u017ce teraz b\u0119dziemy musieli nieznacznie zmniejszy\u0107 <code>reweight<\/code>. Na przyk\u0142ad do 0.95:<\/p>\n<pre><code class=\"bash\">ceph osd reweight osd.${ID} 0.95<\/code><\/pre>\n<p>\nW ten spos\u00f3b zwalnia si\u0119 przestrze\u0144 dyskowa w OSD i naprawia b\u0142\u0105d w ceph health. Jednak, jak ju\u017c wspomniano, problem ten wyst\u0119puje g\u0142\u00f3wnie z powodu nieprawid\u0142owej konfiguracji Ceph na pocz\u0105tkowych etapach: bardzo wa\u017cne jest, aby przeprowadzi\u0107 rekonfiguracj\u0119, aby nie pojawi\u0142 si\u0119 w przysz\u0142o\u015bci.<\/p>\n<p>W naszym konkretnym przypadku wszystko sprowadza\u0142o si\u0119 do:<\/p>\n<ul>\n<li> zbyt wysokiej warto\u015bci <code>replication_count<\/code> w jednym z pul,<\/li>\n<li> zbyt du\u017cej liczby PG w jednym puli i zbyt ma\u0142ej \u2014 w drugim. <\/li>\n<\/ul>\n<p>\nSkorzystamy z ju\u017c wspomnianego kalkulatora. Pokazuje on wyra\u017anie, co nale\u017cy wprowadzi\u0107 i w zasadzie nie ma w tym nic skomplikowanego. Po ustawieniu wymaganych parametr\u00f3w otrzymujemy nast\u0119puj\u0105ce zalecenia:<\/p>\n<p><i><b>Uwaga<\/b>: je\u015bli konfigurowa\u0142e\u015b klaster Ceph od podstaw, kolejn\u0105 przydatn\u0105 funkcj\u0105 kalkulatora b\u0119dzie generowanie polece\u0144, kt\u00f3re stworz\u0105 puli od zera z parametrami podanymi w tabeli.<\/i><\/p>\n<p>Pomaga si\u0119 zorientowa\u0107 ostatnia kolumna \u2014 <i>Suggested PG Count<\/i>. W naszym przypadku przydatna jest tak\u017ce druga, w kt\u00f3rej okre\u015blony jest parametr replikacji, poniewa\u017c zdecydowali\u015bmy si\u0119 zmieni\u0107 i mno\u017cnik replikacji.<\/p>\n<p>Zatem najpierw b\u0119dziemy musieli zmieni\u0107 parametry replikacji \u2014 jest to co\u015b, co powinno by\u0107 robione w pierwszej kolejno\u015bci, poniewa\u017c zmniejszaj\u0105c mno\u017cnik, zwolnimy przestrze\u0144 dyskow\u0105. W trakcie wykonywania polecenia mo\u017cna zauwa\u017cy\u0107, \u017ce warto\u015b\u0107 dost\u0119pnej przestrzeni dyskowej b\u0119dzie si\u0119 zwi\u0119ksza\u0107:<\/p>\n<pre><code class=\"bash\">ceph osd pool $pool_name set $replication_size<\/code><\/pre>\n<p>\nA po jego zako\u0144czeniu \u2014 zmieniamy warto\u015bci parametr\u00f3w <code>pg_num<\/code> i <code>pgp_num<\/code> w nast\u0119puj\u0105cy spos\u00f3b:<\/p>\n<pre><code class=\"bash\">ceph osd pool set $pool_name pg_num $pg_number\nceph osd pool set $pool_name pgp_num $pg_number<\/code><\/pre>\n<p>\n<b>Wa\u017cne<\/b>: musimy kolejno w ka\u017cdym puli zmieni\u0107 liczb\u0119 PG i nie zmienia\u0107 warto\u015bci w innych pulach, dop\u00f3ki nie znikn\u0105 ostrze\u017cenia <i>\u00abDegraded data redundancy\u00bb<\/i> i <i>\u00abn-number of pgs degraded\u00bb<\/i>.<\/p>\n<p>Mo\u017cna r\u00f3wnie\u017c sprawdzi\u0107, \u017ce wszystko przebieg\u0142o pomy\u015blnie, analizuj\u0105c wyniki polece\u0144 <code>ceph health detail<\/code> i <code>ceph -s<\/code>.<\/p>\n<h2>Przypadek nr 3. Migracja maszyny wirtualnej z LVM do Ceph RBD<\/h2>\n<p>\nW sytuacji, gdy w projekcie wykorzystuje si\u0119 maszyny wirtualne zainstalowane na wynaj\u0119tych serwerach bare-metal, cz\u0119sto pojawia si\u0119 pytanie o niezawodne magazynowanie. Dobrze by te\u017c by\u0142o, aby miejsca w tym magazynie by\u0142o wystarczaj\u0105co du\u017co\u2026 Inna powszechna sytuacja: jest maszyna wirtualna z lokalnym magazynem na serwerze i trzeba zwi\u0119kszy\u0107 dysk, ale nie ma gdzie, poniewa\u017c na serwerze nie pozosta\u0142o wolnego miejsca na dysku.<\/p>\n<p>Problem mo\u017cna rozwi\u0105za\u0107 na r\u00f3\u017cne sposoby \u2013 na przyk\u0142ad, migruj\u0105c na inny serwer (je\u015bli taki istnieje) lub dodaj\u0105c nowe dyski do serwera. Ale nie zawsze da si\u0119 to zrobi\u0107, dlatego migracja z LVM do Ceph mo\u017ce by\u0107 doskona\u0142ym rozwi\u0105zaniem tego problemu. Wybieraj\u0105c t\u0119 opcj\u0119, upraszczamy tak\u017ce dalszy proces migracji mi\u0119dzy serwerami, poniewa\u017c nie trzeba b\u0119dzie przenosi\u0107 lokalnego magazynu z jednego hypervisora na inny. Jedyn\u0105 przeszkod\u0105 jest to, \u017ce trzeba b\u0119dzie na chwil\u0119 zatrzyma\u0107 VM podczas prac.<\/p>\n<p>Jako przytaczany poni\u017cej przepis wykorzystano <noindex><a rel=\"nofollow\" href=\"http:\/\/blog.easter-eggs.org\/index.php\/post\/2013\/09\/27\/%5BLibvirt%5D-Migrating-from-on-disk-raw-images-to-RBD-storage\">artyku\u0142 z tego bloga<\/a><\/noindex>, kt\u00f3rego instrukcje zosta\u0142y przetestowane w praktyce. Nawiasem m\u00f3wi\u0105c, <b>opisana jest tam r\u00f3wnie\u017c metoda migracji bez przestoj\u00f3w<\/b>, jednak w naszym przypadku nie by\u0142a potrzebna, wi\u0119c jej nie sprawdzali\u015bmy. Je\u015bli jednak jest to krytyczne dla Twojego projektu \u2013 z przyjemno\u015bci\u0105 poznamy wyniki w komentarzach.<\/p>\n<p>Przyst\u0105pmy do cz\u0119\u015bci praktycznej. W przyk\u0142adzie wykorzystujemy virsh i, odpowiednio, libvirt. Na pocz\u0105tek upewnij si\u0119, \u017ce pula Ceph'a, do kt\u00f3rej b\u0119d\u0105 migrowane dane, jest pod\u0142\u0105czona do libvirt:<\/p>\n<pre><code class=\"bash\">virsh pool-dumpxml $ceph_pool<\/code><\/pre>\n<p>\nW opisie puli powinny znajdowa\u0107 si\u0119 dane po\u0142\u0105czenia z Ceph wraz z danymi do autoryzacji. <\/p>\n<p>Nast\u0119pny etap polega na tym, \u017ce obraz LVM konwertowany jest na Ceph RBD. Czas realizacji zale\u017cy przede wszystkim od rozmiaru obrazu:<\/p>\n<pre><code class=\"bash\">qemu-img convert -p -O rbd \/dev\/main\/$vm_image_name rbd:$ceph_pool\/$vm_image_name<\/code><\/pre>\n<p>\nPo konwersji pozostanie obraz LVM, kt\u00f3ry b\u0119dzie przydatny w przypadku, gdy migracja VM do RBD si\u0119 nie powiedzie i trzeba b\u0119dzie cofn\u0105\u0107 zmiany. R\u00f3wnie\u017c \u2013 aby mie\u0107 mo\u017cliwo\u015b\u0107 szybkiego cofni\u0119cia zmian \u2013 wykonamy kopi\u0119 zapasow\u0105 pliku konfiguracyjnego maszyny wirtualnej:<\/p>\n<pre><code class=\"bash\">virsh dumpxml $vm_name &gt; $vm_name.xml\ncp $vm_name.xml $vm_name_backup.xml<\/code><\/pre>\n<p>\n\u2026 i edytujemy orygina\u0142 (<code>vm_name.xml<\/code>). Znajd\u017a blok z opisem dysku (zaczyna si\u0119 od wiersza <code>&lt;disk type='file' device='disk'&gt;<\/code> i ko\u0144czy na <code>&lt;\/disk&gt;<\/code>) i przekszta\u0142cimy go w nast\u0119puj\u0105cy spos\u00f3b:<\/p>\n<pre><code class=\"xml\"><address \/><\/code><\/pre>\n<p>\nPrzeanalizujmy kilka szczeg\u00f3\u0142\u00f3w:<\/p>\n<ol>\n<li> W protokole <code>source<\/code> wskazujemy adres do pami\u0119ci w Ceph RBD (jest to adres z okre\u015bleniem nazwy puli Ceph i obrazu RBD, kt\u00f3ry by\u0142 definiowany w pierwszym etapie).<\/li>\n<li> W bloku <code>secret<\/code> wskazuje typ <code>ceph<\/code>, a tak\u017ce UUID sekretu do po\u0142\u0105czenia z nim. Jego uuid mo\u017cna znale\u017a\u0107 za pomoc\u0105 polecenia <code>virsh secret-list<\/code>.<\/li>\n<li> W bloku <code>Najciekawsza linia \u2014 ostatnia.<\/code> wskazuj\u0105 adresy monitor\u00f3w Ceph.<\/li>\n<\/ol>\n<p>\nPo edycji pliku konfiguracyjnego i zako\u0144czeniu konwersji LVM do RBD, mo\u017cemy zastosowa\u0107 zmieniony plik konfiguracyjny i uruchomi\u0107 maszyn\u0119 wirtualn\u0105:<\/p>\n<pre><code class=\"bash\">virsh define $vm_name.xml\nvirsh start $vm_name<\/code><\/pre>\n<p>\nTeraz warto sprawdzi\u0107, czy maszyna wirtualna uruchomi\u0142a si\u0119 poprawnie: mo\u017cna to zweryfikowa\u0107 na przyk\u0142ad, \u0142\u0105cz\u0105c si\u0119 z ni\u0105 przez SSH lub przez <code>virsh<\/code>. <\/p>\n<p>Je\u017celi maszyna wirtualna dzia\u0142a poprawnie i nie napotka\u0142e\u015b innych problem\u00f3w, mo\u017cesz usun\u0105\u0107 obraz LVM, kt\u00f3ry nie jest ju\u017c u\u017cywany:<\/p>\n<pre><code class=\"bash\">lvremove main\/$vm_image_name<\/code><\/pre>\n<p><\/p>\n<h2>Podsumowanie<\/h2>\n<p>\nZ wszystkimi opisanymi przypadkami mieli\u015bmy do czynienia w praktyce \u2014 mamy nadziej\u0119, \u017ce instrukcje pomog\u0105 r\u00f3wnie\u017c innym administratorom rozwi\u0105za\u0107 podobne problemy. Je\u015bli masz uwagi lub inne podobne historie z do\u015bwiadcze\u0144 w pracy z Ceph \u2014 ch\u0119tnie je zobaczymy w komentarzach!<\/p>\n<h2>P.S.<\/h2>\n<p>\nPrzeczytaj tak\u017ce na naszym blogu:<\/p>\n<ul>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/477680\/\">Nasze r\u0119ce nie dla nudy: przywracanie klastra Rook w K8s<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/451818\/\">Rook czy nie Rook \u2014 oto jest pytanie<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/348044\/\">Rook \u2014 \u201esamozarz\u0105dzaj\u0105ca si\u0119\u201d przestrze\u0144 dyskowa dla Kubernetes<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/329666\/\">Tworzymy sta\u0142e przechowywanie z provisioningiem w Kubernetes na bazie Ceph<\/a><\/noindex>\u00bb.<\/li>\n<\/ul>\n<p>\u0179r\u00f3d\u0142o: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/495870\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f Ceph \u043a\u0430\u043a \u0441\u0435\u0442\u0435\u0432\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u043f\u043e \u043d\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u0442\u044c\u0441\u044f \u0441 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u043c\u0438 \u0437\u0430\u0434\u0430\u0447\u0430\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0432\u0437\u0433\u043b\u044f\u0434\u0430 \u043d\u0435 \u043a\u0430\u0436\u0443\u0442\u0441\u044f \u043f\u0440\u043e\u0441\u0442\u044b\u043c\u0438 \u0438\u043b\u0438 \u0442\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u043d\u044b\u043c\u0438. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440: \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437 \u0441\u0442\u0430\u0440\u043e\u0433\u043e Ceph \u0432 \u043d\u043e\u0432\u044b\u0439 \u0441 \u0447\u0430\u0441\u0442\u0438\u0447\u043d\u044b\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0445 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432 \u0432 \u043d\u043e\u0432\u043e\u043c \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435; \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0434\u0438\u0441\u043a\u043e\u0432\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430 \u0432 Ceph. \u0420\u0430\u0437\u0431\u0438\u0440\u0430\u044f\u0441\u044c \u0441 \u0442\u0430\u043a\u0438\u043c\u0438 \u0437\u0430\u0434\u0430\u0447\u0430\u043c\u0438, \u043c\u044b \u0441\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u0435\u043c\u0441\u044f \u0441 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":77267,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-77266","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f Ceph \u043a\u0430\u043a \u0441\u0435\u0442\u0435\u0432\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u0432.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/tips-tricks-v-rabote-s-ceph-v-nagruzhennyh-proektah\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"pl_PL\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47Tips &amp; tricks \u0432 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 Ceph \u0432 \u043d\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f Ceph \u043a\u0430\u043a \u0441\u0435\u0442\u0435\u0432\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u0432.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/tips-tricks-v-rabote-s-ceph-v-nagruzhennyh-proektah\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-04-09T11:42:08+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-04-09T11:42:08+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Porady i triki w pracy z Ceph w obci\u0105\u017conych projektach | ProHoster","description":"U\u017cywaj\u0105c Ceph jako sieciowej pami\u0119ci w.","canonical_url":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/tips-tricks-v-rabote-s-ceph-v-nagruzhennyh-proektah","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"pl_PL","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47Tips &amp; tricks \u0432 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 Ceph \u0432 \u043d\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445 | ProHoster","og:description":"\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f Ceph \u043a\u0430\u043a \u0441\u0435\u0442\u0435\u0432\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u0432.","og:url":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/tips-tricks-v-rabote-s-ceph-v-nagruzhennyh-proektah","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-04-09T11:42:08+00:00","article:modified_time":"2020-04-09T11:42:08+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"77266","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 17:20:51","updated":"2022-10-02 10:23:09","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts\/77266","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/comments?post=77266"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts\/77266\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media\/77267"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media?parent=77266"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/categories?post=77266"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/tags?post=77266"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}