{"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\/hu\/blog\/administrirovanie\/modelirovanie-otkazoustojchivyh-klasterov-na-baze-postgresql-i-pacemaker","title":{"rendered":"Megb\u00edzhat\u00f3 klaszterek modellez\u00e9se PostgreSQL \u00e9s Pacemaker alapokon","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<h1 id=\"vvedenie\">Bevezet\u00e9s<\/h1>\n<p><\/p>\n<p>R\u00e9g\u00f3ta \u00e1ll el\u0151ttem a feladat, hogy kialak\u00edtsak egy megb\u00edzhat\u00f3 klasztert <noindex><a rel=\"nofollow\" href=\"https:\/\/www.postgresql.org\">PostgreSQL<\/a><\/noindex>, amely t\u00f6bb adatk\u00f6zpontban m\u0171k\u00f6dik, egy v\u00e1roson bel\u00fcl optikai k\u00e1bellel \u00f6sszekapcsolva, \u00e9s k\u00e9pes elviselni egy adatk\u00f6zpont le\u00e1ll\u00e1s\u00e1t (p\u00e9ld\u00e1ul \u00e1ramkimarad\u00e1st). A megb\u00edzhat\u00f3s\u00e1g\u00e9rt felel\u0151s szoftverk\u00e9nt a k\u00f6vetkez\u0151t v\u00e1lasztottam: <noindex><a rel=\"nofollow\" href=\"https:\/\/clusterlabs.org\">Pacemaker<\/a><\/noindex>, mivel ez a RedHat hivatalos megold\u00e1sa a megb\u00edzhat\u00f3 klaszterek l\u00e9trehoz\u00e1s\u00e1ra. Az el\u0151nye, hogy a RedHat t\u00e1mogatja, \u00e9s hogy ez egy univerz\u00e1lis (modul\u00e1ris) megold\u00e1s. Ezzel nemcsak a PostgreSQL, hanem m\u00e1s szolg\u00e1ltat\u00e1sok megb\u00edzhat\u00f3s\u00e1ga is biztos\u00edthat\u00f3, ak\u00e1r a standard modulok haszn\u00e1lat\u00e1val, ak\u00e1r specifikus ig\u00e9nyekhez val\u00f3 l\u00e9trehoz\u00e1s\u00e1val.<\/p>\n<p><\/p>\n<p>A megold\u00e1shoz jogos k\u00e9rd\u00e9s mer\u00fclt fel: mennyire megb\u00edzhat\u00f3 lesz a megb\u00edzhat\u00f3 klaszter? Ennek vizsg\u00e1lat\u00e1ra olyan tesztk\u00f6rnyezetet alak\u00edtottam ki, amely k\u00fcl\u00f6nb\u00f6z\u0151 hib\u00e1kat modellez a klaszter csom\u00f3pontjain, v\u00e1rja a munkak\u00e9pess\u00e9g helyre\u00e1ll\u00e1s\u00e1t, rehabilit\u00e1lja a le\u00e1llt csom\u00f3pontot, \u00e9s folytatja a tesztel\u00e9st ciklusban. Eredetileg ezt a projektet hapgsql-nek nevezt\u00e9k, de id\u0151vel unalmass\u00e1 v\u00e1lt sz\u00e1momra a n\u00e9v, amelyben csak egy mag\u00e1nhangz\u00f3 van. \u00cdgy a megb\u00edzhat\u00f3 adatb\u00e1zisokat (\u00e9s az azokhoz tartoz\u00f3 float IP-t) a k\u00f6vetkez\u0151k\u00e9ppen kezdtem h\u00edvni: <strong>krogan<\/strong> (a sz\u00e1m\u00edt\u00f3g\u00e9pes j\u00e1t\u00e9k karaktere, akinek minden fontos szerv\u00e9t megism\u00e9tlik), m\u00edg a csom\u00f3pontokat, klasztereket \u00e9s mag\u00e1t a projektet - <strong>tuchanka<\/strong> (a bolyg\u00f3, ahol a kroganok \u00e9lnek).<\/p>\n<p><\/p>\n<p>Most a vezet\u0151s\u00e9g enged\u00e9lyezte <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/domclick\/tuchanka\">a projekt megnyit\u00e1s\u00e1t az open source k\u00f6z\u00f6ss\u00e9g sz\u00e1m\u00e1ra MIT licenc alatt<\/a><\/noindex>. A README hamarosan angolra lesz ford\u00edtva (mivel v\u00e1rhat\u00f3an a f\u0151 fogyaszt\u00f3k a Pacemaker \u00e9s PostgreSQL fejleszt\u0151i lesznek), a r\u00e9gi orosz README verzi\u00f3t pedig \u00fagy d\u00f6nt\u00f6ttem, hogy r\u00e9szben cikk form\u00e1j\u00e1ban form\u00e1zom.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Megb\u00edzhat\u00f3 klaszterek modellez\u00e9se PostgreSQL \u00e9s Pacemaker alapokon\" 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>A klasztereket virtu\u00e1lis g\u00e9peken <noindex><a rel=\"nofollow\" href=\"https:\/\/www.virtualbox.org\">VirtualBox<\/a><\/noindex>futtatj\u00e1k. \u00d6sszesen 12 virtu\u00e1lis g\u00e9p ker\u00fcl telep\u00edt\u00e9sre (\u00f6sszesen 36GiB), amelyek 4 megb\u00edzhat\u00f3 klasztert alkotnak (k\u00fcl\u00f6nb\u00f6z\u0151 vari\u00e1ci\u00f3k). Az els\u0151 kett\u0151 klaszter k\u00e9t PostgreSQL szerverb\u0151l \u00e1ll, amelyek k\u00fcl\u00f6nb\u00f6z\u0151 adatk\u00f6zpontokban tal\u00e1lhat\u00f3k, \u00e9s egy k\u00f6z\u00f6s szerverb\u0151l, <em>witness<\/em> c <strong>quorum device<\/strong> (olcs\u00f3 virtu\u00e1lis g\u00e9pen a harmadik adatk\u00f6zpontban), amely feloldja a bizonytalans\u00e1got, <strong>50%\/50%<\/strong>, egy szavazatot adva valamelyik f\u00e9lnek. A harmadik klaszter h\u00e1rom adatk\u00f6zpontban m\u0171k\u00f6dik: egy mester, k\u00e9t munk\u00e1s, an\u00e9lk\u00fcl, <strong>quorum device<\/strong>. A negyedik klaszter n\u00e9gy PostgreSQL szerverb\u0151l \u00e1ll, kett\u0151 adatk\u00f6zpontonk\u00e9nt: egy mester \u00e9s a t\u00f6bbi replik\u00e1ns, \u00e9s szint\u00e9n haszn\u00e1lja <em>witness<\/em> c <strong>quorum device<\/strong>. A negyedik elb\u00edr k\u00e9t szerver vagy egy adatk\u00f6zpont meghib\u00e1sod\u00e1s\u00e1t. Ez a megold\u00e1s, ha sz\u00fcks\u00e9ges, nagyobb sz\u00e1m\u00fa replik\u00e1ra is sk\u00e1l\u00e1zhat\u00f3.<\/p>\n<p><\/p>\n<p>Pontos id\u0151szolg\u00e1ltat\u00e1s <noindex><a rel=\"nofollow\" href=\"https:\/\/www.ntp.org\">ntpd<\/a><\/noindex> szint\u00e9n \u00e1tszervez\u00e9sre ker\u00fclt a hibamentess\u00e9g \u00e9rdek\u00e9ben, de ott a leg\u00fajabb m\u00f3dszer tal\u00e1lhat\u00f3 <code>ntpd<\/code> (<em>orphan mode<\/em>). Az \u00e1ltal\u00e1nos szerver <em>witness<\/em> k\u00f6zponti NTP-szerverk\u00e9nt m\u0171k\u00f6dik, megosztva az id\u0151t minden klaszter k\u00f6z\u00f6tt, ez\u00e1ltal szinkroniz\u00e1lva az \u00f6sszes szervert egym\u00e1ssal. Ha <em>witness<\/em> meghib\u00e1sodik vagy elszigetel\u0151dik, akkor az id\u0151t egy klaszterbeli szerver kezdheti megosztani (a klaszteren bel\u00fcl). Az auxiliary cache <strong>HTTP proxy<\/strong> szint\u00e9n fent van <em>witness<\/em>, ezzel a t\u00f6bbi virtu\u00e1lis g\u00e9p hozz\u00e1f\u00e9r az Yum-repozit\u00f3riumokhoz. A val\u00f3s\u00e1gban az olyan szolg\u00e1ltat\u00e1sok, mint a pontos id\u0151 \u00e9s a proxy, val\u00f3sz\u00edn\u0171leg dedik\u00e1lt szervereken lesznek elhelyezve, m\u00edg a bemutat\u00f3 sor\u00e1n <em>witness<\/em> csak a virtu\u00e1lis g\u00e9pek sz\u00e1m\u00e1nak \u00e9s a helynek a megtakar\u00edt\u00e1sa \u00e9rdek\u00e9ben ker\u00fcltek elhelyez\u00e9sre.<\/p>\n<p><\/p>\n<h1 id=\"versii\">Verzi\u00f3k<\/h1>\n<p><\/p>\n<p>v0. M\u0171k\u00f6dik a CentOS 7 \u00e9s PostgreSQL 11 alatt a VirtualBox 6.1-en.<\/p>\n<p><\/p>\n<h1 id=\"struktura-klasterov\">Klaszterek strukt\u00far\u00e1ja<\/h1>\n<p><\/p>\n<p>Minden klaszter a t\u00f6bb adatk\u00f6zpontban val\u00f3 elhelyez\u00e9sre k\u00e9sz\u00fclt, egy lapos h\u00e1l\u00f3zatba egyes\u00edtve, \u00e9s k\u00e9pesnek kell lennie elb\u00edrni egy adatk\u00f6zpont le\u00e1ll\u00e1s\u00e1t vagy h\u00e1l\u00f3zati elszigetelts\u00e9g\u00e9t. Ez\u00e9rt <strong>lehetetlen<\/strong> megv\u00e9deni a <strong>split-brain<\/strong> standard Pacemaker technol\u00f3gi\u00e1val, amit \u00fagy h\u00edvnak <em>STONITH<\/em> (Shoot The Other Node In The Head) vagy <em>fencing<\/em>. L\u00e9nyege, hogy ha a klaszter csom\u00f3pontjai azt gyan\u00edtj\u00e1k, hogy valamelyik csom\u00f3ponttal probl\u00e9ma van, nem v\u00e1laszol vagy helytelen\u00fcl m\u0171k\u00f6dik, akkor k\u00e9nyszer\u00edtetten lekapcsolj\u00e1k k\u00fcls\u0151 eszk\u00f6z\u00f6k, p\u00e9ld\u00e1ul IPMI vagy UPS vez\u00e9rl\u0151 k\u00e1rtya \u00e1ltal. De ez csak akkor m\u0171k\u00f6dik, ha a szerver egypontos le\u00e1ll\u00edt\u00e1sakor az IPMI vagy UPS tov\u00e1bbra is m\u0171k\u00f6dik. Itt viszont a sokkal katasztrof\u00e1lisabb le\u00e1ll\u00e1s v\u00e9delme van tervezve, amikor az eg\u00e9sz adatk\u00f6zpontot le\u00e1ll\u00edtj\u00e1k (p\u00e9ld\u00e1ul \u00e1ramtalan\u00edtj\u00e1k). Ilyen le\u00e1ll\u00e1skor az \u00f6sszes <em>stonith<\/em>-eszk\u00f6z (IPMI, UPS stb.) szint\u00e9n nem fog m\u0171k\u00f6dni.<\/p>\n<p><\/p>\n<p>Ehelyett a rendszer alapja a kv\u00f3rum eszm\u00e9je. Minden csom\u00f3pontnak van szavazati joga, \u00e9s csak azok m\u0171k\u00f6dhetnek, amelyek t\u00f6bb mint a csom\u00f3pontok fel\u00e9t l\u00e1tj\u00e1k. Ezt a mennyis\u00e9get \u201ef\u00e9l+1\u201d-nek h\u00edvj\u00e1k <strong>kv\u00f3rum<\/strong>. Ha a kv\u00f3rum nem \u00e1ll \u00f6ssze, akkor a csom\u00f3pont \u00fagy d\u00f6nt, hogy h\u00e1l\u00f3zati elszigetelts\u00e9gben van, \u00e9s ki kell kapcsolnia az er\u0151forr\u00e1sait, azaz ez egyfajta <strong>v\u00e9delme a split-brain<\/strong>. Ha a viselked\u00e9s\u00e9rt felel\u0151s szoftver nem m\u0171k\u00f6dik, akkor m\u0171k\u00f6d\u00e9sbe kell l\u00e9pnie egy watchdog-nak, p\u00e9ld\u00e1ul az IPMI alapjain.<\/p>\n<p><\/p>\n<p>Ha a csom\u00f3pontok sz\u00e1ma p\u00e1ros (a klaszter k\u00e9t adatk\u00f6zpontban), akkor \u00fagynevezett bizonytalans\u00e1g l\u00e9phet fel <strong>50%\/50%<\/strong> (<em>\u00f6tven-\u00f6tven<\/em>), amikor a h\u00e1l\u00f3zati elszigetelts\u00e9g pontosan f\u00e9lbe osztja a klasztert. Ez\u00e9rt p\u00e1ros sz\u00e1m\u00fa csom\u00f3pont eset\u00e9n hozz\u00e1ad\u00f3dik <strong>quorum device<\/strong> \u2014 egy ig\u00e9nytelen d\u00e9mon, amely a legolcs\u00f3bb virtu\u00e1lis g\u00e9pen futtathat\u00f3 a harmadik adatk\u00f6zpontban. \u0150 egy szavazatot ad egy olyan szegmenseknek (amit l\u00e1t), \u00e9s \u00edgy feloldja az 50%\/50% bizonytalans\u00e1got. A szerver, amelyen a kv\u00f3rum eszk\u00f6z futni fog, <em>witness<\/em> \u2014 (terminol\u00f3gia a repmgr-b\u0151l, tetszett ez a kifejez\u00e9s).<\/p>\n<p><\/p>\n<p>Az er\u0151forr\u00e1sok helyet v\u00e1ltoztathatnak, p\u00e9ld\u00e1ul hib\u00e1s szerverekr\u0151l j\u00f3 \u00e1llapot\u00faakra, vagy a rendszergazd\u00e1k utas\u00edt\u00e1sa alapj\u00e1n. Hogy az \u00fcgyfelek tudj\u00e1k, hol tal\u00e1lhat\u00f3ak a sz\u00fcks\u00e9ges er\u0151forr\u00e1sok (hova csatlakozzanak?), <em>\u00fasz\u00f3 IP<\/em> (<strong>float IP<\/strong>). Ezek az IP-c\u00edmek, amelyeket a Pacemaker \u00e1thelyezhet a csom\u00f3pontok k\u00f6z\u00f6tt (minden egy s\u00edk h\u00e1l\u00f3zatban tal\u00e1lhat\u00f3). Mindegyik jelk\u00e9pezi az er\u0151forr\u00e1st (szolg\u00e1ltat\u00e1st), \u00e9s ott fog tart\u00f3zkodni, ahova csatlakozni kell, hogy hozz\u00e1f\u00e9rj\u00fcnk ehhez a szolg\u00e1ltat\u00e1shoz (eset\u00fcnkben a DB-hez).<\/p>\n<p><\/p>\n<h2 id=\"tuchanka1-shema-s-uplotneniem\">Tuchanka1 (\u00f6sszenyomott s\u00e9ma)<\/h2>\n<p><\/p>\n<h3 id=\"struktura\">Strukt\u00fara<\/h3>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Megb\u00edzhat\u00f3 klaszterek modellez\u00e9se PostgreSQL \u00e9s Pacemaker alapokon\" src=\"\/wp-content\/uploads\/2020\/08\/5651238e36f4af1c32f117191cf30261.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Az \u00f6tlet az volt, hogy sok apr\u00f3 adatb\u00e1zisunk van alacsony terhel\u00e9ssel, amelyekhez nem j\u00f6vedelmez\u0151 fenntartani egy dedik\u00e1lt slave-szervert hot standby m\u00f3dban read only tranzakci\u00f3khoz (nincs sz\u00fcks\u00e9g ilyen er\u0151forr\u00e1s-pazarl\u00e1sra).<\/p>\n<p><\/p>\n<p>Minden adatk\u00f6zpontban egy szerver tal\u00e1lhat\u00f3. Minden szerveren k\u00e9t PostgreSQL p\u00e9ld\u00e1ny m\u0171k\u00f6dik (a PostgreSQL terminol\u00f3gi\u00e1j\u00e1ban ezeket klasztereknek nevezz\u00fck, de a f\u00e9lre\u00e9rt\u00e9sek elker\u00fcl\u00e9se \u00e9rdek\u00e9ben \u0151ket p\u00e9ld\u00e1nyoknak fogom h\u00edvni, hasonl\u00f3an m\u00e1s adatb\u00e1zisokhoz, m\u00edg a klaszterek alatt csak a Pacemaker klasztereket \u00e9rtem). Az egyik p\u00e9ld\u00e1ny mester m\u00f3dban m\u0171k\u00f6dik, \u00e9s csak \u0151 ny\u00fajt szolg\u00e1ltat\u00e1sokat (csak r\u00e1 ir\u00e1nyul a float IP). A m\u00e1sik p\u00e9ld\u00e1ny h\u00e1tt\u00e9rk\u00e9nt m\u0171k\u00f6dik a m\u00e1sodik adatk\u00f6zpont sz\u00e1m\u00e1ra, \u00e9s csak akkor fog szolg\u00e1ltat\u00e1sokat ny\u00fajtani, ha a mestere meghib\u00e1sodik. Mivel a legt\u00f6bb id\u0151ben csak az egyik p\u00e9ld\u00e1ny (a mester) fog szolg\u00e1ltat\u00e1sokat ny\u00fajtani (lek\u00e9rdez\u00e9seket v\u00e9gezni), a szerver \u00f6sszes er\u0151forr\u00e1sa a mester optimaliz\u00e1l\u00e1s\u00e1ra ker\u00fcl, \u00fagy, hogy a m\u00e1sodik p\u00e9ld\u00e1nynak is elegend\u0151 er\u0151forr\u00e1s \u00e1lljon rendelkez\u00e9sre (ak\u00e1r a f\u00e1jlrendszer gyors\u00edt\u00f3t\u00e1r\u00e1n kereszt\u00fcl nem optim\u00e1lis m\u0171k\u00f6d\u00e9shez) arra az esetre, ha az egyik adatk\u00f6zpont le\u00e1llna. A h\u00e1tt\u00e9r nem ny\u00fajt szolg\u00e1ltat\u00e1sokat (nem v\u00e9gez read only lek\u00e9rdez\u00e9seket) a klaszter norm\u00e1l m\u0171k\u00f6d\u00e9se sor\u00e1n, hogy elker\u00fclje a forr\u00e1sok\u00e9rt folytatott harcot a mesteren ugyanazon a g\u00e9pen.<\/p>\n<p><\/p>\n<p>K\u00e9t csom\u00f3pont eset\u00e9n a hibat\u0171r\u00e9s csak aszinkron replik\u00e1ci\u00f3val lehets\u00e9ges, mivel szinkron replik\u00e1ci\u00f3 eset\u00e9n a h\u00e1tt\u00e9r meghib\u00e1sod\u00e1sa a mester le\u00e1ll\u00e1s\u00e1hoz vezetne.<\/p>\n<p><\/p>\n<h3 id=\"otkaz-witness\">Witness meghib\u00e1sod\u00e1s<\/h3>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Megb\u00edzhat\u00f3 klaszterek modellez\u00e9se PostgreSQL \u00e9s Pacemaker alapokon\" src=\"\/wp-content\/uploads\/2020\/08\/3c046d13c0c6839de297827ca3a8928b.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Witness meghib\u00e1sod\u00e1s (<em>quorum device<\/em>) csak a Tuchanka1 klaszteren fogom megvizsg\u00e1lni, a t\u00f6bbi eset\u00e9ben ugyanaz a helyzet. A witness meghib\u00e1sod\u00e1sa eset\u00e9n a klaszter strukt\u00far\u00e1ja nem v\u00e1ltozik, minden ugyan\u00fagy fog m\u0171k\u00f6dni, ahogy kor\u00e1bban. De a kv\u00f3rum 2 az 3-hoz v\u00e1lik, \u00e9s ez\u00e9rt b\u00e1rmely k\u00f6vetkez\u0151 meghib\u00e1sod\u00e1s fat\u00e1lis lesz a klaszter sz\u00e1m\u00e1ra. \u00cdgy is s\u00fcrg\u0151sen meg kell jav\u00edtani.<\/p>\n<p><\/p>\n<h3 id=\"otkaz-tuchanka1\">Tuchanka1 meghib\u00e1sod\u00e1s<\/h3>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Megb\u00edzhat\u00f3 klaszterek modellez\u00e9se PostgreSQL \u00e9s Pacemaker alapokon\" src=\"\/wp-content\/uploads\/2020\/08\/112957293bd682428115e4e93c9f1a96.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Az egyik adatk\u00f6zpont meghib\u00e1sod\u00e1sa a Tuchanka1 eset\u00e9ben. Ebben az esetben <em>witness<\/em> a m\u00e1sodik csom\u00f3pontnak adja a szavazat\u00e1t a m\u00e1sodik adatk\u00f6zpontban. Ott a kor\u00e1bbi h\u00e1tt\u00e9r mesterr\u00e9 v\u00e1lik, \u00edgy egy szerveren m\u0171k\u00f6dik mindk\u00e9t mester, \u00e9s r\u00e1juk mutat mindkett\u0151 float IP.<\/p>\n<p><\/p>\n<h2 id=\"tuchanka2-klassicheskaya\">Tuchanka2 (klasszikus)<\/h2>\n<p><\/p>\n<h3 id=\"struktura-1\">Strukt\u00fara<\/h3>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Megb\u00edzhat\u00f3 klaszterek modellez\u00e9se PostgreSQL \u00e9s Pacemaker alapokon\" src=\"\/wp-content\/uploads\/2020\/08\/c3af368f823fbd580b4ebb14cc87c750.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Klasszikus s\u00e9ma k\u00e9t csom\u00f3ponttal. Az egyiken a mester, a m\u00e1sikon a h\u00e1tt\u00e9r m\u0171k\u00f6dik. Mindkett\u0151 k\u00e9pes lek\u00e9rdez\u00e9sek v\u00e9grehajt\u00e1s\u00e1ra (a h\u00e1tt\u00e9r csak read only), \u00edgy mindkett\u0151n float IP tal\u00e1lhat\u00f3: krogan2 \u2014 a mesterhez, krogan2s1 \u2014 a h\u00e1tt\u00e9rhez. Hibat\u0171r\u00e9s lesz a mester \u00e9s a h\u00e1tt\u00e9r eset\u00e9ben is.<\/p>\n<p><\/p>\n<p>K\u00e9t csom\u00f3pont eset\u00e9n a hibat\u0171r\u00e9s csak aszinkron replik\u00e1ci\u00f3val lehets\u00e9ges, mert szinkron replik\u00e1ci\u00f3 eset\u00e9n a h\u00e1tt\u00e9r meghib\u00e1sod\u00e1sa a mester le\u00e1ll\u00e1s\u00e1hoz vezetne.<\/p>\n<p><\/p>\n<h3 id=\"otkaz-tuchanka2\">Tuchanka2 meghib\u00e1sod\u00e1s<\/h3>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Megb\u00edzhat\u00f3 klaszterek modellez\u00e9se PostgreSQL \u00e9s Pacemaker alapokon\" src=\"\/wp-content\/uploads\/2020\/08\/79bfcaf88c96d8ee16767dcef53741c1.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Egy adatk\u00f6zpont meghib\u00e1sod\u00e1sa eset\u00e9n <em>witness<\/em> a m\u00e1sodikra szavaz. Az egyetlen m\u0171k\u00f6d\u0151 adatk\u00f6zpontban fel\u00e1ll\u00edtanak egy mestert, amelyre mindk\u00e9t float IP, a mester \u00e9s a rabszolga is mutat. Term\u00e9szetesen az instanci\u00e1nak \u00fagy kell be\u00e1ll\u00edtva lennie, hogy elegend\u0151 er\u0151forr\u00e1sa (kapacit\u00e1s a kapcsolatokhoz stb.) legyen az \u00f6sszes kapcsolat \u00e9s k\u00e9r\u00e9s egyidej\u0171 fogad\u00e1s\u00e1hoz a mesteri \u00e9s rabszolga float IP-t\u0151l. Vagyis norm\u00e1l m\u0171k\u00f6d\u00e9s mellett elegend\u0151 tartal\u00e9kkal kell rendelkeznie a korl\u00e1tok k\u00f6z\u00f6tt.<\/p>\n<p><\/p>\n<h2 id=\"tuchanka4-mnogo-rabov\">Tuchanka4 (sok rabszolga)<\/h2>\n<p><\/p>\n<h3 id=\"struktura-2\">Strukt\u00fara<\/h3>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Megb\u00edzhat\u00f3 klaszterek modellez\u00e9se PostgreSQL \u00e9s Pacemaker alapokon\" src=\"\/wp-content\/uploads\/2020\/08\/17819fd97847f0573d429e422d799bc1.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ez m\u00e1r egy m\u00e1sik sz\u00e9ls\u0151s\u00e9g. Vannak olyan adatb\u00e1zisok, amelyekre nagyon sok read-only k\u00e9r\u00e9s \u00e9rkezik (tipikus eset egy nagy terhel\u00e9s\u0171 weboldal). A Tuchanka4 olyan helyzet, amikor h\u00e1rom vagy t\u00f6bb rabszolga is lehet az ilyen k\u00e9rd\u00e9sek kezel\u00e9s\u00e9re, de m\u00e9gsem t\u00fal sok. Nagy sz\u00e1m\u00fa rabszolga eset\u00e9n hierarchikus replik\u00e1ci\u00f3s rendszert kell kital\u00e1lni. A minim\u00e1lis esetben (a k\u00e9pen) mindk\u00e9t adatk\u00f6zpontban k\u00e9t szerver tal\u00e1lhat\u00f3, mindegyiken egy PostgreSQL instanci\u00e1val.<\/p>\n<p><\/p>\n<p>Ezeknek a rendszereknek egy m\u00e1sik jellemz\u0151je, hogy itt m\u00e1r be lehet \u00e1ll\u00edtani egy szinkron replik\u00e1ci\u00f3t. Ez \u00fagy van konfigur\u00e1lva, hogy lehet\u0151s\u00e9g szerint egy m\u00e1sik adatk\u00f6zpontba replik\u00e1ljon, nem pedig arra a replik\u00e1ra, amelyik ugyanabban az adatk\u00f6zpontban tal\u00e1lhat\u00f3, mint a mester. A mester \u00e9s minden rabszolga egy float IP-t haszn\u00e1l. Ide\u00e1lis esetben a rabszolg\u00e1k k\u00f6z\u00f6tt valamilyen k\u00e9r\u00e9skiegyenl\u00edt\u00e9st kell v\u00e9grehajtani. <em>sql proxy<\/em>, p\u00e9ld\u00e1ul a kliens oldal\u00e1n. K\u00fcl\u00f6nb\u00f6z\u0151 t\u00edpus\u00fa klienseknek elt\u00e9r\u0151 t\u00edpus\u00fa <em>sql proxy<\/em>, \u00e9s csak a kliensfejleszt\u0151k tudj\u00e1k, kinek milyen sz\u00fcks\u00e9ges. Ez a funkci\u00f3 megval\u00f3s\u00edthat\u00f3 k\u00fcls\u0151 d\u00e9monk\u00e9nt, kliens k\u00f6nyvt\u00e1rk\u00e9nt (kapcsolati medence) stb. Mindez t\u00fall\u00e9p a DB kluster megb\u00edzhat\u00f3s\u00e1g\u00e1nak t\u00e9m\u00e1j\u00e1n (megb\u00edzhat\u00f3s\u00e1g <em>SQL proxy<\/em> k\u00fcl\u00f6n is megval\u00f3s\u00edthat\u00f3, egy\u00fctt a kliens megb\u00edzhat\u00f3s\u00e1g\u00e1val).<\/p>\n<p><\/p>\n<h3 id=\"otkaz-tuchanka4\">A Tuchanka4 le\u00e1ll\u00e1sa<\/h3>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Megb\u00edzhat\u00f3 klaszterek modellez\u00e9se PostgreSQL \u00e9s Pacemaker alapokon\" src=\"\/wp-content\/uploads\/2020\/08\/e005ae90ffd63abdb272012b94735618.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ha az egyik adatk\u00f6zpont megsz\u0171nik m\u0171k\u00f6dni (azaz k\u00e9t szerver), a witness a m\u00e1sodikra szavaz. Ennek eredm\u00e9nyek\u00e9nt a m\u00e1sodik adatk\u00f6zpontban k\u00e9t szerver m\u0171k\u00f6dik: az egyik a mestert futtatja, amely a mesteri float IP-re mutat (read-write k\u00e9rd\u00e9sek fogad\u00e1sa \u00e9rdek\u00e9ben); a m\u00e1sodik szerver pedig egy rabszolg\u00e1t futtat szinkron replik\u00e1ci\u00f3val, \u00e9s egy rabszolga float IP-re mutat (read only k\u00e9rd\u00e9sekhez).<\/p>\n<p><\/p>\n<p>Az els\u0151, amit meg kell jegyezni: a rabszolga float IP-k nem mindegyike lesz m\u0171k\u00f6d\u0151k\u00e9pes, csak egy. A helyes m\u0171k\u00f6d\u00e9s \u00e9rdek\u00e9ben fontos, hogy <em>sql proxy<\/em> Minden k\u00e9r\u00e9st az egyetlen megmaradt float IP-re ir\u00e1ny\u00edtott; ha pedig <em>sql proxy<\/em> nem, akkor a kapcsol\u00f3d\u00e1shoz az \u00f6sszes float IP-t vessz\u00fck fel vessz\u0151vel az URL-ben. Ebben az esetben a <em>libpq<\/em> kapcsolat az els\u0151 m\u0171k\u00f6d\u0151 IP-hez t\u00f6rt\u00e9nik, ahogyan azt az automatikus tesztel\u0151 rendszer megoldotta. Lehets\u00e9ges, hogy m\u00e1s k\u00f6nyvt\u00e1rak, p\u00e9ld\u00e1ul a JDBC eset\u00e9ben ez nem fog m\u0171k\u00f6dni, \u00e9s sz\u00fcks\u00e9ges <em>sql proxy<\/em>. Ez az\u00e9rt van, mert a slave float IP-k eset\u00e9ben tilalom van \u00e9rv\u00e9nyben, hogy egy id\u0151ben egy szerveren legyenek aktiv\u00e1lva, hogy egyenletesen eloszoljanak a slave szerverek k\u00f6z\u00f6tt, ha t\u00f6bb is m\u0171k\u00f6dik.<\/p>\n<p><\/p>\n<p>M\u00e1sodik: m\u00e9g ha a data center meghib\u00e1sodik, a szinkron replik\u00e1ci\u00f3 megmarad. \u00c9s m\u00e9g ha m\u00e1sodlagos hib\u00e1sod\u00e1s is t\u00f6rt\u00e9nik, vagyis ha a megmaradt data centerben az egyik a k\u00e9t szerver k\u00f6z\u00fcl le\u00e1ll, a klaszter b\u00e1r nem fog szolg\u00e1ltatni, de m\u00e9gis meg\u0151rzi az \u00f6sszes meger\u0151s\u00edtett tranzakci\u00f3r\u00f3l az inform\u00e1ci\u00f3t, amelyekr\u0151l visszaigazol\u00e1st adott (nem lesz adatveszt\u00e9s m\u00e1sodlagos meghib\u00e1sod\u00e1s eset\u00e9n).<\/p>\n<p><\/p>\n<h2 id=\"tuchanka3-3-data-centra\">Tuchanka3 (3 data center)<\/h2>\n<p><\/p>\n<h3 id=\"struktura-3\">Strukt\u00fara<\/h3>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Megb\u00edzhat\u00f3 klaszterek modellez\u00e9se PostgreSQL \u00e9s Pacemaker alapokon\" src=\"\/wp-content\/uploads\/2020\/08\/e11f9884b92fe20a63b5080ae8c7f82b.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ez a klaszter olyan helyzetekre k\u00e9sz\u00fclt, amikor h\u00e1rom teljesen m\u0171k\u00f6d\u0151k\u00e9pes data center l\u00e9tezik, mindegyikben egy teljesen m\u0171k\u00f6d\u0151 DB szerverrel. Ebben az esetben <em>quorum device<\/em> nincs sz\u00fcks\u00e9g. Az egyik data centerben m\u0171k\u00f6dik a mester, a m\u00e1sik kett\u0151ben \u2013 slave. A replik\u00e1ci\u00f3 szinkron, ANY t\u00edpus\u00fa (slave1, slave2), teh\u00e1t a kliens akkor kap meger\u0151s\u00edt\u00e9st a commitr\u00f3l, amikor b\u00e1rmelyik slave els\u0151k\u00e9nt v\u00e1laszol, hogy elfogadta a commitot. Az er\u0151forr\u00e1sokat egy float IP jel\u00f6li a mesterhez \u00e9s kett\u0151 a slave-hez. A Tuchanka4-hez k\u00e9pest mindh\u00e1rom float IP hibamentes. <em>sql proxy<\/em> A read-only SQL lek\u00e9rdez\u00e9sek kiegyens\u00falyoz\u00e1s\u00e1hoz haszn\u00e1lhat\u00f3<\/p>\n<p><\/p>\n<h3 id=\"otkaz-tuchanka3\">(k\u00fcl\u00f6n hibamentess\u00e9ggel), vagy az \u00fcgyfelek fel\u00e9t egy slave float IP-re, a m\u00e1sik fel\u00e9t pedig a m\u00e1sikra osztj\u00e1k.<\/h3>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Megb\u00edzhat\u00f3 klaszterek modellez\u00e9se PostgreSQL \u00e9s Pacemaker alapokon\" src=\"\/wp-content\/uploads\/2020\/08\/1e61158be3c23742384d3621e8f7896b.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Tuchanka3 hib\u00e1ja \u00e1ltal\u00e1ban az, hogy ha az egyik data center meghib\u00e1sodik, kett\u0151 marad. Az egyikben a mester \u00e9s mester float IP m\u0171k\u00f6dik, a m\u00e1sodikban a slave \u00e9s mindk\u00e9t slave float IP (a p\u00e9ld\u00e1nyban dupla er\u0151forr\u00e1st kell fenntartani, hogy mindk\u00e9t slave float IP-r\u0151l \u00f6sszes kapcsolatot fogadhat). A mester \u00e9s a slave k\u00f6z\u00f6tt szinkron replik\u00e1ci\u00f3 van. A klaszter meg\u0151rzi az \u00f6sszes meger\u0151s\u00edtett \u00e9s visszaigazolt tranzakci\u00f3 inform\u00e1ci\u00f3j\u00e1t (nem lesz adatveszt\u00e9s) k\u00e9t data center megsemmis\u00edt\u00e9se eset\u00e9n (ha nem egyszerre semmis\u00edtik meg \u0151ket).<\/p>\n<p><\/p>\n<p><em>A f\u00e1jlszerkezet \u00e9s a telep\u00edt\u00e9s r\u00e9szletes le\u00edr\u00e1s\u00e1t nem illesztettem be. Aki j\u00e1tszani szeretne, az mindezt elolvashatja a README-ben. Csak az automatikus tesztel\u00e9s le\u00edr\u00e1s\u00e1t hozom.<\/em><\/p>\n<p><\/p>\n<h1 id=\"sistema-avtomaticheskogo-testirovaniya\">Automatikus tesztel\u00e9si rendszer<\/h1>\n<p><\/p>\n<p>A klaszterek megb\u00edzhat\u00f3s\u00e1g\u00e1nak tesztel\u00e9s\u00e9re, k\u00fcl\u00f6nb\u00f6z\u0151 hib\u00e1k szimul\u00e1l\u00e1s\u00e1val k\u00e9sz\u00fclt az automatikus tesztel\u00e9si rendszer. A script futtat\u00e1s\u00e1hoz haszn\u00e1lhat\u00f3: <code>test\/failure<\/code>. A script param\u00e9terek\u00e9nt elfogadja a tesztelni k\u00edv\u00e1nt klaszterek sz\u00e1m\u00e1t. P\u00e9ld\u00e1ul ez a parancs:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">test\/failure 2 3<\/code><\/pre>\n<p><\/p>\n<p>csak a m\u00e1sodik \u00e9s a harmadik klasztert fogja tesztelni. Ha nincsenek megadva param\u00e9terek, akkor minden klaszter tesztelve lesz. Az \u00f6sszes klaszter p\u00e1rhuzamosan tesztel\u0151dik, \u00e9s az eredm\u00e9ny megjelenik a tmux panelj\u00e9n. A Tmux egy dedik\u00e1lt tmux szervert haszn\u00e1l, ez\u00e9rt a scriptet a default tmux-b\u00f3l is futtathatjuk, \u00edgy be\u00e1gyazott tmux j\u00f6n l\u00e9tre. Aj\u00e1nlom a termin\u00e1l haszn\u00e1lat\u00e1t nagy ablakban \u00e9s kism\u00e9ret\u0171 bet\u0171vel. A tesztel\u00e9s megkezd\u00e9se el\u0151tt az \u00f6sszes virtu\u00e1lis g\u00e9p vissza\u00e1ll a script befejez\u00e9s\u00e9nek pillanat\u00e1ban k\u00e9sz\u00fclt snapshotra. <code>setup<\/code>.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Megb\u00edzhat\u00f3 klaszterek modellez\u00e9se PostgreSQL \u00e9s Pacemaker alapokon\" src=\"\/wp-content\/uploads\/2020\/08\/b546bab1ebbbe365991e1ff3d1667237.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>A termin\u00e1l oszlopokra van felosztva a tesztelt klaszterek sz\u00e1m\u00e1nak megfelel\u0151en, alap\u00e9rtelmezett esetben (a k\u00e9perny\u0151k\u00e9pen) n\u00e9gy van bel\u0151le. Az oszlopok tartalm\u00e1t a Tuchanka2 p\u00e9ld\u00e1j\u00e1n \u00edrom le. A k\u00e9pen a panelek sz\u00e1mozva vannak:<\/p>\n<p><\/p>\n<ol>\n<li>Itt a tesztekr\u0151l sz\u00f3l\u00f3 statisztik\u00e1k jelennek meg. Az oszlopok:\n<ul>\n<li><strong>failure<\/strong> \u2014 a teszt (a scriptben tal\u00e1lhat\u00f3 funkci\u00f3) neve, amely szimul\u00e1lja a hib\u00e1t.<\/li>\n<li><strong>reaction<\/strong> \u2014 az az \u00e1tlagos id\u0151 m\u00e1sodpercben, amely alatt a klaszter helyre\u00e1llt. A script kezdet\u00e9t\u0151l a hiba szimul\u00e1l\u00e1s\u00e1ig \u00e9s addig az id\u0151pontig m\u00e9rve, amikor a klaszter helyre\u00e1ll \u00e9s k\u00e9pes folytatni a szolg\u00e1ltat\u00e1sok ny\u00fajt\u00e1s\u00e1t. Ha az id\u0151 nagyon kicsi, p\u00e9ld\u00e1ul hat m\u00e1sodperc (ez megt\u00f6rt\u00e9nik a t\u00f6bb slave-fel rendelkez\u0151 klaszterekn\u00e9l (Tuchanka3 \u00e9s Tuchanka4)), az azt jelenti, hogy a hiba egy aszinkron slave-en t\u00f6rt\u00e9nt, \u00e9s egy\u00e1ltal\u00e1n nem befoly\u00e1solta a m\u0171k\u00f6d\u0151k\u00e9pess\u00e9get, \u00e1llapotv\u00e1lt\u00e1s nem t\u00f6rt\u00e9nt.<\/li>\n<li><strong>deviation<\/strong> \u2014 a m\u00e9r\u00e9s sz\u00f3r\u00e1s\u00e1t (pontoss\u00e1g\u00e1t) mutatja <strong>reaction<\/strong> a \u201estandard deviation\u201d m\u00f3dszer\u00e9vel.<\/li>\n<li><strong>count<\/strong> \u2014 a teszt h\u00e1nyszor lett v\u00e9grehajtva.<\/li>\n<\/ul>\n<\/li>\n<li>A r\u00f6vid napl\u00f3 seg\u00edt \u00e9rt\u00e9kelni, hogy a klaszter jelenleg mivel foglalkozik. Megmutatja az iter\u00e1ci\u00f3 (teszt) sz\u00e1m\u00e1t, az id\u0151b\u00e9lyeget \u00e9s az elj\u00e1r\u00e1s nev\u00e9t. A t\u00fal hossz\u00fa v\u00e9grehajt\u00e1s (&gt; 5 perc) probl\u00e9m\u00e1ra utal.<\/li>\n<li><strong>heart<\/strong> (sz\u00edv) \u2014 aktu\u00e1lis id\u0151. A m\u0171k\u00f6d\u0151k\u00e9pess\u00e9g vizu\u00e1lis \u00e9rt\u00e9kel\u00e9s\u00e9hez <em>mester<\/em> az \u0151 t\u00e1bl\u00e1j\u00e1ba folyamatosan be\u00edr\u00f3dik az aktu\u00e1lis id\u0151 a mester float IP-j\u00e1nak haszn\u00e1lat\u00e1val. Siker eset\u00e9n az eredm\u00e9ny ezen a panelen jelenik meg.<\/li>\n<li><strong>\u00fct\u00e9s<\/strong> (pulzus) \u2014 az \u201eaktu\u00e1lis id\u0151\u201d, amely kor\u00e1bban a szkript \u00e1ltal lett r\u00f6gz\u00edtve <strong>heart<\/strong> a mesterbe, most pedig b\u0151l van leolvashat\u00f3 <em>a rabszolga<\/em> az \u0151 float IP-j\u00e9n kereszt\u00fcl. Lehet\u0151v\u00e9 teszi a rabszolga \u00e9s a replik\u00e1ci\u00f3 m\u0171k\u00f6d\u0151k\u00e9pess\u00e9g\u00e9nek vizu\u00e1lis \u00e9rt\u00e9kel\u00e9s\u00e9t. A Tuchanka1-en nincsenek rabszolg\u00e1k float IP-vel (nincsenek azok a rabszolg\u00e1k, akik szolg\u00e1ltat\u00e1st ny\u00fajtanak), viszont ott k\u00e9t p\u00e9ld\u00e1ny (DB) van, ez\u00e9rt itt nem a <strong>\u00fct\u00e9s<\/strong>, \u00e9s <strong>heart<\/strong> m\u00e1sodik p\u00e9ld\u00e1nyt fogjuk mutatni.<\/li>\n<li>A klaszter \u00e1llapot\u00e1nak figyel\u00e9se a <code>pcs mon<\/code>eszk\u00f6zzel. Megjelen\u00edti a strukt\u00far\u00e1t, az er\u0151forr\u00e1sok eloszt\u00e1s\u00e1t a csom\u00f3pontok k\u00f6z\u00f6tt \u00e9s egy\u00e9b hasznos inform\u00e1ci\u00f3t.<\/li>\n<li>Itt a klaszter minden virtu\u00e1lis g\u00e9p\u00e9nek rendszermonitoringja megjelenik. Ezekb\u0151l a panelekb\u0151l lehet t\u00f6bb is \u2014 annyi virtu\u00e1lis g\u00e9p van a klaszterben. K\u00e9t grafikon <em>CPU Terhel\u00e9s<\/em> (a virtu\u00e1lis g\u00e9pekben k\u00e9t processzorral), a virtu\u00e1lis g\u00e9p neve, <em>Rendszer terhel\u00e9s<\/em> (Load Average n\u00e9ven, mivel 5, 10 \u00e9s 15 perc alatt \u00e1tlagolt), a folyamatok adatai \u00e9s a mem\u00f3ria eloszt\u00e1s.<\/li>\n<li>A szkript nyomvonal\u00e1nak nyomk\u00f6vet\u00e9se, amely tesztel\u00e9seket v\u00e9gez. Ha hiba l\u00e9p fel \u2014 hirtelen a m\u0171k\u00f6d\u00e9s megszak\u00edt\u00e1sa vagy v\u00e9gtelen v\u00e1rakoz\u00e1si ciklus \u2014 itt meg lehet n\u00e9zni ennek a viselked\u00e9snek az ok\u00e1t.<\/li>\n<\/ol>\n<p><\/p>\n<p>A tesztel\u00e9s k\u00e9t l\u00e9p\u00e9sben t\u00f6rt\u00e9nik. El\u0151sz\u00f6r a szkript bej\u00e1rja az \u00f6sszes tesztfajt\u00e1t, v\u00e9letlenszer\u0171en v\u00e1lasztva egy virtu\u00e1lis g\u00e9pet, amelyre a tesztet alkalmazza. Ezut\u00e1n egy v\u00e9gtelen tesztel\u00e9si ciklus k\u00f6vetkezik, ahol a virtu\u00e1lis g\u00e9pek \u00e9s a hib\u00e1k minden alkalommal v\u00e9letlenszer\u0171en ker\u00fclnek kiv\u00e1laszt\u00e1sra. A tesztel\u0151 szkript v\u00e1ratlan le\u00e1ll\u00edt\u00e1sa (als\u00f3 panel) vagy a v\u00e9gtelen v\u00e1rakoz\u00e1si ciklus valami\u00e9rt (&gt; 5 perc egy m\u0171velet v\u00e9grehajt\u00e1s\u00e1hoz, ezt a nyomvonalban l\u00e1that\u00f3) azt jelzi, hogy a klaszteren van egy megbukott teszt.<\/p>\n<p><\/p>\n<p>Minden teszt a k\u00f6vetkez\u0151 m\u0171veletekb\u0151l \u00e1ll:<\/p>\n<p><\/p>\n<ol>\n<li>A funkci\u00f3 elind\u00edt\u00e1sa, amely a hib\u00e1t emul\u00e1lja.<\/li>\n<li><strong>K\u00e9szen \u00e1ll?<\/strong> \u2014 a klaszter m\u0171k\u00f6d\u0151k\u00e9pess\u00e9g\u00e9nek helyre\u00e1ll\u00edt\u00e1s\u00e1nak v\u00e1rakoz\u00e1sa (amikor minden szolg\u00e1ltat\u00e1s el\u00e9rhet\u0151).<\/li>\n<li>A klaszter helyre\u00e1ll\u00edt\u00e1s\u00e1nak ideje jelenik meg (<em>reaction<\/em>).<\/li>\n<li><strong>Megjav\u00edt<\/strong> \u2014 a klaszter \u201ejav\u00edtja\u201d mag\u00e1t. Ezut\u00e1n teljes m\u0171k\u00f6d\u0151k\u00e9pes \u00e1llapotba kell visszat\u00e9rnie, k\u00e9szen a k\u00f6vetkez\u0151 hib\u00e1ra.<\/li>\n<\/ol>\n<p><\/p>\n<p>Itt van a tesztek list\u00e1ja azzal a le\u00edr\u00e1ssal, hogy mit csin\u00e1lnak:<\/p>\n<p><\/p>\n<ul>\n<li><strong>ForkBomb<\/strong>: l\u00e9trehoz egy &quot;Mem\u00f3riahi\u00e1ny&quot; hiba\u00fczenetet fork bomb\u00e1val.<\/li>\n<li><strong>OutOfSpace<\/strong>: megtelik a merevlemez. De a teszt ink\u00e1bb szimbolikus, figyelembe v\u00e9ve azt a csek\u00e9ly terhel\u00e9st, amely a tesztel\u00e9s sor\u00e1n keletkezik, a merevlemez tel\u00edt\u0151d\u00e9sekor \u00e1ltal\u00e1ban nem k\u00f6vetkezik be PostgreSQL le\u00e1ll\u00e1sa.<\/li>\n<li><strong>Postgres-KILL<\/strong>: meg\u00f6li a PostgreSQL-t a parancs seg\u00edts\u00e9g\u00e9vel <code>killall -KILL postgres<\/code>.<\/li>\n<li><strong>Postgres-STOP<\/strong>: felf\u00fcggeszti a PostgreSQL-t a parancs seg\u00edts\u00e9g\u00e9vel <code>killall -STOP postgres<\/code>.<\/li>\n<li><strong>PowerOff<\/strong>: \"\u00e1ram n\u00e9lk\u00fcli\" \u00e1llapotba \u00e1ll\u00edtja a virtu\u00e1lis g\u00e9pet a parancs seg\u00edts\u00e9g\u00e9vel <code>VBoxManage controlvm &quot;virtu\u00e1lis g\u00e9p&quot; poweroff<\/code>.<\/li>\n<li><strong>Reset<\/strong>: \u00fajraind\u00edtja a virtu\u00e1lis g\u00e9pet a parancs seg\u00edts\u00e9g\u00e9vel <code>VBoxManage controlvm &quot;virtu\u00e1lis g\u00e9p&quot; reset<\/code>.<\/li>\n<li><strong>SBD-STOP<\/strong>: felf\u00fcggeszti az SBD d\u00e9mon parancs seg\u00edts\u00e9g\u00e9vel <code>killall -STOP sbd<\/code>.<\/li>\n<li><strong>ShutDown<\/strong>: SSH-n kereszt\u00fcl k\u00fcld parancsot a virtu\u00e1lis g\u00e9pnek <code>systemctl poweroff<\/code>, a rendszer helyesen befejezi a m\u0171k\u00f6d\u00e9s\u00e9t.<\/li>\n<li><strong>UnLink<\/strong>: h\u00e1l\u00f3zati izol\u00e1ci\u00f3, parancs <code>VBoxManage controlvm &quot;virtu\u00e1lis g\u00e9p&quot; setlinkstate1 off<\/code>.<\/li>\n<\/ul>\n<p><\/p>\n<p>A tesztel\u00e9s befejez\u00e9se vagy a standard &quot;tmux kill-window&quot; parancs seg\u00edts\u00e9g\u00e9vel <strong>Ctrl-b &amp;<\/strong>, vagy a &quot;detach-client&quot; paranccsal <strong>Ctrl-b d<\/strong>: \u00edgy a teszt befejez\u0151dik, a tmux bez\u00e1r\u00f3dik, a virtu\u00e1lis g\u00e9pek le\u00e1llnak.<\/p>\n<p><\/p>\n<h1 id=\"vyyavlennye-pri-testirovanii-problemy\">A tesztel\u00e9s sor\u00e1n \u00e9szlelt probl\u00e9m\u00e1k<\/h1>\n<p><\/p>\n<ul>\n<li>\n<p>Jelenleg <em>a sbd watchdog d\u00e9mon<\/em> kezelni tudja a megfigyelt d\u00e9monok le\u00e1ll\u00edt\u00e1s\u00e1t, de nem azok felf\u00fcggeszt\u00e9s\u00e9t. Ennek k\u00f6vetkezt\u00e9ben a felf\u00fcggeszt\u00e9shez vezet\u0151 meghib\u00e1sod\u00e1sokat helytelen\u00fcl kezelik. <em>Corosync<\/em> \u00e9s <em>Pacemaker<\/em>, de nem felf\u00fcggesztve <em>sbd<\/em>. A tesztel\u00e9shez <em>Corosync<\/em> m\u00e1r l\u00e9tezik <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/ClusterLabs\/sbd\/pull\/83\"><strong>PR#83<\/strong> (a GitHub-on <em>sbd<\/em>)<\/a><\/noindex>, elfogadva a <em>master<\/em>\u00e1gba. Meg\u00edg\u00e9rt\u00e9k (a PR#83-ban), hogy a Pacemaker sz\u00e1m\u00e1ra is lesz valami hasonl\u00f3, rem\u00e9lem, hogy <em>RedHat 8<\/em> -t megcsin\u00e1lj\u00e1k. De az ilyen \"meghib\u00e1sod\u00e1sok\" elm\u00e9letiek, k\u00f6nnyen mesters\u00e9gesen ut\u00e1nozhat\u00f3k p\u00e9ld\u00e1ul <code>killall -STOP corosync<\/code>, de val\u00f3s \u00e9letben soha nem fordulnak el\u0151.<\/p>\n<p>\n<\/li>\n<li>\n<p>A <em>Pacemaker<\/em> CentOS 7 <em>verzi\u00f3ban<\/em> helytelen\u00fcl \u00e1ll\u00edtott\u00e1k be <em>sync_timeout<\/em> sa-logic-subsets-canary-vs.yaml <em>quorum device<\/em>, ennek k\u00f6vetkezt\u00e9ben <noindex><a rel=\"nofollow\" href=\"https:\/\/lists.clusterlabs.org\/pipermail\/users\/2019-August\/026145.html\">ha egy csom\u00f3pont meghib\u00e1sodik, akkor bizonyos val\u00f3sz\u00edn\u0171s\u00e9ggel a m\u00e1sik csom\u00f3pont<\/a><\/noindex>, ahov\u00e1 a mesternek \u00e1t kellett volna l\u00e9pnie, \u00fajraindult. Ez orvosolva lett a <em>sync_timeout<\/em> sa-logic-subsets-canary-vs.yaml <em>quorum device<\/em> telep\u00edt\u00e9s sor\u00e1n (a szkriptben <code>setup\/setup1<\/code>). Ezt a jav\u00edt\u00e1st a fejleszt\u0151k nem fogadt\u00e1k el <em>Pacemaker<\/em>, ehelyett meg\u00edg\u00e9rt\u00e9k, hogy a j\u00f6v\u0151ben \u00fajra dolgozz\u00e1k az infrastrukt\u00far\u00e1t, hogy ez a timeout automatikusan kisz\u00e1m\u00edt\u00e1sra ker\u00fclj\u00f6n.<\/p>\n<p>\n<\/li>\n<li>\n<p>Ha az adatb\u00e1zis konfigur\u00e1l\u00e1sakor meg van adva, hogy az <code>LC_MESSAGES<\/code> (sz\u00f6veges \u00fczenetek) eset\u00e9n haszn\u00e1lhat\u00f3 Unicode, p\u00e9ld\u00e1ul <code>ru_RU.UTF-8<\/code>, akkor ha <em>postgres<\/em> olyan k\u00f6rnyezetben indul, ahol a locale nem UTF-8, p\u00e9ld\u00e1ul \u00fcres k\u00f6rnyezetben (itt <em>pacemaker<\/em>+<em>pgsqlms<\/em>(paf) elind\u00edtva <em>postgres<\/em>), akkor <noindex><a rel=\"nofollow\" href=\"https:\/\/www.postgresql.org\/message-id\/13FE0F7C-5140-499C-8C2E-0BE64BC3A48B%40ya.ru\">a napl\u00f3ban az UTF-8 karakterek helyett k\u00e9rd\u0151jelek fogj\u00e1k megjelenni<\/a><\/noindex>. A PostgreSQL fejleszt\u0151i soha nem tudt\u00e1k meg\u00e1llap\u00edtani, mit kell tenni ebben az esetben. Ezt megker\u00fclni lehet, sz\u00fcks\u00e9ges a telep\u00edt\u00e9s. <code>LC_MESSAGES=hu_HU.UTF-8<\/code> adatb\u00e1zis p\u00e9ld\u00e1ny\u00e1nak konfigur\u00e1l\u00e1sa (l\u00e9trehoz\u00e1sa) sor\u00e1n.<\/p>\n<p>\n<\/li>\n<li>\n<p>Ha be van \u00e1ll\u00edtva a wal_receiver_timeout (alap\u00e9rtelmez\u00e9s szerint 60 m\u00e1sodperc), akkor a PostgreSQL-STOP teszt sor\u00e1n a mesterben a tuchanka3 \u00e9s tuchanka4 klaszterekben <noindex><a rel=\"nofollow\" href=\"https:\/\/www.postgresql.org\/message-id\/60590EC6-4062-4F25-A49C-3948ED2A7D47%40ya.ru\">nem t\u00f6rt\u00e9nik meg a replik\u00e1ci\u00f3 \u00faj mesterhez val\u00f3 \u00fajra csatlakoztat\u00e1sa.<\/a><\/noindex>. A replik\u00e1ci\u00f3 szinkron, ez\u00e9rt nemcsak a munka, hanem az \u00faj mester is le\u00e1ll. Megoldhat\u00f3 a wal_receiver_timeout=0 be\u00e1ll\u00edt\u00e1s\u00e1val a PostgreSQL konfigur\u00e1l\u00e1sakor.<\/p>\n<p>\n<\/li>\n<li>\n<p>Ritk\u00e1n megfigyeltem a PostgreSQL replik\u00e1ci\u00f3j\u00e1nak felf\u00fcggeszt\u00e9s\u00e9t a ForkBomb teszt sor\u00e1n (mem\u00f3ria t\u00falterhel\u00e9s). <noindex><a rel=\"nofollow\" href=\"https:\/\/www.postgresql.org\/message-id\/60590EC6-4062-4F25-A49C-3948ED2A7D47%40ya.ru\">A ForkBomb ut\u00e1n n\u00e9ha a munk\u00e1sok nem csatlakoznak \u00fajra az \u00faj mesterszerverhez.<\/a><\/noindex>. Csak a tuchanka3 \u00e9s tuchanka4 klaszterekben tal\u00e1lkoztam ezzel, ahol a szinkron replik\u00e1ci\u00f3 miatt a mester megfagyott. A probl\u00e9ma mag\u00e1t\u00f3l elm\u00falt egy hossz\u00fa id\u0151 ut\u00e1n (k\u00f6r\u00fclbel\u00fcl k\u00e9t \u00f3ra). Tov\u00e1bbi kutat\u00e1s sz\u00fcks\u00e9ges a jav\u00edt\u00e1shoz. A t\u00fcnetek hasonl\u00edtanak a kor\u00e1bbi hib\u00e1ra, amelyet m\u00e1s ok v\u00e1ltott ki, de azonos k\u00f6vetkezm\u00e9nyekkel.<\/p>\n<p>\n<\/li>\n<\/ul>\n<p><\/p>\n<p>A krogan k\u00e9pet innen vett\u00e9k <noindex><a rel=\"nofollow\" href=\"http:\/\/fav.me\/d8fo42n\">Deviant Art<\/a><\/noindex> a szerz\u0151 enged\u00e9ly\u00e9vel:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Megb\u00edzhat\u00f3 klaszterek modellez\u00e9se PostgreSQL \u00e9s Pacemaker alapokon\" src=\"\/wp-content\/uploads\/2020\/08\/ded1ead387814d97d84d0fb89e025386.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Forr\u00e1s: <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.3 - 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\/hu\/blog\/administrirovanie\/modelirovanie-otkazoustojchivyh-klasterov-na-baze-postgresql-i-pacemaker\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"hu_HU\" \/>\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\/hu\/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\udd47Meghib\u00e1sod\u00e1s-ellen\u00e1ll\u00f3 klaszterek modell\u00e1l\u00e1sa PostgreSQL \u00e9s Pacemaker alapjain | ProHoster","description":"Bevezet\u00e9s N\u00e9h\u00e1ny id\u0151vel ezel\u0151tt a feladatom egy megb\u00edzhat\u00f3 PostgreSQL klaszter fejleszt\u00e9se volt.","canonical_url":"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/modelirovanie-otkazoustojchivyh-klasterov-na-baze-postgresql-i-pacemaker","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"hu_HU","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\/hu\/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\/hu\/wp-json\/wp\/v2\/posts\/92570","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/comments?post=92570"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts\/92570\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/media\/92571"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/media?parent=92570"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/categories?post=92570"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/tags?post=92570"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}