{"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\/et\/blog\/administrirovanie\/modelirovanie-otkazoustojchivyh-klasterov-na-baze-postgresql-i-pacemaker","title":{"rendered":"PostgreSQL ja Pacemakeri p\u00f5hjal t\u00f6\u00f6tavate vigadeta klastrite modelleerimine","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<h1 id=\"vvedenie\">Sissejuhatus<\/h1>\n<p><\/p>\n<p>M\u00f5ni aeg tagasi sain \u00fclesande luua vigadeta klaster <noindex><a rel=\"nofollow\" href=\"https:\/\/www.postgresql.org\">PostgreSQL<\/a><\/noindex>, mis t\u00f6\u00f6tab mitmes andmekeskuses, mis on \u00fchendatud kiudoptilise kaabliga \u00fches linnas, ja suudab taluda \u00fchte andmekeskust puudutavat riket (nt elektrikatkestus). Vigadeta funktsionaalsuse tagamiseks valisin <noindex><a rel=\"nofollow\" href=\"https:\/\/clusterlabs.org\">Pacemakeri<\/a><\/noindex>, kuna see on RedHati ametlik lahendus vigadeta klastrite loomiseks. Selle eeliseks on, et RedHat tagab selle toe, ja et see on universaalne (modulaarne) lahendus. Selle abil on v\u00f5imalik tagada vigadeta mitte ainult PostgreSQL-ile, vaid ka teistele teenustele, kasutades kas standardmooduleid v\u00f5i luues neid konkreetsete vajaduste jaoks.<\/p>\n<p><\/p>\n<p>Selle lahenduse kohta tekkis \u00f5igustatud k\u00fcsimus: kui t\u00f5rkekindel on t\u00f5rkekindel klaster? Selle uurimiseks koostasin katse seadme, mis simuleerib erinevaid t\u00f5rkeid klastrite s\u00f5lmedes, ootab taastumist, taastab t\u00f5rkena t\u00f6\u00f6tanud s\u00f5lme ja j\u00e4tkab testimist ts\u00fcklis. Esialgu nimetati seda projekti hapgsql, kuid aja jooksul hakkas mind \u00e4rritama nimi, milles on ainult \u00fcks vokaal. Seet\u00f5ttu hakkan t\u00f5rkekindlaid andmebaase (ja float IP, mis neile viitavad) nimetama <strong>krogan<\/strong> (iseloom arvutim\u00e4ngust, kellel on k\u00f5ik olulised organid duplitseeritud), ja s\u00f5lmed, klastrid ning kogu projekt \u2014 <strong>tuchanka<\/strong> (planeet, kus kroganid elavad).<\/p>\n<p><\/p>\n<p>Praegu on juhtkond lubanud <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/domclick\/tuchanka\">avatud projekti open source kogukonnale MIT litsentsi alla<\/a><\/noindex>. README t\u00f5lgitakse peagi inglise keelde (sest oodatakse, et p\u00f5hitarbijad oleksid Pacemakeri ja PostgreSQL arendajad), ja vana venekeelne README otsustasin osaliselt vormistada selle artikli kujul.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"PostgreSQL ja Pacemakeri p\u00f5hjal t\u00f6\u00f6tavate vigadeta klastrite modelleerimine\" 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>Klastrid paigutatakse virtuaalmasinatele <noindex><a rel=\"nofollow\" href=\"https:\/\/www.virtualbox.org\">VirtualBox<\/a><\/noindex>. Kokku luuakse 12 virtuaalset masinat (kokku 36GiB), mis moodustavad 4 talitush\u00e4iret kestvat klusterit (erinevad variandid). Esimene kaks klastrit koosnevad kahest PostgreSQL serverist, mis asuvad erinevates andmekeskustes, ja \u00fchest serverist <em>witness<\/em> c <strong>quorum device<\/strong> (mis on paigutatud odavale virtuaalmasinale kolmandas andmekeskuses), mis lahendab ebamugavustunde <strong>50%\/50%<\/strong>, andes oma h\u00e4\u00e4le \u00fchele osapoolele. Kolmas klaster asub kolmes andmekeskuses: \u00fcks peamine, kaks alam, ilma <strong>quorum device<\/strong>. Neljas klaster koosneb neljast PostgreSQL serverist, kaks igas andmekeskuses: \u00fcks peamine, teised replikad, ja kasutab samuti <em>witness<\/em> c <strong>quorum device<\/strong>. Neljas talub kahe serveri v\u00f5i \u00fche andmekeskuse riket. See lahendus v\u00f5ib vajadusel ulatuda suuremale arvule replikatele.<\/p>\n<p><\/p>\n<p>Ajavahe teenus <noindex><a rel=\"nofollow\" href=\"https:\/\/www.ntp.org\">ntpd<\/a><\/noindex> on samuti \u00fcmber seadistatud talitush\u00e4irete v\u00e4ltimiseks, kuid seal kasutatakse meetodit, mille nimi on <code>ntpd<\/code> (<em>orphan mode<\/em>). \u00dchine server <em>witness<\/em> t\u00e4idab keskses NTP serveri rolli, jagades oma aega k\u00f5igile klastritele, seel\u00e4bi s\u00fcnkroniseerides k\u00f5ik serverid \u00fcksteisega. Kui <em>witness<\/em> kui see eba\u00f5nnestub v\u00f5i isoleeritakse, hakkab klastris \u00fcks serveritest oma aega jagama. Abistav vahem\u00e4lu <strong>HTTP proxy<\/strong> on samuti \u00fcles t\u00f5stetud <em>witness<\/em>, mille abil \u00fclej\u00e4\u00e4nud virtuaalmasinad p\u00e4\u00e4sevad juurde Yum-repositooriumidele. Tegelikult, nagu t\u00e4pne aeg ja proksid, paigutatakse need t\u00f5en\u00e4oliselt eraldi serveritesse, kuid katsetes nad asuvad <em>witness<\/em> ainult virtuaalmasinate arvu ja ruumi kokkuhoiu eesm\u00e4rgil.<\/p>\n<p><\/p>\n<h1 id=\"versii\">Versioonid<\/h1>\n<p><\/p>\n<p>v0. Toimib CentOS 7 ja PostgreSQL 11 peal VirtualBox 6.1-s.<\/p>\n<p><\/p>\n<h1 id=\"struktura-klasterov\">Klastri struktuur<\/h1>\n<p><\/p>\n<p>K\u00f5ik klastrid on m\u00f5eldud paiknema mitmes andmekeskuses, \u00fchendatud \u00fche tasase v\u00f5rku ja peavad taluma \u00fche andmekeskuse rikke v\u00f5i v\u00f5rgu isoleerimist. Seet\u00f5ttu <strong>ei ole v\u00f5imalik<\/strong> kasutada kaitseks <strong>split-brain<\/strong> standardi tehnoloogiat Pacemaker, mis tuntakse <em>STONITH<\/em> (Shoot The Other Node In The Head) v\u00f5i <em>fencing<\/em>. Selle sisu seisneb selles, et kui klastris olevad s\u00f5lmed hakkavad kahtlema, et m\u00f5ne s\u00f5lmega on midagi valesti, et see ei reageeri v\u00f5i k\u00e4itub eba\u00f5igesti, siis nad sunnivad selle v\u00e4liste seadmete, n\u00e4iteks IPMI juhtimiskaardi v\u00f5i UPS-i kaudu v\u00e4lja l\u00fclitama. Kuid see t\u00f6\u00f6tab ainult siis, kui \u00fcksikserveri rikke korral IPMI v\u00f5i UPS j\u00e4tkab t\u00f6\u00f6tamist. Siin on ette n\u00e4htud kaitse palju katastroofilisema rikke eest, kui kogu andmekeskus kaotab, n\u00e4iteks voolu. Ja sellise rikke korral ei t\u00f6\u00f6ta ka <em>stonith<\/em>-seadmed (IPMI, UPS jne) samuti.<\/p>\n<p><\/p>\n<p>Selle asemel p\u00f5hineb s\u00fcsteem kvoorumil. K\u00f5igil s\u00f5lmedel on h\u00e4\u00e4l ja t\u00f6\u00f6tada saavad ainult need, mis n\u00e4evad rohkem kui poole k\u00f5igist s\u00f5lmedest. Seda arvu, mis on \"pool+1\", nimetatakse <strong>kvorum<\/strong>. Kui kvoorumit ei saavutata, siis otsustab s\u00f5lm, et ta asub v\u00f5rguisolatsioonis ja peab v\u00e4lja l\u00fclitama oma ressursid, st see on selline <strong>kaitse split-brain<\/strong>. Kui see tarkvara, mis vastutab selle k\u00e4itumise eest, ei toimi, siis peab t\u00f6\u00f6le hakkama watchdog, n\u00e4iteks IPMI baasil.<\/p>\n<p><\/p>\n<p>Kui s\u00f5lmede arv on paaris (kluster kahes andmekeskuses), v\u00f5ib tekkida nn ebamugavus <strong>50%\/50%<\/strong> (<em>viisk\u00fcmmend viisk\u00fcmmend<\/em>), kui v\u00f5rgu isolatsioon jagab kluster t\u00e4pselt pooleks. Seet\u00f5ttu lisatakse paarisarvuliste s\u00f5lmede jaoks <strong>quorum device<\/strong> \u2014 madala n\u00f5udlikkusega demon, mida saab k\u00e4ivitada odavaimal virtuaalmudelis kolmandas andmekeskuses. Ta annab oma h\u00e4\u00e4le \u00fchele segmentidest (mida ta n\u00e4eb), lahendades seel\u00e4bi 50%\/50% ebamugavuse. Serverit, kus quorum seade t\u00f6\u00f6le pannakse, nimetasin ma <em>witness<\/em> (terminoloogia repmgr-ist, meeldiv).<\/p>\n<p><\/p>\n<p>Ressursid saavad liikuda \u00fchest kohast teise, n\u00e4iteks rikete t\u00f5ttu serverite pealt toimivatele v\u00f5i s\u00fcsteemiadministraatorite k\u00e4sul. Et kliendid teaksid, kus vajalikud ressursid asuvad (kuhu \u00fchendada?), kasutatakse <em>ujutavaid IP<\/em> (<strong>float IP<\/strong>). Need on IP, mida Pacemaker saab s\u00f5lmedel liigutada (k\u00f5ik asub tasases v\u00f5rgus). Iga\u00fcks neist s\u00fcmboliseerib ressursi (teenuse) ja on seal, kuhu tuleb \u00fchendada, et sellele teenusele (meie puhul andmebaasile) ligip\u00e4\u00e4s saada.<\/p>\n<p><\/p>\n<h2 id=\"tuchanka1-shema-s-uplotneniem\">Tuchanka1 (tihendamise skeem)<\/h2>\n<p><\/p>\n<h3 id=\"struktura\">Struktuur<\/h3>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"PostgreSQL ja Pacemakeri p\u00f5hjal t\u00f6\u00f6tavate vigadeta klastrite modelleerimine\" src=\"\/wp-content\/uploads\/2020\/08\/5651238e36f4af1c32f117191cf30261.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>M\u00f5te oli selles, et meil on palju v\u00e4ikseid andmebaase madala koormusega, mille jaoks ei ole kasulik hoida p\u00fchendatud slave-serverit kuumvarundusre\u017eiimis ainult lugemisv\u00f5imetustega tehingute jaoks (sellise ressursside raiskamise vajadus puudub).<\/p>\n<p><\/p>\n<p>Igas andme keskuses on \u00fcks server. Igal serveril on kaks PostgreSQL instantsi (PostgreSQL terminoloogias nimetatakse neid klasteriteks, kuid segaduse v\u00e4ltimiseks nimetatakse neid instantsideks (nagu teiste andmebaaside puhul), ja klastreid nimetatakse ainult Pacemakeri klasteriteks). \u00dcks instants t\u00f6\u00f6tab meistrina ja ainult tema osutab teenuseid (ainult tema suunas on float IP). Teine instants t\u00f6\u00f6tab orjana teise andmekeskuse jaoks ja hakkab teenuseid osutama ainult siis, kui tema meister t\u00f5rkub. Kuna enamik aega osutab teenuseid (t\u00e4idab p\u00e4ringuid) ainult \u00fcks kahest instantsist (meister), optimeeritakse serveri k\u00f5ik ressursid meistrile (m\u00e4lu eraldatakse shared_buffers jaoks jne), kuid nii, et ka teisele instantsile jagub ressursse (kuigi mitteoptimaalse t\u00f6\u00f6 jaoks failis\u00fcsteemi cache'i kaudu) \u00fche andmekeskuse rikke korral. Ori ei osuta teenuseid (ei t\u00e4ida read only-p\u00e4ringuid) klastrite normaalse t\u00f6\u00f6 korral, et v\u00e4ltida ressursikonflikte meistriga samas masinas.<\/p>\n<p><\/p>\n<p>Kui tegemist on kahe s\u00f5lmega, siis on t\u00f5hususe tagamine v\u00f5imalik ainult as\u00fcnkroonse replikatsiooni puhul, kuna s\u00fcnkroonse puhul viib orja rike meistri peatamiseni.<\/p>\n<p><\/p>\n<h3 id=\"otkaz-witness\">Rikke witness<\/h3>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"PostgreSQL ja Pacemakeri p\u00f5hjal t\u00f6\u00f6tavate vigadeta klastrite modelleerimine\" src=\"\/wp-content\/uploads\/2020\/08\/3c046d13c0c6839de297827ca3a8928b.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Rikke witness (<em>quorum device<\/em>) vaatlen ainult Tuchanka1 klastri puhul, k\u00f5igi teiste osas on lugu sama. Witness'i rikke korral klastristruktuuris ei muutu midagi, k\u00f5ik t\u00f6\u00f6tab edasi nagu varem. Kuid quorum muutub 2-st 3-st, seega iga j\u00e4rgmine rike on klastrile saatuslik. Igal juhul on kiirelt remontima.<\/p>\n<p><\/p>\n<h3 id=\"otkaz-tuchanka1\">Riik Tuchanka1<\/h3>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"PostgreSQL ja Pacemakeri p\u00f5hjal t\u00f6\u00f6tavate vigadeta klastrite modelleerimine\" src=\"\/wp-content\/uploads\/2020\/08\/112957293bd682428115e4e93c9f1a96.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u00dche andmekeskuse rike Tuchanka1 jaoks. Sel juhul <em>witness<\/em> annab oma h\u00e4\u00e4le teisele s\u00f5lmele teises andmekeskuses. Seal muutub endine ori meistriks, mille tulemuseks on see, et \u00fchel serveril t\u00f6\u00f6tavad m\u00f5lemad meistrid ja suunavad m\u00f5lemad oma float IP-d.<\/p>\n<p><\/p>\n<h2 id=\"tuchanka2-klassicheskaya\">Tuchanka2 (klassikaline)<\/h2>\n<p><\/p>\n<h3 id=\"struktura-1\">Struktuur<\/h3>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"PostgreSQL ja Pacemakeri p\u00f5hjal t\u00f6\u00f6tavate vigadeta klastrite modelleerimine\" src=\"\/wp-content\/uploads\/2020\/08\/c3af368f823fbd580b4ebb14cc87c750.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Klassikaline skeem kahest s\u00f5lmest. \u00dchel t\u00f6\u00f6tab meister, teisel ori. M\u00f5lemad saavad p\u00e4ringuid teostada (ori ainult read only), seet\u00f5ttu suunatakse m\u00f5lemale float IP: krogan2 \u2014 meistrile, krogan2s1 \u2014 orjale. T\u00f5hususe tagamine on nii meistril kui orjal.<\/p>\n<p><\/p>\n<p>Kahe s\u00f5lme puhul on soovitatav kasutada as\u00fcnkroonset replikatsiooni, sest s\u00fcnkrone replikatsiooni korral toob \u00fcksiku orja rike kaasa pea seadme t\u00f6\u00f6 seiskumise.<\/p>\n<p><\/p>\n<h3 id=\"otkaz-tuchanka2\">Rike Tuchanka2<\/h3>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"PostgreSQL ja Pacemakeri p\u00f5hjal t\u00f6\u00f6tavate vigadeta klastrite modelleerimine\" src=\"\/wp-content\/uploads\/2020\/08\/79bfcaf88c96d8ee16767dcef53741c1.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u00dche andmekeskuse rikke korral <em>witness<\/em> h\u00e4\u00e4letab teise poolt. Ainult t\u00f6\u00f6tavas andmekeskuses t\u00f5stetakse pea seade ja m\u00f5lemad float IP: pea ja orja IP viivad sinna. Loomulikult peab instants olema seadistatud nii, et tal on piisavalt ressursse (\u00fchenduse piirangud jne), et \u00fcheaegselt vastu v\u00f5tta k\u00f5ik \u00fchendused ja p\u00e4ringud pea- ja orja float IP-lt. See t\u00e4hendab, et normaalses t\u00f6\u00f6s peab tal olema piisav varu piirangutest.<\/p>\n<p><\/p>\n<h2 id=\"tuchanka4-mnogo-rabov\">Tuchanka4 (palju orje)<\/h2>\n<p><\/p>\n<h3 id=\"struktura-2\">Struktuur<\/h3>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"PostgreSQL ja Pacemakeri p\u00f5hjal t\u00f6\u00f6tavate vigadeta klastrite modelleerimine\" src=\"\/wp-content\/uploads\/2020\/08\/17819fd97847f0573d429e422d799bc1.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>See on juba teine \u00e4\u00e4rmus. On andmebaase, kuhu saadetakse v\u00e4ga palju lugemisettepanekuid (t\u00fc\u00fcpiline olukord k\u00f5rge koormusega veebisaidi puhul). Tuchanka4 on olukord, kus orje v\u00f5ib olla kolm v\u00f5i rohkem selliste p\u00e4ringute t\u00f6\u00f6tlemiseks, kuid mitte siiski liiga palju. Kui orje on v\u00e4ga palju, peab v\u00e4lja m\u00f5tlema hierarhilise replikatsioonis\u00fcsteemi. Minimaalses juhtumis (pildil) on igas kahes andmekeskuses kaks serverit, millel on iga\u00fchel instants PostgreSQL.<\/p>\n<p><\/p>\n<p>Teise olulise omaduse puhul on see, et siin on juba v\u00f5imalik korraldada \u00fchtset s\u00fcnkroonimist. See on seadistatud nii, et vajadusel replikeerida teise andmeti keskusesse, mitte sama andmeti keskuse kopeerimisele. Peamine ja iga orja prindib float IP. T\u00f5epoolest, orjade vahel tuleks teha p\u00e4ringute tasakaalustamine millegi kaudu. <em>sql proxy<\/em>, n\u00e4iteks kliendi pool. erinevatel t\u00fc\u00fcpidel klientidel v\u00f5ib vaja minna erinevat t\u00fc\u00fcpi <em>sql proxy<\/em>, ning ainult klientide arendajad teavad, kellele milline on vajalik. See funktsionaalsus v\u00f5ib olla rakendatud nii v\u00e4lise deemoni kui ka klientide teegi (connection pool) kaudu jne. K\u00f5ik see j\u00e4\u00e4b andmebaasi usaldusv\u00e4\u00e4rse kihi teemade sisse (usaldusv\u00e4\u00e4rsus <em>SQL proxy<\/em> saab rakendada eraldi koos kliendi usaldusv\u00e4\u00e4rsusega).<\/p>\n<p><\/p>\n<h3 id=\"otkaz-tuchanka4\">Tuchanka4 t\u00f5rge<\/h3>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"PostgreSQL ja Pacemakeri p\u00f5hjal t\u00f6\u00f6tavate vigadeta klastrite modelleerimine\" src=\"\/wp-content\/uploads\/2020\/08\/e005ae90ffd63abdb272012b94735618.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kui \u00fcks andmekeskus (st kaks serverit) eba\u00f5nnestub, h\u00e4\u00e4letab witness teise poolt. Tulemuseks on see, et teises andmekeskuses t\u00f6\u00f6tavad kaks serverit: \u00fches t\u00f6\u00f6tab meisters server ja sellele viitab meistriserveri float IP (read-write p\u00e4ringute vastuv\u00f5tmiseks); teises serveris t\u00f6\u00f6tab slave, millel on s\u00fcnkroonreplikatsioon, ja sellele viitab \u00fcks slave float IP (read-only p\u00e4ringute jaoks).<\/p>\n<p><\/p>\n<p>Esimene asi, mida tuleb m\u00e4rkida: t\u00f6\u00f6tavad slave float IP-d ei ole k\u00f5ik, vaid ainult \u00fcks. Ja selle korrektselt toimimiseks tuleb, et <em>sql proxy<\/em> suunaks k\u00f5ik p\u00e4ringud ainukesele allesj\u00e4\u00e4nud float IP-le; ja kui <em>sql proxy<\/em> ei, siis v\u00f5ib loetleda k\u00f5ik slave float IP-d komaga eraldatult URL-is \u00fchenduse loomiseks. Sellisel juhul on <em>libpq<\/em> \u00fchendamine esimese t\u00f6\u00f6tava IP-ga, nagu on tehtud automaattestimise s\u00fcsteemis. V\u00f5imalik, et teistes raamatukogudes, n\u00e4iteks JDBC-s, ei pruugi see nii t\u00f6\u00f6tada ja vajalik on <em>sql proxy<\/em>. Nii on tehtud, sest slave float IP-de puhul on keelatud samaaegselt sama serveris t\u00f6\u00f6tamine, et need jaotuksid \u00fchtlaselt slave serverite vahel, kui neid t\u00f6\u00f6tab mitu.<\/p>\n<p><\/p>\n<p>Teiseks: isegi andmekeskuse rikke korral s\u00e4ilib s\u00fcnkroonne kopeerimine. Isegi kui juhtub teine rike, kui \u00fches allesj\u00e4\u00e4nud andmekeskuses eba\u00f5nnestub \u00fcks kahest serverist, l\u00f5petab klaster k\u00fcll teenuste osutamise, kuid salvestab siiski teavet k\u00f5igi kinnitatud tehingute kohta, millele ta on andnud kinnituse (teise rikke korral ei tohi info kaduma minna).<\/p>\n<p><\/p>\n<h2 id=\"tuchanka3-3-data-centra\">Tuchanka3 (3 andmekeskust)<\/h2>\n<p><\/p>\n<h3 id=\"struktura-3\">Struktuur<\/h3>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"PostgreSQL ja Pacemakeri p\u00f5hjal t\u00f6\u00f6tavate vigadeta klastrite modelleerimine\" src=\"\/wp-content\/uploads\/2020\/08\/e11f9884b92fe20a63b5080ae8c7f82b.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>See klaster on m\u00f5eldud olukorraks, kus on kolm t\u00e4ielikult t\u00f6\u00f6tavat andmekeskust, milles igas on t\u00e4ielikult toimiv andmebaasi server. Sel juhul <em>quorum device<\/em> ei ole vajalik. \u00dches andmekeskuses t\u00f6\u00f6tab master, kahes teises - orjad. Replikatsioon on s\u00fcnkroonne, t\u00fc\u00fcpi ANY (slave1, slave2), st kliendile saadakse kinnituskiri kommitud tehingute kohta, kui \u00fcks orjadest esimesena vastab, et ta on kommitud vastu v\u00f5tnud. Ressursside jaoks on m\u00e4\u00e4ratud \u00fcks float IP masterile ja kaks orjadele. Erinevalt Tuchanka4-st on k\u00f5ik kolm float IP-d t\u00f5rke jooksul vastupidavad. Read-only SQL-p\u00e4ringute tasakaalustamiseks saab kasutada <em>sql proxy<\/em> (eraldiseisva rikkevastupidavusega), v\u00f5i m\u00e4\u00e4rata poolele klientidele \u00fche orja float IP ning teisele poolele teise.<\/p>\n<p><\/p>\n<h3 id=\"otkaz-tuchanka3\">T\u00f5rge Tuchanka3<\/h3>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"PostgreSQL ja Pacemakeri p\u00f5hjal t\u00f6\u00f6tavate vigadeta klastrite modelleerimine\" src=\"\/wp-content\/uploads\/2020\/08\/1e61158be3c23742384d3621e8f7896b.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kui \u00fcks andmete keskus eba\u00f5nnestub, j\u00e4\u00e4vad alles kaks. \u00dches on master ja float IP masterist, teises on t\u00f6\u00f6 ja m\u00f5lemad t\u00f6\u00f6 float IP-d (instantsil peab olema kahekordne ressursside varu, et vastu v\u00f5tta k\u00f5ik \u00fchendused m\u00f5lemalt t\u00f6\u00f6 float IP-lt). Masterite ja t\u00f6\u00f6 vahel toimub s\u00fcnkroonne replikatsioon. Samuti s\u00e4ilitab klaster teavet kinnitatud ja kinnitatud tehingute kohta (mingeid andmeid ei kao) juhul, kui kaks andmete keskust h\u00e4vivad (kui need ei h\u00e4vi samal ajal).<\/p>\n<p><\/p>\n<p><em>Otsustasin mitte lisada \u00fcksikasjalikku kirjeldust failistruktuurist ja juurutamisest. Kes soovib m\u00e4ngida, v\u00f5ite selle k\u00f5ik lugeda README-s. Toodan ainult automaatse testimise kirjelduse.<\/em><\/p>\n<p><\/p>\n<h1 id=\"sistema-avtomaticheskogo-testirovaniya\">Automaatse testimise s\u00fcsteem<\/h1>\n<p><\/p>\n<p>Klientide vastupidavuse testimiseks, simuleerides erinevaid t\u00f5rkeid, on loodud automaatse testimise s\u00fcsteem. See k\u00e4ivitatakse skripti <code>test\/failure<\/code>. Skript v\u00f5ib v\u00f5tta parameetritena klastrite numbrid, mida soovite testida. N\u00e4iteks see k\u00e4sk:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">test\/failure 2 3<\/code><\/pre>\n<p><\/p>\n<p>testib ainult teist ja kolmandat klastrit. Kui parameetreid ei ole m\u00e4\u00e4ratud, testitakse k\u00f5iki klasse. K\u00f5iki klasse testitakse paralleelselt ja tulemused kuvatakse tmuxi paneelil. Tmux kasutab p\u00fchendatud tmux serverit, seega saab skripti k\u00e4ivitada ka vaikimisi tmuxist, mille tulemuseks on sisemine tmux. Soovitan kasutada terminali suure akna ja v\u00e4ikese fontiga. Enne testimise alustamist taastatakse k\u00f5ik virtuaalmasinad r\u00e4\u00e4kima hetkel, mil skript l\u00f5ppes. <code>setup<\/code>.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"PostgreSQL ja Pacemakeri p\u00f5hjal t\u00f6\u00f6tavate vigadeta klastrite modelleerimine\" src=\"\/wp-content\/uploads\/2020\/08\/b546bab1ebbbe365991e1ff3d1667237.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Terminal on jagatud veergudeks, mis vastavad testitavatele klastritele, vaikimisi on neid neli (nagu ekraanipildil). Veergude sisu kirjeldan Tuchanka2 n\u00e4itel. Paneelid ekraanipildil on numeeritud:<\/p>\n<p><\/p>\n<ol>\n<li>Siin kuvatakse testide statistika. Veerud:\n<ul>\n<li><strong>failure<\/strong> \u2014 testi nimi (skripti funktsioon), mis simuleerib rikete esinemist.<\/li>\n<li><strong>reaction<\/strong> \u2014 keskmine ajavahemik sekundites, mille jooksul klaster taastab oma t\u00f6\u00f6korrasoleku. Mitu korda m\u00f5\u00f5detakse alates skripti k\u00e4ivitamisest, mis simuleerib riket, kuni hetkeni, mil klaster taastab oma t\u00f6\u00f6korrasoleku ja suudab j\u00e4tkata teenuste osutamist. Kui aeg on v\u00e4ga v\u00e4ike, n\u00e4iteks kuus sekundit (nagu tuvastatakse mitme orja (Tuchanka3 ja Tuchanka4) korral), t\u00e4hendab see, et rike toimus as\u00fcnkroonse orja peal ja ei m\u00f5jutanud t\u00f6\u00f6korrasolekut, klastris ei toimunud olekumuutusi.<\/li>\n<li><strong>deviatsioon<\/strong> \u2014 n\u00e4itab v\u00e4\u00e4rtuse hajuvust (t\u00e4psust) <strong>reaction<\/strong> meetodi \"standardne deviatsioon\" abil.<\/li>\n<li><strong>arv<\/strong> \u2014 mitu korda on see test l\u00e4bi viidud.<\/li>\n<\/ul>\n<\/li>\n<li>L\u00fchiajalugu v\u00f5imaldab hinnata, millega klaster praegu tegeleb. Kuvatakse iteratsiooni (testi) number, ajatempli ja operatsiooni nimi. Liigne kestus (&gt; 5 minutit) n\u00e4itab v\u00f5imalikke probleeme.<\/li>\n<li><strong>s\u00fcda<\/strong> (s\u00fcda) \u2014 praegune aeg. Visuaalseks hindamiseks t\u00f6\u00f6korrasolekut <em>meistri<\/em> tema tabelisse kirjutatakse pidevalt praegune aeg, kasutades meistri float IP-d. Edu korral kuvatakse tulemus selles paneelis.<\/li>\n<li><strong>l\u00f6\u00f6k<\/strong> (puls) \u2014 \"praegune aeg\", mis varem oli skriptiga salvestatud <strong>s\u00fcda<\/strong> masterisse, n\u00fc\u00fcd loetakse <em>orjast<\/em> tema float IP kaudu. See v\u00f5imaldab visuaalselt hinnata orja ja replikeerimise t\u00f6\u00f6kindlust. Tuchanka1-s ei ole orje, kellel on float IP (ei ole orje, kes teenust osutavad), kuid seal on kaks instantsi (DB), seega n\u00e4idatakse siin mitte <strong>l\u00f6\u00f6k<\/strong>, ja <strong>s\u00fcda<\/strong> teise instantsi.<\/li>\n<li>Klastri oleku j\u00e4lgimine utiliidi <code>pcs mon<\/code>. N\u00e4itab struktuuri, ressursside jaotust s\u00f5lmedes ja muud kasulikku teavet.<\/li>\n<li>Siin kuvatakse s\u00fcsteemi j\u00e4lgimine iga virtuaalmasina kohta klastris. Neid paneele v\u00f5ib olla rohkem \u2014 sama palju kui klastris on virtuaalmasinaid. Kaks diagrammi <em>CPU koormus<\/em> (virtuaalmasinatel on kaks protsessorit), virtuaalmasina nimi, <em>S\u00fcsteemi koormus<\/em> (tuntud kui Load Average, kuna see on keskmine 5, 10 ja 15 minuti jooksul), andmed protsesside kohta ja m\u00e4lu jaotus.<\/li>\n<li>Skripti j\u00e4lgimine, mis teostab testimist. Viga korral \u2014 ootamatu katkestamine v\u00f5i l\u00f5putu ooteaeg \u2014 siin on v\u00f5imalik n\u00e4ha selle k\u00e4itumise p\u00f5hjust.<\/li>\n<\/ol>\n<p><\/p>\n<p>Testimine toimub kahes etapis. Esiteks k\u00e4ib skript l\u00e4bi k\u00f5ik testide variandid, valides juhuslikult virtuaalmasina, kus seda testi rakendada. Seej\u00e4rel toimub l\u00f5putu testimisring, kus virtuaalmasinad ja t\u00f5rked valitakse iga kord juhuslikult. Skripti \u00e4kiline l\u00f5petamine (alumine riba) v\u00f5i l\u00f5putu ootamisring millegi jaoks (&gt; 5 minutit \u00fche operatsiooni sooritamiseks, mida on n\u00e4ha j\u00e4lgimises) viitab sellele, et m\u00f5ni test selle klastris on eba\u00f5nnestunud.<\/p>\n<p><\/p>\n<p>Iga test koosneb j\u00e4rgmistest toimingutest:<\/p>\n<p><\/p>\n<ol>\n<li>Funktsiooni k\u00e4ivitamine, mis simuleerib t\u00f5rget.<\/li>\n<li><strong>Valmis?<\/strong> \u2014 ootamine, kuni klaster taastub (kui k\u00f5ik teenused on saadaval).<\/li>\n<li>Klastri taastumise ooteaeg on n\u00e4idatud (<em>reaction<\/em>).<\/li>\n<li><strong>Paranda<\/strong> \u2014 klaster \"parandatakse\". P\u00e4rast seda peab see naasma t\u00e4ielikult t\u00f6\u00f6olekusse ja olema valmis j\u00e4rgmiseks t\u00f5rkeks.<\/li>\n<\/ol>\n<p><\/p>\n<p>Siin on testide nimekiri koos kirjeldustega, mida need teevad:<\/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>OutOfSpace<\/strong>: t\u00e4idab k\u00f5vaketta. Kuid test on pigem s\u00fcmboolne, arvestades v\u00e4hest koormust, mis testimise k\u00e4igus tekib. K\u00f5vaketta t\u00e4itumisel PostgreSQL tavaliselt ei crash'i.<\/li>\n<li><strong>Postgres-KILL<\/strong>: tapab PostgreSQL k\u00e4suga <code>killall -KILL postgres<\/code>.<\/li>\n<li><strong>Postgres-STOP<\/strong>: peatab PostgreSQL k\u00e4suga <code>killall -STOP postgres<\/code>.<\/li>\n<li><strong>PowerOff<\/strong>: \u201el\u00fclitab v\u00e4lja\u201c virtuaalmasina k\u00e4suga <code>VBoxManage controlvm &quot;\u0432\u0438\u0440\u0442\u0443\u0430\u043b\u043a\u0430&quot; poweroff<\/code>.<\/li>\n<li><strong>Reset<\/strong>: taask\u00e4ivitab virtuaalmasina k\u00e4suga <code>VBoxManage controlvm &quot;\u0432\u0438\u0440\u0442\u0443\u0430\u043b\u043a\u0430&quot; reset<\/code>.<\/li>\n<li><strong>SBD-STOP<\/strong>: peatab SBD daemoni k\u00e4suga <code>killall -STOP sbd<\/code>.<\/li>\n<li><strong>ShutDown<\/strong>: saadab SSH kaudu virtuaalmasinale k\u00e4su <code>systemctl poweroff<\/code>, s\u00fcsteem l\u00f5petab t\u00f6\u00f6 korrektsetelt.<\/li>\n<li><strong>UnLink<\/strong>: v\u00f5rgus eraldamine, k\u00e4sk <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>: sel juhul testimine l\u00f5petatakse, tmux suletakse, virtuaalmasinad v\u00e4lja l\u00fclitatakse.<\/p>\n<p><\/p>\n<h1 id=\"vyyavlennye-pri-testirovanii-problemy\">Testimise k\u00e4igus tuvastatud probleemid<\/h1>\n<p><\/p>\n<ul>\n<li>\n<p>Praegu tuleb valida kas heli v\u00f5i suspend\/resume. Ootame, kuni mooduli autor funktsionaalsuse l\u00f5petab. <em>watchdog daemon sbd<\/em> t\u00f6\u00f6tleb j\u00e4lgitavate daemonite peatamist, kuid mitte nende hangumist. Ja seet\u00f5ttu ei toimu vigade korrektselt t\u00f6\u00f6tlemine, mis viib hangumisele vaid <em>Corosync<\/em> ja <em>Pacemakeri<\/em>, kuid mitte peatades <em>sbd<\/em>. Kontrollimiseks <em>Corosync<\/em> juba olemas. <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/ClusterLabs\/sbd\/pull\/83\"><strong>PR#83<\/strong> (GitHubis on <em>sbd<\/em>)<\/a><\/noindex>, vastu v\u00f5etud haruks <em>master<\/em>. Lubati (PR#83) lubati, et ka Pacemaker jaoks on midagi sarnast tulemas, loodan, et <em>RedHat 8<\/em> teevad. Kuid sellised \u201evead\u201c on teoreetilised, neid on lihtne kunstlikult j\u00e4rele teha, n\u00e4iteks <code>killall -STOP corosync<\/code>, kuid neid ei esine kunagi reaalses elus.<\/p>\n<p>\n<\/li>\n<li>\n<p>U <em>Pacemakeri<\/em> versioonis <em>CentOS 7<\/em> vale seadistus <em>sync_timeout<\/em> on <em>quorum device<\/em>, mille tulemusena <noindex><a rel=\"nofollow\" href=\"https:\/\/lists.clusterlabs.org\/pipermail\/users\/2019-August\/026145.html\">kui \u00fcks s\u00f5lm eba\u00f5nnestus, taask\u00e4ivitati teise s\u00f5lm teatud t\u00f5en\u00e4osusega<\/a><\/noindex>, kuhu eelnevalt peaksime liikuma. See lahendati suurendamisega <em>sync_timeout<\/em> on <em>quorum device<\/em> paigaldamise ajal (skriptis <code>setup\/setup1<\/code>). See parandamine ei olnud arendajate poolt vastu v\u00f5etud <em>Pacemakeri<\/em>, selle asemel lubasid nad \u00fcmber kujundada infrastruktuuri selliselt (mingil m\u00e4\u00e4ral ebamugaval tulevikus), et see ajutine seade arvutatakse automaatselt.<\/p>\n<p>\n<\/li>\n<li>\n<p>Kui andmebaasi seadistamisel on m\u00e4rgitud, et <code>LC_MESSAGES<\/code> (teksti s\u00f5numid) v\u00f5ivad kasutada Unicode'i, n\u00e4iteks <code>ru_RU.UTF-8<\/code>, siis kui see k\u00e4ivitatakse <em>postgres<\/em> keskkonnas, kus locale ei ole UTF-8, n\u00e4iteks t\u00fchjas keskkonnas (siin <em>pacemaker<\/em>+<em>pgsqlms<\/em>(paf) k\u00e4ivitab <em>postgres<\/em>), siis <noindex><a rel=\"nofollow\" href=\"https:\/\/www.postgresql.org\/message-id\/13FE0F7C-5140-499C-8C2E-0BE64BC3A48B%40ya.ru\">logis UTF-8 t\u00e4hekeste asemel on k\u00fcsim\u00e4rgiks<\/a><\/noindex>. PostgreSQL arendajad ei suutnud kokku leppida, mida sel juhul teha. Seda saab m\u00f6\u00f6duda, tuleb seada <code>LC_MESSAGES=en_US.UTF-8<\/code> andmebaasi (DB) konfiguratsiooni (loomise) ajal.<\/p>\n<p>\n<\/li>\n<li>\n<p>Kui on seadistatud wal_receiver_timeout (vaikimisi 60 s), siis PostgreSQL-STOP testi k\u00e4igus klastrites tuchanka3 ja tuchanka4 <noindex><a rel=\"nofollow\" href=\"https:\/\/www.postgresql.org\/message-id\/60590EC6-4062-4F25-A49C-3948ED2A7D47%40ya.ru\">ei toimu replikatsiooni uuesti\u00fchendamist uue meistriga.<\/a><\/noindex>Replikatsioon on seal s\u00fcntaktiline, seega peatub mitte ainult t\u00f6\u00f6taja, vaid ka uus meister. See lahendatakse, seadistades wal_receiver_timeout=0 PostgreSQL-i seadistamisel.<\/p>\n<p>\n<\/li>\n<li>\n<p>Harva on t\u00e4heldatud PostgreSQL-i replikatsiooni seiskumist ForkBomb testis (m\u00e4luprobleemide t\u00f5ttu). <noindex><a rel=\"nofollow\" href=\"https:\/\/www.postgresql.org\/message-id\/60590EC6-4062-4F25-A49C-3948ED2A7D47%40ya.ru\">P\u00e4rast ForkBombi v\u00f5ivad t\u00f6\u00f6tajad vahel mitte uuesti \u00fchenduda uue meistriga.<\/a><\/noindex>Sellist olukorda olen kohanud ainult klastrites tuchanka3 ja tuchanka4, kus s\u00fcntaktiline replikatsioon p\u00f5hjustas meistri seiskumise. Probleem lahendub ise aega m\u00f6\u00f6da (umbes kahe tunni p\u00e4rast). Vajalik on t\u00e4iendav uurimine, et see lahendada. S\u00fcmptomid sarnanevad varasema probleemiga, mis on p\u00f5hjustatud muust p\u00f5hjusest, kuid sama tagaj\u00e4rjega.<\/p>\n<p>\n<\/li>\n<\/ul>\n<p><\/p>\n<p>Krogani pilt on saadud <noindex><a rel=\"nofollow\" href=\"http:\/\/fav.me\/d8fo42n\">Deviant Art<\/a><\/noindex> autori loal:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"PostgreSQL ja Pacemakeri p\u00f5hjal t\u00f6\u00f6tavate vigadeta klastrite modelleerimine\" src=\"\/wp-content\/uploads\/2020\/08\/ded1ead387814d97d84d0fb89e025386.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Allikas: <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 4.9.10 - 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, \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\" \/>\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\/et\/blog\/administrirovanie\/modelirovanie-otkazoustojchivyh-klasterov-na-baze-postgresql-i-pacemaker\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.10\" \/>\n\t\t<meta property=\"og:locale\" content=\"et_EE\" \/>\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, \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\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/et\/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\udd47PostgreSQL ja Pacemakeri p\u00f5histe rikkevastaste klastrite simuleerimine | ProHoster","description":"Sissejuhatus M\u00f5ni aeg tagasi said mulle \u00fclesanne arendada PostgreSQL jaoks rikkevastane klaster, mis t\u00f6\u00f6tab mitmes andmekeskuses, \u00fchendatud \u00fches linnas \u00fclikiire tegumiga, ja suudab taluda \u00fche andmekeskuse riket (n\u00e4iteks voolukatkestust). Rikkevastutuse tagamiseks valisin tarkvara Pacemaker, kuna see on RedHati ametlik lahendus rikkevastaste klastrite loomisel. Selle headuseks on see, et","canonical_url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/modelirovanie-otkazoustojchivyh-klasterov-na-baze-postgresql-i-pacemaker","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"et_EE","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, \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","og:url":"https:\/\/prohoster.info\/et\/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"},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/92570","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/comments?post=92570"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/92570\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media\/92571"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media?parent=92570"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/categories?post=92570"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/tags?post=92570"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}