{"id":92570,"date":"2020-08-28T19:42:21","date_gmt":"2020-08-28T17:42:21","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/modelirovanie-otkazoustojchivyh-klasterov-na-baze-postgresql-i-pacemaker"},"modified":"2020-08-28T19:42:21","modified_gmt":"2020-08-28T17:42:21","slug":"modelirovanie-otkazoustojchivyh-klasterov-na-baze-postgresql-i-pacemaker","status":"publish","type":"post","link":"https:\/\/prohoster.info\/sl\/blog\/administrirovanie\/modelirovanie-otkazoustojchivyh-klasterov-na-baze-postgresql-i-pacemaker","title":{"rendered":"Modeliranje visoko dostupnih klastera na temelju PostgreSQL i Pacemaker","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<h1 id=\"vvedenie\">Uvod<\/h1>\n<p><\/p>\n<p>Nekaj \u010dasa nazaj sem bil postavljen pred nalogo, da razvijem odpornost klastera za <noindex><a rel=\"nofollow\" href=\"https:\/\/www.postgresql.org\">PostgreSQL<\/a><\/noindex>, ki deluje v ve\u010d podatkovnih centrih, povezanih s kabelskim sistemom v okviru enega mesta, in sposoben prenesti okvaro (na primer, izpad elektri\u010dne energije) enega podatkovnega centra. Kot programsko opremo, ki odgovarja za odpornost, sem izbral <noindex><a rel=\"nofollow\" href=\"https:\/\/clusterlabs.org\">Pacemaker<\/a><\/noindex>, ker gre za uradno re\u0161itev podjetja RedHat za ustvarjanje odpornosti klasterjev. Odlikuje ga dobra podpora podjetja RedHat in to, da je re\u0161itev univerzalna (modularna). S tem se lahko zagotovi odpornost ne samo PostgreSQL, temve\u010d tudi drugih storitev, bodisi z uporabo standardnih modulov bodisi z ustvarjanjem le-teh za specifi\u010dne potrebe.<\/p>\n<p><\/p>\n<p>Na to re\u0161itev se je postavilo upravi\u010deno vpra\u0161anje: kako odporen bo odpornosti klaster? Da bi to raziskal, sem razvil testno okolje, ki simulira razli\u010dne okvare na vozli\u0161\u010dih klasterja, pri\u010dakuje obnovitev funkcionalnosti, obnavlja okvarjeno vozli\u0161\u010de in nadaljuje testiranje v ciklu. Sprva se je ta projekt imenoval hapgsql, vendar me je s\u010dasoma ime, ki ima le eno samoglasnik, za\u010delo dolgo\u010dasiti. Zato sem odpornim podatkovnim bazam (in plavajo\u010demu IP, ki jih ozna\u010duje) za\u010del re\u010di <strong>krogan<\/strong> (zna\u010dka iz ra\u010dunalni\u0161ke igre, pri kateri so vsi pomembni organi podvojeni), vozli\u0161\u010da, klasterji in sam projekt pa <strong>tuchanka<\/strong> (planet, kjer \u017eivijo krogan).<\/p>\n<p><\/p>\n<p>Sedaj je vodstvo dovolilo <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/domclick\/tuchanka\">odpreti projekt za open source skupnost pod MIT licenco<\/a><\/noindex>. README bo kmalu preveden v angle\u0161\u010dino (ker se pri\u010dakuje, da bodo glavni uporabniki razvijalci Pacemaker in PostgreSQL), prav tako pa sem stari ruski razli\u010dico README odlo\u010dil predstaviti (delno) v obliki tega \u010dlanka.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Modeliranje visoko dostupnih klastera na temelju PostgreSQL i Pacemaker\" src=\"\/wp-content\/uploads\/2020\/08\/7ebb04b3e56337060e981da319192a28.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Klasterji se postavljajo na virtualke <noindex><a rel=\"nofollow\" href=\"https:\/\/www.virtualbox.org\">VirtualBox<\/a><\/noindex>. Skupaj bo postavljenih 12 virtualk (skupaj 36GiB), ki bodo oblikovale 4 odpornosti klastre (razli\u010dne mo\u017enosti). Prva dva klasterja sta sestavljena iz dveh stre\u017enikov PostgreSQL, ki sta name\u0161\u010dena v razli\u010dnih podatkovnih centrih, ter skupnega stre\u017enika <em>witness<\/em> c <strong>quorum device<\/strong> (name\u0161\u010denega na poceni virtualki v tretjem podatkovnem centru), ki razre\u0161uje negotovost <strong>50%\/50%<\/strong>, tako da da svoj glas eni od strani. Tretji klaster deluje v treh podatkovnih centrih: en glavni, dva pomo\u010dnika, brez <strong>quorum device<\/strong>. \u010cetrti klaster se sastoji od \u010detiri PostgreSQL servera, po dva u svakom data centru: jedan master, ostali replikas, i tako\u0111e koristi <em>witness<\/em> c <strong>quorum device<\/strong>. \u010cetvrti podnosi otkazivanje dva servera ili jednog data centra. Ovo re\u0161enje mo\u017ee biti, ako je potrebno, pro\u0161ireno na ve\u0107i broj replikas.<\/p>\n<p><\/p>\n<p>Servis ta\u010dnog vremena <noindex><a rel=\"nofollow\" href=\"https:\/\/www.ntp.org\">ntpd<\/a><\/noindex> tako\u0111e je rekonfiguran za otpornost na otkazivanja, ali tamo se koristi metoda <code>ntpd<\/code> (<em>orphan mode<\/em>). Glavni server <em>witness<\/em> ima ulogu centralnog NTP servera, deljaju\u0107i svoje vreme svim klasterima, na taj na\u010din sinhronizuju\u0107i sve servere me\u0111usobno. Ako <em>witness<\/em> do\u0111e do kvara ili bude izolovan, tada svoje vreme po\u010dinje deliti jedan od servera klastera (unutar klastera). Pomo\u0107ni ke\u0161iraju\u0107i <strong>HTTP proxy<\/strong> tako\u0111e je podignut na <em>witness<\/em>, uz njegovu pomo\u0107 ostale virtuelne ma\u0161ine imaju pristup Yum repozitorijumima. U stvarnosti, takvi servisi kao \u0161to su ta\u010dno vreme i proxy, zasigurno \u0107e biti sme\u0161teni na dediciranim serverima, dok su u ovom testu sme\u0161teni na <em>witness<\/em> samo radi ekonomije broja virtuelnih ma\u0161ina i prostora.<\/p>\n<p><\/p>\n<h1 id=\"versii\">Razli\u010dice<\/h1>\n<p><\/p>\n<p>v0. Radi sa CentOS 7 i PostgreSQL 11 na VirtualBox 6.1.<\/p>\n<p><\/p>\n<h1 id=\"struktura-klasterov\">Struktura klastera<\/h1>\n<p><\/p>\n<p>Svi klasteri su namenjeni za sme\u0161taj u vi\u0161e data centara, povezani su u jednu ravnu mre\u017eu i moraju izdr\u017eati otkazivanje ili mre\u017enu izolaciju jednog data centra. Zato <strong>ni mogo\u010de<\/strong> koristiti za za\u0161titu od <strong>split-brain<\/strong> standardnu tehnologiju Pacemaker, koja se naziva <em>STONITH<\/em> (Shoot The Other Node In The Head) ili <em>fencing<\/em>. Njena su\u0161tina: ako \u010dvorovi u klasteru po\u010dnu da sumnjaju da se s nekim \u010dvorom de\u0161ava ne\u0161to sumnjivo, on ne odgovara ili se pona\u0161a neispravno, tada ga prisilno isklju\u010duju preko \u201espoljnih\u201c ure\u0111aja, kao \u0161to su upravlja\u010dka kartica IPMI ili UPS. Ali to \u0107e funkcionisati samo u slu\u010dajevima kada pri jednostavnom otkazu servera IPMI ili UPS nastave da rade. Ovde se planira za\u0161tita od mnogo katastrofalnijeg otkaza, kada otkazuje (na primer, nestaje struje) \u010ditav data centar. A pri takvom otkazu svi <em>stonith<\/em>-ure\u0111aji (IPMI, UPS itd.) tako\u0111e ne\u0107e raditi.<\/p>\n<p><\/p>\n<p>Umesto toga, na osnovu sistema je ideja kvoruma. Svi \u010dvorovi imaju glas, i mogu raditi samo oni koji vide vi\u0161e od polovine svih \u010dvorova. Ova koli\u010dina \u201epolovina+1\u201c naziva se <strong>kvorum<\/strong>. Ako se kvorum ne dostigne, \u010dvor zaklju\u010duje da je u mre\u017enoj izolaciji i mora isklju\u010diti svoje resurse, tj. ovo je neka vrsta <strong>za\u0161tite od split-brain<\/strong>. \u010ce programska oprema, ki je odgovorna za tak\u0161no obna\u0161anje, ne deluje, mora delovati watchdog, na primer na osnovi IPMI.<\/p>\n<p><\/p>\n<p>\u010ce je \u0161tevilo vozli\u0161\u010d sodo (klaster v dveh podatkovnih centrih), lahko nastane tako imenovana negotovost. <strong>50%\/50%<\/strong> (<em>fifty-fifty<\/em>), ko omre\u017ena izolacija razdeli klaster natanko na pol. Zato se za sodo \u0161tevilo vozli\u0161\u010d doda <strong>quorum device<\/strong> \u2014 nezahteven demon, ki ga je mogo\u010de zagnati na najcenej\u0161i virtualki v tretjem podatkovnem centru. Dodeli svoj glas enemu od segmentov (ki ga vidi) in tako razre\u0161i negotovost 50%\/50%. Stre\u017enik, na katerem bo zagnana naprava quorum, sem poimenoval <em>witness<\/em> (terminologija iz repmgr, ki mi je bila v\u0161e\u010d).<\/p>\n<p><\/p>\n<p>Viri se lahko premikajo sem in tja, na primer s pokvarjenih stre\u017enikov na delujo\u010de, ali na ukaz sistemskih administratorjev. Da bi stranke vedele, kje se nahajajo potrebni viri (kam se povezati?), se uporabljajo <em>plavajo\u010di IP<\/em> (<strong>float IP<\/strong>). To so IP naslovi, ki jih Pacemaker lahko premika med vozli\u0161\u010di (vsa se nahajajo v ravni mre\u017ei). Vsak izmed njih simbolizira vir (storitev) in bo tam, kamor se je treba povezati, da dobimo dostop do te storitve (v na\u0161em primeru DB).<\/p>\n<p><\/p>\n<h2 id=\"tuchanka1-shema-s-uplotneniem\">Tuchanka1 (shema z zgostitvijo)<\/h2>\n<p><\/p>\n<h3 id=\"struktura\">Struktura<\/h3>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Modeliranje visoko dostupnih klastera na temelju PostgreSQL i Pacemaker\" src=\"\/wp-content\/uploads\/2020\/08\/5651238e36f4af1c32f117191cf30261.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ideja je bila, da imamo veliko majhnih podatkovnih baz z nizko obremenitvijo, za katere je nesmotrno vzdr\u017eevati namenski stre\u017enik slave v na\u010dinu hot standby za transakcije samo za branje (ni potrebe po takem zapravljanju virov).<\/p>\n<p><\/p>\n<p>V vsakem podatkovnem centru je en stre\u017enik. Na vsakem stre\u017eniku sta dva instanca PostgreSQL (v terminologiji PostgreSQL se imenujejo klasterji, vendar jih bom za bolj\u0161o razumljivost imenoval instanca, medtem ko bom klasterje imenoval le klasterji Pacemaker). Ena instanca deluje v na\u010dinu master in samo ta nudi storitve (le nanjo se navezuje float IP). Druga instanca deluje kot slave za drugi podatkovni center in bo nudila storitve le, \u010de njen master odpove. Ker bo ve\u010dino \u010dasa nudila storitve (izvajala poizvedbe) le ena instanca od dveh (master), bodo vsi viri stre\u017enika optimizirani za master (dodeljena bo pomnilnik za predpomnilnik shared_buffers itd.), vendar tako, da bo tudi drugi instanci dovolj virov (\u010deprav za suboptimalno delovanje prek predpomnilnika datote\u010dnega sistema) za primer odpovedi enega izmed podatkovnih centrov. Slave ne nudi storitev (ne izvaja read only poizvedb) med normalnim delovanjem klasterja, da ne bi prihajalo do konkurence za vire z masterjem na istem stre\u017eniku.<\/p>\n<p><\/p>\n<p>V primeru dveh vozli\u0161\u010d je odpornost na napake mo\u017ena samo pri asinhroni replikaciji, saj bi pri sinhroni replikaciji odpoved slava povzro\u010dila ustavitev masterja.<\/p>\n<p><\/p>\n<h3 id=\"otkaz-witness\">Odpoved witness<\/h3>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Modeliranje visoko dostupnih klastera na temelju PostgreSQL i Pacemaker\" src=\"\/wp-content\/uploads\/2020\/08\/3c046d13c0c6839de297827ca3a8928b.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Odpoved witness (<em>quorum device<\/em>) bom obravnaval le za klaster Tuchanka1, ostali bodo imeli enako zgodbo. Pri odpovedi witness se v strukturi klasterja ni\u010d ne spremeni, vse bo \u0161e naprej delovalo tako, kot je delovalo. Vendar bo kvorum postal 2 od 3, zato bo vsaka nadaljnja odpoved usodna za klaster. Kljub temu ga bo treba nujno popraviti.<\/p>\n<p><\/p>\n<h3 id=\"otkaz-tuchanka1\">Odpoved Tuchanka1<\/h3>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Modeliranje visoko dostupnih klastera na temelju PostgreSQL i Pacemaker\" src=\"\/wp-content\/uploads\/2020\/08\/112957293bd682428115e4e93c9f1a96.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Odpoved enega izmed podatkovnih centrov za Tuchanka1. V tem primeru <em>witness<\/em> da svoj glas prenese drugemu vozli\u0161\u010du v drugem podatkovnem centru. Tam nekdanji slave postane master, tako da na enem stre\u017eniku delujeta oba masterja in nanju se usmerjata oba njihova float IP.<\/p>\n<p><\/p>\n<h2 id=\"tuchanka2-klassicheskaya\">Tuchanka2 (klasi\u010dna)<\/h2>\n<p><\/p>\n<h3 id=\"struktura-1\">Struktura<\/h3>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Modeliranje visoko dostupnih klastera na temelju PostgreSQL i Pacemaker\" src=\"\/wp-content\/uploads\/2020\/08\/c3af368f823fbd580b4ebb14cc87c750.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Klasi\u010dna shema iz dveh vozli\u0161\u010d. Na enem deluje master, na drugem slave. Oba lahko izvajata poizvedbe (slave le read only), zato se oba usmerjata na float IP: krogan2 \u2014 na master, krogan2s1 \u2014 na slave. Odpornost na napake bo prisotna tako pri masterju kot pri slave.<\/p>\n<p><\/p>\n<p>V primeru dveh vozli\u0161\u010d je odpornost na napake mo\u017ena le pri asinhroni replikaciji, ker bi pri sinhroni odpoved slava povzro\u010dila ustavitev masterja.<\/p>\n<p><\/p>\n<h3 id=\"otkaz-tuchanka2\">Odpoved Tuchanka2<\/h3>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Modeliranje visoko dostupnih klastera na temelju PostgreSQL i Pacemaker\" src=\"\/wp-content\/uploads\/2020\/08\/79bfcaf88c96d8ee16767dcef53741c1.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Pri odpovedi enega izmed podatkovnih centrov <em>witness<\/em> glasuje za drugo. Na jedinom funkcionalnom data centru bi\u0107e podignut master, a na njega \u0107e ukazivati oba float IP: masterski i robovski. Naravno, instanca mora biti pode\u0161ena na na\u010din da ima dovoljno resursa (limite za vezu itd.) da istovremeno prihvati sve konekcije i zahteve od masterskog i robovskog float IP. To jest, u normalnom radu, mora imati dovoljno slobodnog prostora po limitima.<\/p>\n<p><\/p>\n<h2 id=\"tuchanka4-mnogo-rabov\">Tuchanka4 (mnogo robova)<\/h2>\n<p><\/p>\n<h3 id=\"struktura-2\">Struktura<\/h3>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Modeliranje visoko dostupnih klastera na temelju PostgreSQL i Pacemaker\" src=\"\/wp-content\/uploads\/2020\/08\/17819fd97847f0573d429e422d799bc1.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ve\u0107 je druga krajnost. Postoje baze podataka na koje dolazi veoma mnogo read-only zahteva (tipi\u010dan slu\u010daj visoko optere\u0107ene web stranice). Tuchanka4 je situacija u kojoj mo\u017ee biti tri ili vi\u0161e robova za obradu takvih zahteva, ali ne previ\u0161e. U slu\u010daju veoma velikog broja robova, bi\u0107e potrebno osmisliti hijerarhijski sistem replikacije. U minimalnom slu\u010daju (na slici), u svakom od dva data centra nalaze se po dva servera, na svakom od kojih se nalazi po instanca PostgreSQL.<\/p>\n<p><\/p>\n<p>Jo\u0161 jedna karakteristika ovog re\u017eima je ta \u0161to se ovde ve\u0107 mo\u017ee organizovati jedna sinhrona replikacija. Ona je pode\u0161ena tako da replikacija ide, koliko je to mogu\u0107e, u drugi data centar, a ne na replikaciju u istom data centru gde je i master. Na master i na svakog robovskog ukazuje float IP. Po dobrom, izme\u0111u robova bi trebalo da se uradi balansiranje zahteva nekim <em>sql proxy<\/em>, na primer, na strani klijenta. Razli\u010ditim tipovima klijenata mo\u017ee biti potrebna razli\u010dita vrsta <em>sql proxy<\/em>, i samo developeri klijenata znaju ko kojoj vrsti treba. Ova funkcionalnost mo\u017ee biti realizovana kao spolja\u0161nji demon, tako i kao klijent biblioteka (connection pool), itd. Sve ovo izlazi iz okvira teme otpornog DB klastera (otpornost <em>SQL proxy<\/em> mo\u017ee se realizovati nezavisno, zajedno sa otpornosti klijenta).<\/p>\n<p><\/p>\n<h3 id=\"otkaz-tuchanka4\">Neuspeh Tuchanka4<\/h3>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Modeliranje visoko dostupnih klastera na temelju PostgreSQL i Pacemaker\" src=\"\/wp-content\/uploads\/2020\/08\/e005ae90ffd63abdb272012b94735618.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>U slu\u010daju neuspeha jednog data centra (tj. dva servera), witness glasuje za drugi. Kao rezultat, u drugom data centru rade dva servera: na jednom radi master, i na njega ukazuje masterski float IP (za primanje read-write zahteva); a na drugom serveru radi rob sa sinhronom replikacijom, i na njega ukazuje jedan od robovskih float IP (za read only zahteve).<\/p>\n<p><\/p>\n<p>Prvo \u0161to treba napomenuti: radni robovski float IP ne\u0107e biti svi, ve\u0107 samo jedan. I za pravilno funkcionisanje sa njim, bi\u0107e potrebno da <em>sql proxy<\/em> \u043f\u0440\u0435\u043d\u043e\u0441\u0438\u043b\u0430 \u0432\u0441\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u043d\u0430 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u043e\u0441\u0442\u0430\u0432\u0448\u0438\u0439\u0441\u044f float IP; \u0430 \u0435\u0441\u043b\u0438 <em>sql proxy<\/em> \u043d\u0435\u0442, \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0438\u0442\u044c \u0432\u0441\u0435 float IP \u0440\u0430\u0431\u043e\u0432 \u0447\u0435\u0440\u0435\u0437 \u0437\u0430\u043f\u044f\u0442\u0443\u044e \u0432 URL \u0434\u043b\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f. \u0412 \u0442\u0430\u043a\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0441 <em>libpq<\/em> \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0431\u0443\u0434\u0435\u0442 \u043a \u043f\u0435\u0440\u0432\u043e\u043c\u0443 \u0440\u0430\u0431\u043e\u0447\u0435\u043c\u0443 IP, \u0442\u0430\u043a \u0441\u0434\u0435\u043b\u0430\u043d\u043e \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0432 \u0434\u0440\u0443\u0433\u0438\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430\u0445, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, JDBC, \u044d\u0442\u043e \u043d\u0435 \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u0438 \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f <em>sql proxy<\/em>. \u042d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u043d\u043e \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u0443 float IP \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0432 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d \u0437\u0430\u043f\u0440\u0435\u0442 \u043d\u0430 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0435 \u043f\u043e\u0434\u043d\u044f\u0442\u0438\u0435 \u043d\u0430 \u043e\u0434\u043d\u043e\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u0435, \u0447\u0442\u043e\u0431\u044b \u043e\u043d\u0438 \u0440\u0430\u0432\u043d\u043e\u043c\u0435\u0440\u043d\u043e \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u043b\u0438\u0441\u044c \u043f\u043e \u0440\u0430\u0431\u0441\u043a\u0438\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u0430\u043c, \u0435\u0441\u043b\u0438 \u0438\u0445 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e.<\/p>\n<p><\/p>\n<p>\u0412\u0442\u043e\u0440\u043e\u0435: \u0434\u0430\u0436\u0435 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u0442\u043a\u0430\u0437\u0430 \u0434\u0430\u0442\u0430-\u0446\u0435\u043d\u0442\u0440\u0430 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c\u0441\u044f \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u0430\u044f \u0440\u0435\u043f\u043b\u0438\u043a\u0430\u0446\u0438\u044f. \u0418 \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u043f\u0440\u043e\u0438\u0437\u043e\u0439\u0434\u0435\u0442 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u044b\u0439 \u043e\u0442\u043a\u0430\u0437, \u0442\u043e \u0435\u0441\u0442\u044c \u0432 \u043e\u0441\u0442\u0430\u0432\u0448\u0435\u043c\u0441\u044f \u0434\u0430\u0442\u0430-\u0446\u0435\u043d\u0442\u0440\u0435 \u0432\u044b\u0439\u0434\u0435\u0442 \u0438\u0437 \u0441\u0442\u0440\u043e\u044f \u043e\u0434\u0438\u043d \u0438\u0437 \u0434\u0432\u0443\u0445 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432, \u043a\u043b\u0430\u0441\u0442\u0435\u0440 \u0445\u043e\u0442\u044c \u0438 \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u043d\u0435\u0442 \u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0443\u0441\u043b\u0443\u0433\u0438, \u043d\u043e \u0432\u0441\u0451 \u0436\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e\u0431\u043e \u0432\u0441\u0435\u0445 \u0437\u0430\u043a\u043e\u043c\u043c\u0438\u0447\u0435\u043d\u043d\u044b\u0445 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f\u0445, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u043d \u0434\u0430\u043b \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0435 \u043e \u043a\u043e\u043c\u043c\u0438\u0442\u0435 (\u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0442\u0435\u0440\u0438 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043f\u0440\u0438 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e\u043c \u043e\u0442\u043a\u0430\u0437\u0435).<\/p>\n<p><\/p>\n<h2 id=\"tuchanka3-3-data-centra\">Tuchanka3 (3 \u0434\u0430\u0442\u0430-\u0446\u0435\u043d\u0442\u0440\u0430)<\/h2>\n<p><\/p>\n<h3 id=\"struktura-3\">Struktura<\/h3>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Modeliranje visoko dostupnih klastera na temelju PostgreSQL i Pacemaker\" src=\"\/wp-content\/uploads\/2020\/08\/e11f9884b92fe20a63b5080ae8c7f82b.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u042d\u0442\u043e \u043a\u043b\u0430\u0441\u0442\u0435\u0440 \u0434\u043b\u044f \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438, \u043a\u043e\u0433\u0434\u0430 \u0435\u0441\u0442\u044c \u0442\u0440\u0438 \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0445 \u0434\u0430\u0442\u0430-\u0446\u0435\u043d\u0442\u0440\u0430, \u0432 \u043a\u0430\u0436\u0434\u043e\u043c \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0435\u0441\u0442\u044c \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0439 \u0441\u0435\u0440\u0432\u0435\u0440 \u0411\u0414. \u0412 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 <em>quorum device<\/em> \u043d\u0435 \u043d\u0443\u0436\u0435\u043d. \u0412 \u043e\u0434\u043d\u043e\u043c \u0434\u0430\u0442\u0430-\u0446\u0435\u043d\u0442\u0440\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043c\u0430\u0441\u0442\u0435\u0440, \u0432 \u0434\u0432\u0443\u0445 \u0434\u0440\u0443\u0433\u0438\u0445 \u2014 \u0440\u0430\u0431\u044b. \u0420\u0435\u043f\u043b\u0438\u043a\u0430\u0446\u0438\u044f \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u0430\u044f, \u0442\u0438\u043f\u0430 ANY (slave1, slave2), \u0442\u043e \u0435\u0441\u0442\u044c \u043a\u043b\u0438\u0435\u043d\u0442\u0443 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u044c \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0435 \u043a\u043e\u043c\u043c\u0438\u0442\u0430, \u043a\u043e\u0433\u0434\u0430 \u043b\u044e\u0431\u043e\u0439 \u0438\u0437 \u0440\u0430\u0431\u043e\u0432 \u043f\u0435\u0440\u0432\u044b\u043c \u043e\u0442\u0432\u0435\u0442\u0438\u0442, \u0447\u0442\u043e \u043e\u043d \u043f\u0440\u0438\u043d\u044f\u043b \u043a\u043e\u043c\u043c\u0438\u0442. \u041d\u0430 \u0440\u0435\u0441\u0443\u0440\u0441\u044b \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043e\u0434\u0438\u043d float IP \u0434\u043b\u044f \u043c\u0430\u0441\u0442\u0435\u0440\u0430 \u0438 \u0434\u0432\u0430 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0432. \u0412 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 Tuchanka4 \u0432\u0441\u0435 \u0442\u0440\u0438 float IP \u043e\u0442\u043a\u0430\u0437\u043e\u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u044b. \u0414\u043b\u044f \u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u043a\u0438 read-only SQL-\u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <em>sql proxy<\/em> (\u0441 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 \u043e\u0442\u043a\u0430\u0437\u043e\u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u043e\u0441\u0442\u044c\u044e), \u043b\u0438\u0431\u043e \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0435 \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432 \u043d\u0430\u0437\u043d\u0430\u0447\u0438\u0442\u044c \u043e\u0434\u0438\u043d \u0440\u0430\u0431\u0441\u043a\u0438\u0439 float IP, \u0430 \u0434\u0440\u0443\u0433\u043e\u0439 \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0435 \u2014 \u0432\u0442\u043e\u0440\u043e\u0439.<\/p>\n<p><\/p>\n<h3 id=\"otkaz-tuchanka3\">\u041e\u0442\u043a\u0430\u0437 Tuchanka3<\/h3>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Modeliranje visoko dostupnih klastera na temelju PostgreSQL i Pacemaker\" src=\"\/wp-content\/uploads\/2020\/08\/1e61158be3c23742384d3621e8f7896b.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u041f\u0440\u0438 \u043e\u0442\u043a\u0430\u0437\u0435 \u043e\u0434\u043d\u043e\u0433\u043e \u0438\u0437 \u0434\u0430\u0442\u0430-\u0446\u0435\u043d\u0442\u0440\u043e\u0432 \u043e\u0441\u0442\u0430\u044e\u0442\u0441\u044f \u0434\u0432\u0430. \u0412 \u043e\u0434\u043d\u043e\u043c \u043f\u043e\u0434\u043d\u044f\u0442 \u043c\u0430\u0441\u0442\u0435\u0440 \u0438 float IP \u043e\u0442 \u043c\u0430\u0441\u0442\u0435\u0440\u0430, \u0432\u043e \u0432\u0442\u043e\u0440\u043e\u043c \u2014 \u0440\u0430\u0431 \u0438 \u043e\u0431\u0430 \u0440\u0430\u0431\u0441\u043a\u0438\u0445 float IP (\u043d\u0430 \u0438\u043d\u0441\u0442\u0430\u043d\u0441\u0435 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0434\u0432\u0443\u043a\u0440\u0430\u0442\u043d\u044b\u0439 \u0437\u0430\u043f\u0430\u0441 \u043f\u043e \u0440\u0435\u0441\u0443\u0440\u0441\u0430\u043c, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0438\u043d\u044f\u0442\u044c \u0432\u0441\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0441 \u043e\u0431\u043e\u0438\u0445 \u0440\u0430\u0431\u0441\u043a\u0438\u0445 float IP). \u041c\u0435\u0436\u0434\u0443 \u043c\u0430\u0441\u0442\u0435\u0440\u043e\u043c \u0438 \u0440\u0430\u0431\u043e\u043c \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u0430\u044f \u0440\u0435\u043f\u043b\u0438\u043a\u0430\u0446\u0438\u044f. \u0422\u0430\u043a\u0436\u0435 \u043a\u043b\u0430\u0441\u0442\u0435\u0440 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0437\u0430\u043a\u043e\u043c\u043c\u0438\u0447\u0435\u043d\u043d\u044b\u0445 \u0438 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u043d\u044b\u0445 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f\u0445 (\u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0442\u0435\u0440\u0438 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438) \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0443\u043d\u0438\u0447\u0442\u043e\u0436\u0435\u043d\u0438\u044f \u0434\u0432\u0443\u0445 \u0434\u0430\u0442\u0430-\u0446\u0435\u043d\u0442\u0440\u043e\u0432 (\u0435\u0441\u043b\u0438 \u043e\u043d\u0438 \u0443\u043d\u0438\u0447\u0442\u043e\u0436\u0435\u043d\u044b \u043d\u0435 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e).<\/p>\n<p><\/p>\n<p><em>Podrobni opis datote\u010dne strukture in implementacije sem se odlo\u010dil, da ne vklju\u010dim. Kdor \u017eeli eksperimentirati, lahko vse to prebere v README. Navedel bom le opis avtomatiziranega testiranja.<\/em><\/p>\n<p><\/p>\n<h1 id=\"sistema-avtomaticheskogo-testirovaniya\">Sistem avtomatiziranega testiranja<\/h1>\n<p><\/p>\n<p>Za preverjanje odpornosti klasterjev z simulacijo razli\u010dnih napak je bil izdelan sistem avtomatiziranega testiranja. Za\u017eene se s skriptom <code>test\/failure<\/code>. Skript lahko sprejme kot parametre \u0161tevilke klasterjev, ki jih \u017eelite testirati. Na primer, ta ukaz:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">test\/failure 2 3<\/code><\/pre>\n<p><\/p>\n<p>bo testiral samo drugi in tretji klaster. \u010ce parametri niso navedeni, se bodo testirali vsi klasterji. Vsi klasterji se testirajo hkrati, rezultati pa se prikazujejo v nadzorni plo\u0161\u010di tmux. Tmux uporablja namenski tmux stre\u017enik, zato lahko skript za\u017eenete iz privzetega tmux-a, kar bo povzro\u010dilo vgrajen tmux. Priporo\u010dam uporabo terminala v velikem oknu z majhnim pisavo. Pred za\u010detkom testiranja se vse virtualke vrnejo na posnetek ob koncu skripta. <code>setup<\/code>.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Modeliranje visoko dostupnih klastera na temelju PostgreSQL i Pacemaker\" src=\"\/wp-content\/uploads\/2020\/08\/b546bab1ebbbe365991e1ff3d1667237.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Terminal je razdeljen na stolpce glede na \u0161tevilo testiranih klasterjev, privzeto (na posnetku zaslona) jih je \u0161tiri. Vsebino stolpcev bom razlo\u017eil na primeru Tuchanka2. Plo\u0161\u010de na posnetku zaslona so ozna\u010dene s \u0161tevilkami:<\/p>\n<p><\/p>\n<ol>\n<li>Tukaj se prikazuje statistika testov. Stolpci:\n<ul>\n<li><strong>failure<\/strong> \u2014 ime testa (funkcije v skriptu), ki simulira napako.<\/li>\n<li><strong>reaction<\/strong> \u2014 povpre\u010dje \u010dasa v sekundah, v katerem je klaster obnovil svoje delovanje. Meri se od za\u010detka delovanja skripta, ki simulira napako, do trenutka, ko klaster obnovi svoje delovanje in lahko nadaljuje z zagotavljanjem storitev. \u010ce je \u010das zelo kratek, na primer \u0161est sekund (to se zgodi v klasterjih z ve\u010d delavci (Tuchanka3 in Tuchanka4)), to pomeni, da je bila napaka na asinhronem delavcu in ni imela vpliva na delovanje, preklapljanja stanja klasterja ni bilo.<\/li>\n<li><strong>deviation<\/strong> \u2014 prikazuje razpr\u0161enost (natan\u010dnost) vrednosti <strong>reaction<\/strong> z metodo \u201estandardna deviacija\u201c.<\/li>\n<li><strong>count<\/strong> \u2014 koliko krat je bil ta test opravljen.<\/li>\n<\/ul>\n<\/li>\n<li>Kratek dnevnik omogo\u010da oceno, s \u010dim se klaster trenutno ukvarja. Prika\u017ee se \u0161tevilka iteracije (testa), \u010dasovna oznaka in ime operacije. Predolgo izvajanje (&gt; 5 minut) ka\u017ee na morebitno te\u017eavo.<\/li>\n<li><strong>heart<\/strong> (srce) \u2014 trenutni \u010das. Za vizualnu procenu funkcionalnosti <em>majstor<\/em> u njegovu tabelu se neprekidno upisuje trenutni \u010das koriste\u0107i float IP majstora. U slu\u010daju uspeha, rezultat se prikazuje u ovoj \u043f\u0430\u043d\u0435\u043b\u0438.<\/li>\n<li><strong>otkucaj<\/strong> (puls) \u2014 \u201etrenutni \u010das\u201c, koji je ranije zabele\u017een skriptom <strong>heart<\/strong> u majstoru, sada se \u010dita iz <em>rob<\/em> putem njegovog float IP. Omogu\u0107ava vizualnu procenu funkcionalnosti roba i replikacije. U Tuchanka1 nema roba s float IP (nema roba koji pru\u017eaju usluge), ali postoje dva instance (Baza podataka), pa \u0107e ovde biti prikazano ne <strong>otkucaj<\/strong>, a <strong>heart<\/strong> druga instanca.<\/li>\n<li>Monitoring stanja klastera pomo\u0107u alata <code>pcs mon<\/code>. Prikazuje strukturu, raspodelu resursa po \u010dvorovima i druge korisne informacije.<\/li>\n<li>Ovde se prikazuje sistemsko pra\u0107enje svake virtuelne ma\u0161ine klastera. Takvih panela mo\u017ee biti vi\u0161e \u2014 koliko virtuelnih ma\u0161ina ima klaster. Dva grafikona <em>CPU Optere\u0107enje<\/em> (u virtuelnim ma\u0161inama po dva procesora), ime virtuelne ma\u0161ine, <em>Sistemsko Optere\u0107enje<\/em> (nazvano kao Prose\u010dno Optere\u0107enje, jer je prose\u010deno za 5, 10 i 15 minuta), podaci o procesima i raspodela memorije.<\/li>\n<li>Pra\u0107enje skripta koje izvodi testiranja. U slu\u010daju kvara \u2014 naglog prekida rada ili beskrajnog ciklusa \u010dekanja \u2014 ovde se mo\u017ee videti uzrok takvog pona\u0161anja.<\/li>\n<\/ol>\n<p><\/p>\n<p>Testiranje se sprovodi u dva koraka. Prvo, skript prolazi kroz sve vrste testova, nasumi\u010dno biraju\u0107i virtuelnu ma\u0161inu kojoj \u0107e se ovaj test primeniti. Zatim se sprovodi beskrajan ciklus testiranja, virtuelne ma\u0161ine i kvarovi se svaki put biraju nasumi\u010dno. Naglo zavr\u0161avanje skripta testiranja (donja tabla) ili beskrajan ciklus \u010dekanja na ne\u0161to (&gt; 5 minuta vreme izvr\u0161enja jedne operacije, to je vidljivo u pra\u0107enju) ukazuje na to da je neki od testova na ovom klasteru propao.<\/p>\n<p><\/p>\n<p>Svaki test se sastoji od slede\u0107ih operacija:<\/p>\n<p><\/p>\n<ol>\n<li>Pokretanje funkcije koja emulira kvar.<\/li>\n<li><strong>Spreman?<\/strong> \u2014 \u010dekanje na obnavljanje funkcionalnosti klastera (kada postanu dostupne sve usluge).<\/li>\n<li>Prikazuje vreme \u010dekanja na obnavljanje klastera (<em>reaction<\/em>).<\/li>\n<li><strong>Popravi<\/strong> \u2014 klaster se \u201epopravlja\u201c. Nakon toga treba da se vrati u potpuno funkcionalno stanje i spremnosti za slede\u0107i kvar.<\/li>\n<\/ol>\n<p><\/p>\n<p>Evo liste testova sa opisom \u0161ta rade:<\/p>\n<p><\/p>\n<ul>\n<li><strong>ForkBomb<\/strong>: \u0441\u043e\u0437\u0434\u0430\u0435\u0442 &quot;Out of memory&quot; \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0444\u043e\u0440\u043a-\u0431\u043e\u043c\u0431\u044b.<\/li>\n<li><strong>Nema prostora<\/strong>: napolni diska. Vendar je test bolj simboli\u010den, saj ob obremenitvi, ki se ustvari med testiranjem, ob preobremenitvi diska obi\u010dajno ne pride do odpovedi PostgreSQL.<\/li>\n<li><strong>Postgres-KILL<\/strong>: ubije PostgreSQL s komando <code>killall -KILL postgres<\/code>.<\/li>\n<li><strong>Postgres-STOP<\/strong>: ukrivi PostgreSQL s komando <code>killall -STOP postgres<\/code>.<\/li>\n<li><strong>PowerOff<\/strong>: 'izklopi' virtualni stroj s komando <code>VBoxManage controlvm &quot;\u0432\u0438\u0440\u0442\u0443\u0430\u043b\u043a\u0430&quot; poweroff<\/code>.<\/li>\n<li><strong>Ponastavi<\/strong>: ponovno za\u017eene virtualni stroj s komando <code>VBoxManage controlvm &quot;\u0432\u0438\u0440\u0442\u0443\u0430\u043b\u043a\u0430&quot; reset<\/code>.<\/li>\n<li><strong>SBD-STOP<\/strong>: ukrivi SBD demon s komando <code>killall -STOP sbd<\/code>.<\/li>\n<li><strong>ShutDown<\/strong>: po\u0161lje komando virtualnemu stroju prek SSH <code>systemctl poweroff<\/code>, sistem pravilno zaklju\u010di delo.<\/li>\n<li><strong>UnLink<\/strong>: omre\u017eno izolacijo, komanda <code>VBoxManage controlvm &quot;\u0432\u0438\u0440\u0442\u0443\u0430\u043b\u043a\u0430&quot; setlinkstate1 off<\/code>.<\/li>\n<\/ul>\n<p><\/p>\n<p>\u0417\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0435 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043b\u0438\u0431\u043e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 tmux &quot;kill-window&quot; <strong>Ctrl-b &amp;<\/strong>, \u043b\u0438\u0431\u043e \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 &quot;detach-client&quot; <strong>Ctrl-b d<\/strong>: pri tem se testiranje zaklju\u010di, tmux se zapre, virtualni stroji se izklopijo.<\/p>\n<p><\/p>\n<h1 id=\"vyyavlennye-pri-testirovanii-problemy\">Problemi ugotovljeni med testiranjem<\/h1>\n<p><\/p>\n<ul>\n<li>\n<p>Trenutno <em>watchdog demon sbd<\/em> obravnava ustavitev nadzorovanih demonov, vendar ne njihovega zastoja. In, kot posledica, nepravilno obravnava napake, ki povzro\u010dajo zastoj samo <em>Corosync<\/em> in <em>Pacemaker<\/em>, vendar ne povzro\u010dajo zastojev <em>sbd<\/em>. Za preverjanje <em>Corosync<\/em> ve\u0107 <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/ClusterLabs\/sbd\/pull\/83\"><strong>PR#83<\/strong> (v GitHub-u pri <em>sbd<\/em>)<\/a><\/noindex>, sprejeto v veji <em>master<\/em>. Obljubili so (v PR#83), da bo tudi za Pacemaker nekaj podobnega, upam, da do <em>RedHat 8<\/em> naredijo. Ampak tak\u0161ne 'napake' so teoreti\u010dne, jih je enostavno simulirati umetno z uporabo na primer <code>killall -STOP corosync<\/code>, vendar se nikoli ne pojavijo v resni\u010dnem \u017eivljenju.<\/p>\n<p>\n<\/li>\n<li>\n<p>Pri <em>Pacemaker<\/em> v razli\u010dici za <em>CentOS 7<\/em> napa\u010dno nastavljen <em>sync_timeout<\/em> za <em>quorum device<\/em>, zato <noindex><a rel=\"nofollow\" href=\"https:\/\/lists.clusterlabs.org\/pipermail\/users\/2019-August\/026145.html\">ob odpovedi enega vozli\u0161\u010da se drugi vozli\u0161\u010de s dolo\u010deno verjetnostjo ponovno za\u017eene<\/a><\/noindex>, kamor bi moral preiti glavni. Popravljeno je bilo z pove\u010danjem <em>sync_timeout<\/em> za <em>quorum device<\/em> med uvajanjem (v skripti <code>setup\/setup1<\/code>). To popravilo ni bilo sprejeto s strani razvijalcev <em>Pacemaker<\/em>, namesto tega so obljubili, da bodo preoblikovali infrastrukturo na tak na\u010din (v nekem nedolo\u010denem prihodnosti), da se bo ta \u010dasovni zamik izra\u010dunal samodejno.<\/p>\n<p>\n<\/li>\n<li>\n<p>\u010ce je pri konfiguriranju baze podatkov navedeno, da v <code>LC_MESSAGES<\/code> (besedilna sporo\u010dila) lahko uporablja Unicode, na primer, <code>ru_RU.UTF-8<\/code>, potem pri zagonu <em>postgres<\/em> v okolju, kjer okolje ni UTF-8, na primer, v praznem okolju (tukaj <em>pacemaker<\/em>+<em>pgsqlms<\/em>(paf) za\u017eene <em>postgres<\/em>), bo <noindex><a rel=\"nofollow\" href=\"https:\/\/www.postgresql.org\/message-id\/13FE0F7C-5140-499C-8C2E-0BE64BC3A48B%40ya.ru\">v dnevniku namesto znakov UTF-8 bodo vpra\u0161aji<\/a><\/noindex>. Razvijalci PostgreSQL se nikoli niso dogovorili, kaj storiti v tem primeru. To se obide, potrebno je nastaviti <code>LC_MESSAGES=en_US.UTF-8<\/code> \u043f\u0440\u0438 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 (\u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438) \u0438\u043d\u0441\u0442\u0430\u043d\u0441\u0430 \u0411\u0414.<\/p>\n<p>\n<\/li>\n<li>\n<p>\u0415\u0441\u043b\u0438 \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u0435\u043d wal_receiver_timeout (\u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043e\u043d 60s), \u0442\u043e \u043f\u0440\u0438 \u0442\u0435\u0441\u0442\u0435 PostgreSQL-STOP \u043d\u0430 \u043c\u0430\u0441\u0442\u0435\u0440\u0435 \u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430\u0445 tuchanka3 \u0438 tuchanka4 <noindex><a rel=\"nofollow\" href=\"https:\/\/www.postgresql.org\/message-id\/60590EC6-4062-4F25-A49C-3948ED2A7D47%40ya.ru\">\u043d\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u0435\u0440\u0435\u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0440\u0435\u043f\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u043a \u043d\u043e\u0432\u043e\u043c\u0443 \u043c\u0430\u0441\u0442\u0435\u0440\u0443<\/a><\/noindex>. \u0420\u0435\u043f\u043b\u0438\u043a\u0430\u0446\u0438\u044f \u0442\u0430\u043c \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u0430\u044f, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0431, \u043d\u043e \u0438 \u043d\u043e\u0432\u044b\u0439 \u043c\u0430\u0441\u0442\u0435\u0440. \u041e\u0431\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u043e\u0439 wal_receiver_timeout=0 \u043f\u0440\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0435 PostgreSQL.<\/p>\n<p>\n<\/li>\n<li>\n<p>\u0418\u0437\u0440\u0435\u0434\u043a\u0430 \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u043b\u0430\u0441\u044c \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0440\u0435\u043f\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u0443 PostgreSQL \u0432 \u0442\u0435\u0441\u0442\u0435 ForkBomb (\u043f\u0435\u0440\u0435\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043f\u0430\u043c\u044f\u0442\u0438). <noindex><a rel=\"nofollow\" href=\"https:\/\/www.postgresql.org\/message-id\/60590EC6-4062-4F25-A49C-3948ED2A7D47%40ya.ru\">\u041f\u043e\u0441\u043b\u0435 ForkBomb \u0438\u043d\u043e\u0433\u0434\u0430 \u0440\u0430\u0431\u044b \u043c\u043e\u0433\u0443\u0442 \u043d\u0435 \u043f\u0435\u0440\u0435\u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0442\u044c\u0441\u044f \u043a \u043d\u043e\u0432\u043e\u043c\u0443 \u043c\u0430\u0441\u0442\u0435\u0440\u0443<\/a><\/noindex>. \u042f \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u043b \u0442\u0430\u043a\u043e\u0435 \u043b\u0438\u0448\u044c \u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430\u0445 tuchanka3 \u0438 tuchanka4, \u0433\u0434\u0435 \u0438\u0437-\u0437\u0430 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0440\u0435\u043f\u043b\u0438\u043a\u0430\u0446\u0438\u044f \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u0430\u044f, \u043f\u043e\u0434\u0432\u0438\u0441\u0430\u043b \u043c\u0430\u0441\u0442\u0435\u0440. \u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u043b\u0430 \u0441\u0430\u043c\u0430, \u0441\u043f\u0443\u0441\u0442\u044f \u043a\u0430\u043a\u043e\u0435-\u0442\u043e \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f (\u043f\u043e\u0440\u044f\u0434\u043a\u0430 \u0434\u0432\u0443\u0445 \u0447\u0430\u0441\u043e\u0432). \u0422\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0435, \u0447\u0442\u043e\u0431\u044b \u044d\u0442\u043e \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c. \u041f\u043e \u0441\u0438\u043c\u043f\u0442\u043e\u043c\u0430\u043c \u043f\u043e\u0445\u043e\u0436\u0435 \u043d\u0430 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0439 \u0431\u0430\u0433, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0434\u0440\u0443\u0433\u043e\u0439 \u043f\u0440\u0438\u0447\u0438\u043d\u043e\u0439, \u043d\u043e \u0441 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u043c\u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u044f\u043c\u0438.<\/p>\n<p>\n<\/li>\n<\/ul>\n<p><\/p>\n<p>\u041a\u0430\u0440\u0442\u0438\u043d\u043a\u0430 \u043a\u0440\u043e\u0433\u0430\u043d\u0430 \u0432\u0437\u044f\u0442\u0430 \u0441 <noindex><a rel=\"nofollow\" href=\"http:\/\/fav.me\/d8fo42n\">Deviant Art<\/a><\/noindex> c \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0430\u0432\u0442\u043e\u0440\u0430:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Modeliranje visoko dostupnih klastera na temelju PostgreSQL i Pacemaker\" src=\"\/wp-content\/uploads\/2020\/08\/ded1ead387814d97d84d0fb89e025386.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Izvor: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/domclick\/blog\/516538\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u041d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043d\u0430\u0437\u0430\u0434 \u043f\u0435\u0440\u0435\u0434\u043e \u043c\u043d\u043e\u0439 \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u043b\u0438 \u0437\u0430\u0434\u0430\u0447\u0443 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043e\u0442\u043a\u0430\u0437\u043e\u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u044b\u0439 \u043a\u043b\u0430\u0441\u0442\u0435\u0440 \u0434\u043b\u044f PostgreSQL, \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0439 \u0432 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0434\u0430\u0442\u0430-\u0446\u0435\u043d\u0442\u0440\u0430\u0445, \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u043d\u044b\u0445 \u043e\u043f\u0442\u043e\u0432\u043e\u043b\u043e\u043a\u043d\u043e\u043c \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u043e\u0434\u043d\u043e\u0433\u043e \u0433\u043e\u0440\u043e\u0434\u0430, \u0438 \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u044b\u0439 \u0432\u044b\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u043e\u0442\u043a\u0430\u0437 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043e\u0431\u0435\u0441\u0442\u043e\u0447\u0438\u0432\u0430\u043d\u0438\u0435) \u043e\u0434\u043d\u043e\u0433\u043e \u0434\u0430\u0442\u0430-\u0446\u0435\u043d\u0442\u0440\u0430. \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0441\u043e\u0444\u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430 \u043e\u0442\u043a\u0430\u0437\u043e\u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u043e\u0441\u0442\u044c, \u0432\u044b\u0431\u0440\u0430\u043b Pacemaker, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u044d\u0442\u043e \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043e\u0442 RedHat \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043e\u0442\u043a\u0430\u0437\u043e\u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u044b\u0445 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u043e\u0432. \u041e\u043d\u043e \u0445\u043e\u0440\u043e\u0448\u043e \u0442\u0435\u043c, \u0447\u0442\u043e [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":92571,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-92570","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.4 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u041d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043d\u0430\u0437\u0430\u0434 \u043f\u0435\u0440\u0435\u0434\u043e \u043c\u043d\u043e\u0439 \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u043b\u0438 \u0437\u0430\u0434\u0430\u0447\u0443 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043e\u0442\u043a\u0430\u0437\u043e\u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u044b\u0439 \u043a\u043b\u0430\u0441\u0442\u0435\u0440 \u0434\u043b\u044f PostgreSQL.\" \/>\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\/sl\/blog\/administrirovanie\/modelirovanie-otkazoustojchivyh-klasterov-na-baze-postgresql-i-pacemaker\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"sl_SI\" \/>\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\udd47\u041c\u043e\u0434\u0435\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043e\u0442\u043a\u0430\u0437\u043e\u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u044b\u0445 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u043e\u0432 \u043d\u0430 \u0431\u0430\u0437\u0435 PostgreSQL \u0438 Pacemaker | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u041d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043d\u0430\u0437\u0430\u0434 \u043f\u0435\u0440\u0435\u0434\u043e \u043c\u043d\u043e\u0439 \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u043b\u0438 \u0437\u0430\u0434\u0430\u0447\u0443 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043e\u0442\u043a\u0430\u0437\u043e\u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u044b\u0439 \u043a\u043b\u0430\u0441\u0442\u0435\u0440 \u0434\u043b\u044f PostgreSQL.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/sl\/blog\/administrirovanie\/modelirovanie-otkazoustojchivyh-klasterov-na-baze-postgresql-i-pacemaker\" \/>\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-08-28T17:42:21+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-08-28T17:42:21+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\udd47\u041c\u043e\u0434\u0435\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043e\u0442\u043a\u0430\u0437\u043e\u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u044b\u0445 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u043e\u0432 \u043d\u0430 \u0431\u0430\u0437\u0435 PostgreSQL \u0438 Pacemaker | ProHoster","description":"\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u041d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043d\u0430\u0437\u0430\u0434 \u043f\u0435\u0440\u0435\u0434\u043e \u043c\u043d\u043e\u0439 \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u043b\u0438 \u0437\u0430\u0434\u0430\u0447\u0443 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043e\u0442\u043a\u0430\u0437\u043e\u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u044b\u0439 \u043a\u043b\u0430\u0441\u0442\u0435\u0440 \u0434\u043b\u044f PostgreSQL.","canonical_url":"https:\/\/prohoster.info\/sl\/blog\/administrirovanie\/modelirovanie-otkazoustojchivyh-klasterov-na-baze-postgresql-i-pacemaker","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sl_SI","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\udd47\u041c\u043e\u0434\u0435\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043e\u0442\u043a\u0430\u0437\u043e\u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u044b\u0445 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u043e\u0432 \u043d\u0430 \u0431\u0430\u0437\u0435 PostgreSQL \u0438 Pacemaker | ProHoster","og:description":"\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u041d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043d\u0430\u0437\u0430\u0434 \u043f\u0435\u0440\u0435\u0434\u043e \u043c\u043d\u043e\u0439 \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u043b\u0438 \u0437\u0430\u0434\u0430\u0447\u0443 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043e\u0442\u043a\u0430\u0437\u043e\u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u044b\u0439 \u043a\u043b\u0430\u0441\u0442\u0435\u0440 \u0434\u043b\u044f PostgreSQL.","og:url":"https:\/\/prohoster.info\/sl\/blog\/administrirovanie\/modelirovanie-otkazoustojchivyh-klasterov-na-baze-postgresql-i-pacemaker","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-08-28T17:42:21+00:00","article:modified_time":"2020-08-28T17:42:21+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"92570","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 12:06:03","updated":"2022-09-29 15:28:29","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/posts\/92570","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/comments?post=92570"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/posts\/92570\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/media\/92571"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/media?parent=92570"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/categories?post=92570"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/tags?post=92570"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}