{"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 Pacemaker p\u00f5hinevate t\u00f5rkeaatust peetavate 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 seisis mulle \u00fclesanne luua talitlush\u00e4irete taluv klaster, <noindex><a rel=\"nofollow\" href=\"https:\/\/www.postgresql.org\">PostgreSQL<\/a><\/noindex>, mis t\u00f6\u00f6tab mitmes andmekeskuses, \u00fchendatud kiudoptilise kaabli kaudu \u00fche linna piires, ja mis suudaks taluda talitlush\u00e4iret (n\u00e4iteks elektrikatkestust) \u00fches andmekeskuses. Tarkvara, mis vastutab talitlush\u00e4irete taluvuse eest, on valitud <noindex><a rel=\"nofollow\" href=\"https:\/\/clusterlabs.org\">Pacemaker<\/a><\/noindex>, kuna see on ametlik lahendus RedHat'ilt talitlush\u00e4irete taluvate klastrite loomiseks. Selle eelisteks on, et RedHat pakub sellele tuge ja et see lahendus on universaalne (modulaarne). Selle abil saab tagada talitlush\u00e4irete taluvuse mitte ainult PostgreSQL-le, vaid ka muudele teenustele, kasutades kas standardmooduleid v\u00f5i luues neid vastavalt konkreetsetele vajadustele.<\/p>\n<p><\/p>\n<p>Selle lahenduse kohta tekkis \u00f5igustatud k\u00fcsimus: kui talitlush\u00e4irete taluv on tegelikult talitlush\u00e4irete taluv klaster? Selle uurimiseks olen loonud testimisstandardi, mis simuleerib erinevaid talitlush\u00e4ireid klastrite s\u00f5lmedes, ootab taastumist, taastab talitlush\u00e4irenenud s\u00f5lme ja j\u00e4tkab testimist ts\u00fcklis. Alguses kandis see projekt nime hapgsql, kuid aja jooksul hakkas meeldima nimi, kus on ainult \u00fcks t\u00e4ish\u00e4\u00e4lik. Seet\u00f5ttu hakkan talitlush\u00e4irete taluvate andmebaaside (ja nendele viitava float IP) nimetama <strong>krogan<\/strong> (videom\u00e4ngu tegelane, kellel on k\u00f5ik olulised organid dubleeritud), ja s\u00f5lmed, klastrid ja kogu projekt \u2013 <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\">ava projekt avatud l\u00e4htekoodiga kogukonnale MIT litsentsi alusel.<\/a><\/noindex>README t\u00f5lgitakse peagi inglise keelde (sest oodatakse, et peamised kasutajad on Pacemakeri ja PostgreSQL'i arendajad), ja vana vene versioon README-st otsustasin kujundada (osaliselt) selle artikli kujul.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"PostgreSQL ja Pacemaker p\u00f5hinevate t\u00f5rkeaatust peetavate 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 seadistatakse virtuaalmasinates <noindex><a rel=\"nofollow\" href=\"https:\/\/www.virtualbox.org\">VirtualBox<\/a><\/noindex>. Kokku seadistatakse 12 virtuaalmasinat (kokku 36GiB), mis moodustavad 4 talitlush\u00e4irete taluvat klastrit (erinevad variandid). Esimesed kaks klastrit koosnevad kahest PostgreSQL serverist, mis asuvad erinevates andmekeskustes, ja \u00fchine server <em>witness<\/em> c <strong>quorum device<\/strong> (mis asub odavas virtuaalmasinas kolmandas andmekeskuses), mis lahendab m\u00e4\u00e4ramatuse <strong>50%\/50%<\/strong>, andes oma h\u00e4\u00e4le \u00fche poole kasuks. Kolmas klaster asub kolmes andmekeskuses: \u00fcks peamine, kaks alamk\u00e4sku, ilma <strong>quorum device<\/strong>. Neljas kluster koosneb neljast PostgreSQL serverist, kaks igas andmekeskuses: \u00fcks peamine, teised koopiad, ja kasutab samuti <em>witness<\/em> c <strong>quorum device<\/strong>. Neljas talub kahe serveri v\u00f5i \u00fche andmekeskuse t\u00f5rget. Seda lahendust saab vajadusel laiendada suurema arvu koopiaid.<\/p>\n<p><\/p>\n<p>Aja t\u00e4psuse teenus <noindex><a rel=\"nofollow\" href=\"https:\/\/www.ntp.org\">ntpd<\/a><\/noindex> on samuti konfigureeritud t\u00f6\u00f6kindluse tagamiseks, aga seal kasutatakse <code>ntpd<\/code> (<em>orphan mode<\/em>). \u00dchine server <em>witness<\/em> t\u00f6\u00f6tab kesksena NTP-serverina, jagades oma aega k\u00f5ikidele klustereile, nii et k\u00f5ik serverid on omavahel s\u00fcnkroniseeritud. Kui <em>witness<\/em> \u00fcks neist puruneb v\u00f5i isoleeritakse, hakkab klusterist \u00fcks serveritest oma aega jagama (kliendi sees). T\u00e4iendav vahem\u00e4letav <strong>HTTP proxy<\/strong> on samuti seadistatud <em>witness<\/em>, mille kaudu saavad teised virtuaalmasinad juurdep\u00e4\u00e4su Yum-repositoritele. Tegelikult on sellised teenused nagu aja t\u00e4psus ja proksi kindlasti paigutatud eraldi serveritele, samas kui katsekeskkonnas on need paigutatud <em>witness<\/em> ainult virtualiseerimise ja ruumi s\u00e4\u00e4stmiseks.<\/p>\n<p><\/p>\n<h1 id=\"versii\">Versioonid<\/h1>\n<p><\/p>\n<p>v0. T\u00f6\u00f6tab CentOS 7 ja PostgreSQL 11 peal VirtualBox 6.1.<\/p>\n<p><\/p>\n<h1 id=\"struktura-klasterov\">Klustrite struktuur<\/h1>\n<p><\/p>\n<p>K\u00f5ik klustid on m\u00f5eldud paigutamiseks mitmes andmekeskuses, \u00fchendatud \u00fchte lamedasse v\u00f5rku ja peavad taluma \u00fche andmekeskuse t\u00f5rget v\u00f5i v\u00f5rgu eraldamist. Seet\u00f5ttu <strong>teostada<\/strong> kasutatakse kaitseks <strong>split-brain<\/strong> standardeid Pacemakeri tehnoloogia, mida nimetatakse <em>STONITH<\/em> (Shoot The Other Node In The Head) v\u00f5i <em>fencing<\/em>. Selle p\u00f5hiolemus: kui klusteri s\u00f5lmed hakkavad kahtlema, et m\u00f5ne s\u00f5lmega on midagi valesti, n\u00e4iteks ei vasta v\u00f5i k\u00e4itub eba\u00f5igesti, siis nad sunnivad selle v\u00e4lja l\u00fclitama l\u00e4bi 'v\u00e4listest' seadmetest, nagu IPMI juhtimiskaart v\u00f5i UPS. Kuid see t\u00f6\u00f6tab ainult siis, kui \u00fchel serveri t\u00f5rkel IPMI v\u00f5i UPS j\u00e4tkub t\u00f6\u00f6tamine. Siin on aga planeeritud kaitse m\u00e4rksa katastroofilisema t\u00f5rke eest, kui kogu andmekeskus eba\u00f5nnestub (n\u00e4iteks kaotab toite). Sellises t\u00f5rkes ei t\u00f6\u00f6ta k\u00f5iked <em>stonith<\/em>-seadmed (IPMI, UPS jne) samuti.<\/p>\n<p><\/p>\n<p>Selle asemel p\u00f5hineb s\u00fcsteemi p\u00f5him\u00f5te kvoorumil. K\u00f5igil s\u00f5lmedel on h\u00e4\u00e4l ja t\u00f6\u00f6tada saavad ainult need, kes n\u00e4evad rohkem kui pooli k\u00f5igist s\u00f5lmedest. Seda 'pool+1' nimetatakse <strong>kvoraum<\/strong>. Kui kvoorumit ei saavutata, otsustab s\u00f5lm, et ta on v\u00f5rgu isolatsioonis ja peab oma ressursid v\u00e4lja l\u00fclitama, st see on selline <strong>split-brain kaitse<\/strong>. Kui tarkvara, mis vastutab sellise k\u00e4itumise eest, ei t\u00f6\u00f6ta, siis peab t\u00f6\u00f6le minema watchdog, n\u00e4iteks IPMI alap\u00f5hine.<\/p>\n<p><\/p>\n<p>Kui s\u00f5lmede arv on paarisarv (klaster kahes andmekeskuses), siis v\u00f5ib tekkida nn m\u00e4\u00e4ramatuse olukord <strong>50%\/50%<\/strong> (<em>viisk\u00fcmmend viisk\u00fcmmend<\/em>), kui v\u00f5rgu isoleerimine jagab klastrit t\u00e4pselt pooleks. Seet\u00f5ttu paarisarvude puhul lisandub <strong>quorum device<\/strong> \u2014 mitteressursside intensiivne demon, mida saab k\u00e4ivitada k\u00f5ige odavamas virtuaalmasinas kolmandas andmekeskuses. Ta annab oma h\u00e4\u00e4le \u00fchelt segmendilt (keda ta n\u00e4eb) ja sellega lahendab 50%\/50% m\u00e4\u00e4ramatuse. Server, kus quorum device t\u00f6\u00f6le hakkab, nimetan ma <em>witness<\/em> (terminoloogia repmgr-ist, mulle meeldis see).<\/p>\n<p><\/p>\n<p>Ressursid v\u00f5ivad liikuda \u00fchest kohast teise, n\u00e4iteks rikkest p\u00f5hjustatud serveritest korralike serverite juurde, v\u00f5i s\u00fcsteemiadministraatorite k\u00e4sul. Et kliendid teaksid, kus asuvad vajalikke ressursse (kuhu minna?), kasutatakse <em>ujuvad IP-d<\/em> (<strong>float IP<\/strong>). Need on IP-d, mida Pacemaker saab liikuda s\u00f5lmede vahel (k\u00f5ik asub tasases v\u00f5rgus). Iga\u00fched s\u00fcmboliseerivad ressursi (teenust) ja asuvad seal, kuhu tuleb \u00fchenduda, et p\u00e4\u00e4seda sellele teenusele (meie juhul andmebaasile).<\/p>\n<p><\/p>\n<h2 id=\"tuchanka1-shema-s-uplotneniem\">Tuchanka1 (tiheduse skeem)<\/h2>\n<p><\/p>\n<h3 id=\"struktura\">Struktuur<\/h3>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"PostgreSQL ja Pacemaker p\u00f5hinevate t\u00f5rkeaatust peetavate klastrite modelleerimine\" src=\"\/wp-content\/uploads\/2020\/08\/5651238e36f4af1c32f117191cf30261.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Idee oli see, et meil on palju v\u00e4ikese koormuse andmebaase, mille jaoks pole m\u00f5istlik hoida spetsiaalset slave-serverit hot standby re\u017eiimis lugemiseks (selliste ressursside raiskamine pole vajalik).<\/p>\n<p><\/p>\n<p>Iga andmevariandis on \u00fcks server. Igasse serverisse on paigaldatud kaks PostgreSQL instantsi (PostgreSQL'i terminoloogias nimetatakse neid klusteriteks, kuid segaduse v\u00e4ltimiseks nimetan ma neid instantsideks (sarnaselt teiste andmebaasidega), ja klusteriteks ainult Pacemaker'i klastri). \u00dcks instants t\u00f6\u00f6tab meistrina ning ainult tema pakub teenuseid (ainult temale osutatakse float IP). Teine instants t\u00f6\u00f6tab orjana teises andmevariandis ja hakkab teenuseid pakkuma ainult juhul, kui tema meister peaks rikki minema. Kuna suurema osa ajast osutab teenuseid (t\u00e4idab p\u00e4ringud) ainult \u00fcks kahest instantsist (meister), optimeeritakse serveri ressursid meistri jaoks (m\u00e4lu eraldamine shared_buffers\u2019ile jne), kuid nii, et teisest instantsist j\u00e4tkuks piisavalt ressurssi (kuigi mitte optimaalseks t\u00f6\u00f6tamiseks failis\u00fcsteemi kaudu) \u00fche allika rikke korral. Orjad ei osuta teenuseid (ei t\u00e4ida read only p\u00e4ringuid), kui klastri normaalne t\u00f6\u00f6 toimub, et v\u00e4ltida ressursis\u00f5da meistriga samal masinal.<\/p>\n<p><\/p>\n<p>Kaks s\u00f5lme tekitavad t\u00f5rget ainult as\u00fcnkroonse replikatsiooni korral, kuna s\u00fcnkroonse korral viib orja rike meistri seiskumiseni.<\/p>\n<p><\/p>\n<h3 id=\"otkaz-witness\">Witness'i rike<\/h3>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"PostgreSQL ja Pacemaker p\u00f5hinevate t\u00f5rkeaatust peetavate klastrite modelleerimine\" src=\"\/wp-content\/uploads\/2020\/08\/3c046d13c0c6839de297827ca3a8928b.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Witness'i rike (<em>quorum device<\/em>) k\u00e4sitlen ma ainult klastri Tuchanka1 puhul, teistega on lugu sama. Witness'i rikke korral klastri struktuuris midagi ei muutu, k\u00f5ik t\u00f6\u00f6tab edasi nii nagu varem. Kuid kvoorum suureneb 2-lt 3-le ja seet\u00f5ttu muutuda mis tahes j\u00e4rgmine rike fataalseks klastri jaoks. T\u00f5en\u00e4oliselt tuleb kiiresti parandada.<\/p>\n<p><\/p>\n<h3 id=\"otkaz-tuchanka1\">Tuchanka1 rike<\/h3>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"PostgreSQL ja Pacemaker p\u00f5hinevate t\u00f5rkeaatust peetavate klastrite modelleerimine\" src=\"\/wp-content\/uploads\/2020\/08\/112957293bd682428115e4e93c9f1a96.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u00dche andmevariandi rike Tuchanka1 jaoks. Sellisel juhul <em>witness<\/em> annab oma h\u00e4\u00e4le teisele s\u00f5lmele teises andmevariandis. Seal muutub endine orja meisteriks, mist\u00f5ttu t\u00f6\u00f6tavad m\u00f5lemad meistrid samas serveris ja neid suunatakse m\u00f5lemale nende float IP-le.<\/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 Pacemaker p\u00f5hinevate t\u00f5rkeaatust peetavate klastrite modelleerimine\" src=\"\/wp-content\/uploads\/2020\/08\/c3af368f823fbd580b4ebb14cc87c750.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Klassikaline skeem kahe s\u00f5lmega. \u00dchel t\u00f6\u00f6tab meister, teisel orjand. M\u00f5lemad saavad t\u00e4ita p\u00e4ringuid (orjand ainult read only), seega suunatakse m\u00f5lemale float IP: krogan2 \u2014 meistrile, krogan2s1 \u2014 orjale. T\u00f5rgetaluvus on nii meistril kui orjal.<\/p>\n<p><\/p>\n<p>Kaks s\u00f5lme tekitavad t\u00f5rget ainult as\u00fcnkroonse replikatsiooni korral, sest s\u00fcnkroonse korral viib orja rike meistri seiskumiseni.<\/p>\n<p><\/p>\n<h3 id=\"otkaz-tuchanka2\">Tuchanka2 rike<\/h3>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"PostgreSQL ja Pacemaker p\u00f5hinevate t\u00f5rkeaatust peetavate klastrite modelleerimine\" src=\"\/wp-content\/uploads\/2020\/08\/79bfcaf88c96d8ee16767dcef53741c1.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u00dche andmevariandi rike <em>witness<\/em> h\u00e4\u00e4letab teise poolt. Ainult \u00fches t\u00f6\u00f6tavas andmekeskuses t\u00f5stetakse master ja sellele osutavad m\u00f5lemad float IP: master ja slave. Muidugi peab instants olema seadistatud nii, et tal on piisavalt ressursse (\u00fchenduse piirid jne) samaaegselt v\u00f5tma k\u00f5ik \u00fchendused ja p\u00e4ringud nii masterilt kui slaveilt float IP-lt. See t\u00e4hendab, et normaalses t\u00f6\u00f6korralduses peab tal olema piisav varu piirides.<\/p>\n<p><\/p>\n<h2 id=\"tuchanka4-mnogo-rabov\">Tuchanka4 (palju slave'e)<\/h2>\n<p><\/p>\n<h3 id=\"struktura-2\">Struktuur<\/h3>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"PostgreSQL ja Pacemaker p\u00f5hinevate t\u00f5rkeaatust peetavate klastrite modelleerimine\" src=\"\/wp-content\/uploads\/2020\/08\/17819fd97847f0573d429e422d799bc1.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Juba teine \u00e4\u00e4rmus. On Andmebaase, kuhu tuleb v\u00e4ga palju read-only p\u00e4ringuid (typical case for high-load website). Tuchanka4 on olukord, kus slave'e v\u00f5ib olla kolm v\u00f5i enam, et selliseid p\u00e4ringuid t\u00f6\u00f6delda, kuid siiski mitte liiga palju. Kui slave'e on v\u00e4ga palju, tuleb v\u00e4lja m\u00f5elda hierarhiiline replikatsioonis\u00fcsteem. Minimaalsetel juhtudel (pildil) asub igas kahes andmekeskuses kaks serverit, millel igas on \u00fcks PostgreSQL instants.<\/p>\n<p><\/p>\n<p>Veel \u00fcheks selle skeemi omaduseks on see, et siin on v\u00f5imalik korraldada \u00fcks s\u00fcnkroonse replikatsiooni. See on seadistatud nii, et replikatsioon toimuks, kui v\u00f5imalik, teise andmekeskuse poole, mitte replikale samas andmekeskuses, kus on master. Masterile ja igale slave'ile osutab float IP. H\u00e4sti, slave'ide vahel on vajalik p\u00e4ringute tasakaalustamine mingisuguse <em>sql proxy<\/em>, n\u00e4iteks kliendi poolel. Erinevat t\u00fc\u00fcpi klientidele v\u00f5ib olla vajalik erinev t\u00fc\u00fcp <em>sql proxy<\/em>, ja ainult kliendi arendajad teavad, kellele milline on vajalik. See funktsionaalsus v\u00f5ib olla rakendatud nii v\u00e4list daemonina kui ka kliendi teegina (connection pool) jne. K\u00f5ik see ulatub v\u00e4ljapoole teemat andmebaasi hooldekeskust (hooldus <em>SQL proxy<\/em> saab rakendada s\u00f5ltumatult, koos kliendi hooldusega).<\/p>\n<p><\/p>\n<h3 id=\"otkaz-tuchanka4\">Tuchanka4 rike<\/h3>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"PostgreSQL ja Pacemaker p\u00f5hinevate t\u00f5rkeaatust peetavate klastrite modelleerimine\" src=\"\/wp-content\/uploads\/2020\/08\/e005ae90ffd63abdb272012b94735618.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u00dche andmekeskuse (st kahe serveri) rikke korral h\u00e4\u00e4letab witness teise poolt. Tulemuseks on see, et teises andmekeskuses toimivad kaks serverit: \u00fchel t\u00f6\u00f6tab master ja sellele osutab master float IP (read-write p\u00e4ringute vastuv\u00f5tmiseks); teisel serveril t\u00f6\u00f6tab slave s\u00fcnkroonse replikatsiooniga ja sellele osutab \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 ei ole k\u00f5ik, vaid ainult \u00fcks. Ja selle \u00f5ige t\u00f6\u00f6 tagamiseks on vajalik, et <em>sql proxy<\/em> suun\u00e4hkuna k\u00f5ik taotlused ainus alles j\u00e4\u00e4nud float IP; ja kui <em>sql proxy<\/em> ei, siis saab loetleda k\u00f5ik float IP orjad komadega URL-is \u00fchendamiseks. Sel juhul <em>libpq<\/em> \u00fchendus on esimese t\u00f6\u00f6korras oleva IP-ga, nii on see automaatse testimise s\u00fcsteemis seadistatud. V\u00f5ib-olla muudes teekides, n\u00e4iteks JDBC-s, ei pruugi see toimida ja on vajalik <em>sql proxy<\/em>. See on nii seadistatud, kuna float IP orjadele on seadistatud keeld \u00fcheaegselt \u00fches serveris t\u00f5usta, et nad saaksid v\u00f5rdselt jaotuda orjade serverite vahel, kui neid t\u00f6\u00f6tab mitu.<\/p>\n<p><\/p>\n<p>Teine: isegi andmekeskuse rikke korral s\u00e4ilib s\u00fcnkroonne replikatsioon. Ja isegi kui toimub teine rike, see t\u00e4hendab, et j\u00e4\u00e4nud andmekeskuses rikki l\u00e4heb \u00fcks kahest serverist, kaob klaster ehk ei paku teenuseid, kuid siiski s\u00e4ilitab teavet k\u00f5igi kinnitatud tehingute kohta, mille kohta ta andis kinnituse (teabe kaotust teise rikke korral ei toimu).<\/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 Pacemaker p\u00f5hinevate t\u00f5rkeaatust peetavate klastrite modelleerimine\" src=\"\/wp-content\/uploads\/2020\/08\/e11f9884b92fe20a63b5080ae8c7f82b.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>See on klaster olukorraks, kus on kolm t\u00e4ielikult toimivat andmekeskust, igas neist on t\u00e4ielikult t\u00f6\u00f6tav andmebaasi server. Sellisel juhul <em>quorum device<\/em> pole vajalik. \u00dches andmekeskuses t\u00f6\u00f6tab master, kahes teises - orjad. Replikatsioon on s\u00fcnkroonne, t\u00fc\u00fcpi ANY (slave1, slave2), see t\u00e4hendab, et kliendile saadetakse kinnitamine, kui \u00fcks orjadest esmalt vastab, et ta on kinnituse vastu v\u00f5tnud. Ressursside jaoks on m\u00e4\u00e4ratud \u00fcks float IP jaoks master ja kaks orjade jaoks. Erinevalt Tuchanka4-st on k\u00f5ik kolm float IP talitlush\u00e4irekindlad. Read-only SQL-p\u00e4ringute tasakaalustamiseks v\u00f5ib kasutada <em>sql proxy<\/em> (eraldi talitlush\u00e4irekindlusega) v\u00f5i jagada poolele klientidest \u00fcks orja float IP ja teisele poolele teine.<\/p>\n<p><\/p>\n<h3 id=\"otkaz-tuchanka3\">Tuchanka3 talitlush\u00e4ire<\/h3>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"PostgreSQL ja Pacemaker p\u00f5hinevate t\u00f5rkeaatust peetavate klastrite modelleerimine\" src=\"\/wp-content\/uploads\/2020\/08\/1e61158be3c23742384d3621e8f7896b.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u00dche andmekeskuse talitlush\u00e4ire korral j\u00e4\u00e4b kaks. \u00dches on master ja masteri float IP, teises - orja ja m\u00f5lemad orjade float IP (instansil peab olema kahekordne ressursside varu, et vastu v\u00f5tta k\u00f5ik \u00fchendused m\u00f5lemalt orja float IP-lt). Masterite ja orja vahel on s\u00fcnkroonne replikatsioon. Klaster s\u00e4ilitab samuti teavet kinnitatud ja kinnitatud tehingute kohta (teabe kaotust ei toimu) kahe andmekeskuse h\u00e4vitamise korral (kui need ei h\u00e4vinud samaaegselt).<\/p>\n<p><\/p>\n<p><em>Maailma struktuuri ja juurutamise p\u00f5hjalikku kirjeldust ma siia ei pane. Kes soovib katsetada, v\u00f5ib selle k\u00f5ik lugeda README-st. Toetan 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>Klusterite t\u00f5rkevastupidavuse testimiseks, simuleerides erinevaid t\u00f5rkeid, on loodud automaatse testimise s\u00fcsteem. See k\u00e4ivitatakse skripti kaudu <code>test\/failure<\/code>. Skript v\u00f5ib v\u00f5tta parameetritena klusterite numbrid, mida soovitakse 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 klusterit. Kui parameetreid ei ole, siis testitakse k\u00f5iki klustreid. K\u00f5iki klustreid testitakse paralleelselt ja tulemus kuvatakse tmux-i paneelis. Tmux kasutab eraldi tmux-serverit, seega saab skripti k\u00e4ivitada default tmux-ist, tekib sissek\u00f5rvalne tmux. Soovitan kasutada terminali suure aknaga ja v\u00e4ikese fondiga. Testimise alguses taastatakse k\u00f5ik virtuaalmasinad skripti l\u00f5pulej\u00f5udmise hetke snapshotile. <code>setup<\/code>.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"PostgreSQL ja Pacemaker p\u00f5hinevate t\u00f5rkeaatust peetavate 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 testitavate klusterite arvu j\u00e4rgi, vaikimisi (kuid fotol) on neid neli. Veergude sisu selgitab Tuchanka2 n\u00e4itel. Paneelid fotol on nummerdatud:<\/p>\n<p><\/p>\n<ol>\n<li>Siin kuvatakse testide statistika. Veerud:\n<ul>\n<li><strong>failure<\/strong> \u2014 testi (funktsiooni skriptis) nimetus, mis simuleerib t\u00f5rket.<\/li>\n<li><strong>reaction<\/strong> \u2014 keskmine aeg sekundites, mille jooksul kluster taastab oma t\u00f6\u00f6korrasoleku. Mitu m\u00f5\u00f5detakse skripti k\u00e4ivitamise algusest, mis simuleerib t\u00f5rget, kuni hetkeni, mil kluster taastab oma t\u00f6\u00f6korrasoleku ja suudab j\u00e4tkata teenuste osutamist. Kui aeg on v\u00e4ga l\u00fchike, n\u00e4iteks kuus sekundit (see juhtub mitme orjaga klusterites (Tuchanka3 ja Tuchanka4)), t\u00e4hendab see, et t\u00f5rge sattus as\u00fcnkroonsesse orja ja ei m\u00f5jutanud t\u00f6\u00f6v\u00f5imet, klustereis ei toimunud olekumuutusi.<\/li>\n<li><strong>deviation<\/strong> \u2014 n\u00e4itab v\u00e4\u00e4rtuse hajuvust (t\u00e4psust) <strong>reaction<\/strong> \u00abstandardh\u00e4lbe\u00bb meetodit.<\/li>\n<li><strong>count<\/strong> \u2014 kui sageli on seda testi teostatud.<\/li>\n<\/ul>\n<\/li>\n<li>Kokkuv\u00f5tte p\u00e4evik v\u00f5imaldab hinnata, millega kluster praegu tegeleb. Kuvatakse iteratsiooni (testi) number, ajatemple ning operatsiooni nimetus. Liialt pikk t\u00e4itmine (&gt; 5 minutit) viitab mingile probleemile.<\/li>\n<li><strong>heart<\/strong> (s\u00fcda) - praegune aeg. T\u00f6\u00f6v\u00f5ime hindamiseks visuaalne \u00fclevaade <em>meistrid<\/em> tema tabelisse kirjutatakse pidevalt praegune aeg, kasutades meistri float IP-d. Edu korral kuvatakse tulemus selles paneelis.<\/li>\n<li><strong>beat<\/strong> (pulss) - \"praegune aeg\", mis on varem skripti poolt salvestatud <strong>heart<\/strong> meistrisse, n\u00fc\u00fcd loetakse <em>orjast<\/em> tema float IP kaudu. See v\u00f5imaldab visuaalselt hinnata orja t\u00f6\u00f6v\u00f5imet ja replikatsiooni. Tuchanka1-s ei ole orje, kellel oleks float IP (ei ole orje, kes teenuseid pakuvad), kuid seal on kaks instantsi (DB), seega kuvatakse siin mitte <strong>beat<\/strong>, vaid <strong>heart<\/strong> teise instantsi.<\/li>\n<li>Klastri oleku j\u00e4lgimine utiliidi kaudu <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 klastris oleva virtuaalmasina kohta. Selliseid paneele v\u00f5ib olla rohkem - nii palju virtuaalmasinaid, kui klastril on. Kaks graafikut <em>CPU Load<\/em> (virtuaalmasinatel on kaks protsessorit), virtuaalmasina nimi, <em>System Load<\/em> (nimetatakse Load Average, sest see on keskmine 5, 10 ja 15 minuti jooksul), protsesside andmed ja m\u00e4lu jaotumine.<\/li>\n<li>Skripti j\u00e4lgimine, mis teostab testimist. Rikkumise korral - \u00e4kilise t\u00f6\u00f6 katkemise v\u00f5i l\u00f5putu ootamise ts\u00fckli korral - saab siit n\u00e4ha selle k\u00e4itumise p\u00f5hjust.<\/li>\n<\/ol>\n<p><\/p>\n<p>Testimine toimub kahes etapis. Esmalt l\u00e4bib skript k\u00f5ik testiliigid, valides juhuslikult virtuaalmasina, millele test rakendada. Seej\u00e4rel toimub l\u00f5pmatu testimists\u00fckkel, virtuaalsed masinad ja rikkumine valitakse iga kord juhuslikult. Skripti \u00e4kiline l\u00f5petamine (alumine paneel) v\u00f5i l\u00f5putu ootamise ts\u00fckkel (rohkem kui 5 minuti jooksul \u00fche operatsiooni t\u00e4itmise aeg, see on n\u00e4htav j\u00e4lgimises) n\u00e4itab, et m\u00f5ni test selle klastris eba\u00f5nnestus.<\/p>\n<p><\/p>\n<p>Iga test koosneb j\u00e4rgmiste toimingute seeriast:<\/p>\n<p><\/p>\n<ol>\n<li>Funktsiooni k\u00e4ivitamine, mis simuleerib riket.<\/li>\n<li><strong>Valmis?<\/strong> - klassi t\u00f6\u00f6v\u00f5ime taastumise ootamine (kui k\u00f5ik teenused on saadaval).<\/li>\n<li>Klastri taastumise ooteaeg kuvatakse (<em>reaction<\/em>).<\/li>\n<li><strong>Repair<\/strong> - klass \"parandatakse\". P\u00e4rast seda peaks see naasma t\u00e4ielikult t\u00f6\u00f6v\u00f5imelisse olekusse ja olema valmis j\u00e4rgmisteks riketeks.<\/li>\n<\/ol>\n<p><\/p>\n<p>Siin on nimekiri testidest koos kirjeldusega, mida nad teevad:<\/p>\n<p><\/p>\n<ul>\n<li><strong>ForkBomb<\/strong>: loob \"Out of memory\" fork-bombiga.<\/li>\n<li><strong>OutOfSpace<\/strong>: t\u00e4idab ketast. Kuid test on pigem s\u00fcmboolne, arvestades v\u00e4hest koormust, mis testimise k\u00e4igus tekib; ketta t\u00e4itumisel PostgreSQL tavaliselt ei crash'ita.<\/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>: \"l\u00fclitab v\u00e4lja\" virtuaalmasina k\u00e4suga <code>VBoxManage controlvm \"virtuaalmasin\" poweroff<\/code>.<\/li>\n<li><strong>Reset<\/strong>: taask\u00e4ivitab virtuaalmasina k\u00e4suga <code>VBoxManage controlvm \"virtuaalmasin\" reset<\/code>.<\/li>\n<li><strong>SBD-STOP<\/strong>: peatab SBD deemonit k\u00e4suga <code>killall -STOP sbd<\/code>.<\/li>\n<li><strong>ShutDown<\/strong>: saadab virtuaalmasinale k\u00e4su SSH kaudu <code>systemctl poweroff<\/code>, s\u00fcsteem l\u00f5petab korralikult t\u00f6\u00f6.<\/li>\n<li><strong>UnLink<\/strong>: v\u00f5rgusisene isolatsioon, k\u00e4sk <code>VBoxManage controlvm \"virtuaalmasin\" setlinkstate1 off<\/code>.<\/li>\n<\/ul>\n<p><\/p>\n<p>Testimise l\u00f5petamine kas tavalise tmux k\u00e4suga \"kill-window\" <strong>Ctrl-b &amp;<\/strong>, v\u00f5i k\u00e4suga \"detach-client\". <strong>Ctrl-b d<\/strong>: sellega test l\u00f5petatakse, tmux suletakse, virtuaalmasinad l\u00fclitatakse v\u00e4lja.<\/p>\n<p><\/p>\n<h1 id=\"vyyavlennye-pri-testirovanii-problemy\">Testimisel tuvastatud probleemid<\/h1>\n<p><\/p>\n<ul>\n<li>\n<p>Praegusel hetkel <em>watchdog deemon sbd<\/em> t\u00f6\u00f6tab j\u00e4lgitavate deemonite peatamisega, kuid mitte nende hangumisega. Seet\u00f5ttu k\u00e4ituvad puudused, mis p\u00f5hjustavad ainult hangumist, valesti <em>Corosync<\/em> ja <em>Pacemaker<\/em>, kuid siiski ei hangu <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 <em>sbd<\/em>)<\/a><\/noindex>, vastu v\u00f5etud harusse <em>master<\/em>. Lubati (PR#83), et ka Pacemaker\u2019ile tuleb midagi sarnast, loodan, et <em>RedHat 8<\/em> tehakse. Kuid sellised \"puudused\" on teoreetilised, neid on h\u00f5lbus kunstlikult imiteerida n\u00e4iteks <code>killall -STOP corosync<\/code>, kuid kunagi ei esine need reaalses elus.<\/p>\n<p>\n<\/li>\n<li>\n<p>Uus <em>Pacemaker<\/em> versioonis <em>CentOS 7<\/em> on vale <em>sync_timeout<\/em> on <em>quorum device<\/em>, mille tagaj\u00e4rjel <noindex><a rel=\"nofollow\" href=\"https:\/\/lists.clusterlabs.org\/pipermail\/users\/2019-August\/026145.html\">\u00fche s\u00f5lme t\u00f5rke korral oli teise s\u00f5lme taask\u00e4ivitamine teatud t\u00f5en\u00e4osusega<\/a><\/noindex>, kuhu meistrilt pidanuks minema. Probleem lahendati <em>sync_timeout<\/em> on <em>quorum device<\/em> installeerimise k\u00e4igus (skriptis <code>setup\/setup1<\/code>). See parandamine ei olnud arendajate poolt vastu v\u00f5etud <em>Pacemaker<\/em>, selle asemel lubati nad infrastruktuuri \u00fcmber kujundada nii, et see ajaks automaatselt v\u00e4lja selle ajutise vahe.<\/p>\n<p>\n<\/li>\n<li>\n<p>Kui andmebaasi konfigureerimisel on m\u00e4\u00e4ratud, et <code>LC_MESSAGES<\/code> (tekstis\u00f5numites) v\u00f5ib kasutada Unicode'i, n\u00e4iteks <code>ru_RU.UTF-8<\/code>, siis k\u00e4ivitamisel <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 kuvatakse UTF-8 t\u00e4htede asemel k\u00fcsim\u00e4rgid<\/a><\/noindex>. PostgreSQL arendajad ei j\u00f5udnud kokkuleppele, mida sel juhul teha. See on lahendatav, tuleb paigaldada <code>LC_MESSAGES=en_US.UTF-8<\/code> andmebaasi instantsi konfigureerimisel (loomisel).<\/p>\n<p>\n<\/li>\n<li>\n<p>Kui wal_receiver_timeout on seadistatud (vaikimisi 60s), siis testides PostgreSQL-STOP master'is 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 master'iga<\/a><\/noindex>. Replikatsioon on seal s\u00fcnkroonne, seega peatub mitte ainult t\u00f6\u00f6line, vaid ka uus master. Seda saab v\u00e4ltida, seades wal_receiver_timeout=0 PostgreSQL seadistamisel.<\/p>\n<p>\n<\/li>\n<li>\n<p>Harva olen t\u00e4heldanud PostgreSQL replikatsiooni seiskumist testis ForkBomb (m\u00e4lude \u00fclek\u00fcllus). <noindex><a rel=\"nofollow\" href=\"https:\/\/www.postgresql.org\/message-id\/60590EC6-4062-4F25-A49C-3948ED2A7D47%40ya.ru\">P\u00e4rast ForkBombi ei pruugi t\u00f6\u00f6tajad m\u00f5nikord uuesti uue master'iga \u00fchendada<\/a><\/noindex>. Olen sellist olukorda kohanud ainult klastrites tuchanka3 ja tuchanka4, kus s\u00fcnkroonse replikatsiooni t\u00f5ttu seiskus master. Probleem lahendus ennast m\u00f5ne aja p\u00e4rast (umbes kahe tunni p\u00e4rast). Vajalik on t\u00e4iendav uurimine, et see lahendada. S\u00fcmpptomid sarnanevad varasema veaga, mis on p\u00f5hjustatud muust tegurist, kuid on sama m\u00f5ju.<\/p>\n<p>\n<\/li>\n<\/ul>\n<p><\/p>\n<p>Krogani pildiallikas on <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 Pacemaker p\u00f5hinevate t\u00f5rkeaatust peetavate 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 5.0.1.1 - 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\/et\/blog\/administrirovanie\/modelirovanie-otkazoustojchivyh-klasterov-na-baze-postgresql-i-pacemaker\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\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.\" \/>\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 Pacemaker p\u00f5hinevate k\u00f5rgendatud kaughaldusklastrite modelleerimine | ProHoster","description":"Sissejuhatus M\u00f5ni aeg tagasi anti mulle \u00fclesanne v\u00e4lja t\u00f6\u00f6tada PostgreSQL jaoks k\u00f5rgendatud kaughaldusklaster.","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.","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","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"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}]}}