{"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\/sq\/blog\/administrirovanie\/modelirovanie-otkazoustojchivyh-klasterov-na-baze-postgresql-i-pacemaker","title":{"rendered":"Modelimi i klastereve resiliente mbi baz\u00ebn e PostgreSQL dhe Pacemaker","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<h1 id=\"vvedenie\">Hyrje<\/h1>\n<p><\/p>\n<p>Pak sa koh\u00eb m\u00eb par\u00eb m\u00eb \u00ebsht\u00eb dh\u00ebn\u00eb detyra p\u00ebr t\u00eb zhvilluar nj\u00eb grup klaster t\u00eb q\u00ebndruesh\u00ebm p\u00ebr <noindex><a rel=\"nofollow\" href=\"https:\/\/www.postgresql.org\">PostgreSQL<\/a><\/noindex>, q\u00eb punon n\u00eb disa qendra t\u00eb t\u00eb dh\u00ebnave t\u00eb lidhura me fibra optike brenda nj\u00eb qyteti, dhe n\u00eb gjendje t\u00eb p\u00ebrballoj\u00eb d\u00ebshtimin (p.sh., \u00e7mendje t\u00eb energjis\u00eb) t\u00eb nj\u00eb qendre t\u00eb t\u00eb dh\u00ebnave. Si softuer q\u00eb p\u00ebrgjigjet p\u00ebr q\u00ebndrueshm\u00ebrin\u00eb, kam zgjedhur <noindex><a rel=\"nofollow\" href=\"https:\/\/clusterlabs.org\">Pacemaker<\/a><\/noindex>, sepse kjo \u00ebsht\u00eb zgjidhja zyrtare nga RedHat p\u00ebr krijimin e grupeve klaster t\u00eb q\u00ebndrueshme. Ajo \u00ebsht\u00eb e mir\u00eb sepse RedHat ofron mb\u00ebshtetje p\u00ebr t\u00eb, dhe sepse kjo zgjidhje \u00ebsht\u00eb universale (modulare). Me ndihm\u00ebn e saj do t\u00eb jet\u00eb e mundur t\u00eb sigurohet q\u00ebndrueshm\u00ebria jo vet\u00ebm p\u00ebr PostgreSQL, por edhe p\u00ebr sh\u00ebrbime t\u00eb tjera, duke p\u00ebrdorur module standarde ose duke i krijuar ato p\u00ebr nevoja specifike.<\/p>\n<p><\/p>\n<p>N\u00eb k\u00ebt\u00eb zgjidhje ka lindur nj\u00eb pyetje e arsyeshme: sa e q\u00ebndrueshme do t\u00eb jet\u00eb klasteri i q\u00ebndruesh\u00ebm? P\u00ebr ta shqyrtuar k\u00ebt\u00eb, kam zhvilluar nj\u00eb platform\u00eb testuese q\u00eb imiton d\u00ebshtime t\u00eb ndryshme n\u00eb nyjat e klasterit, pret rikthimin n\u00eb funksionim, rikthen nyj\u00ebn e d\u00ebshtuar dhe vazhdon testimin n\u00eb cik\u00ebl. Fillimisht ky projekt ishte quajtur hapgsql, por me kalimin e koh\u00ebs m\u00eb \u00ebsht\u00eb b\u00ebr\u00eb e m\u00ebrzitshme emri, n\u00eb t\u00eb cilin kishte vet\u00ebm nj\u00eb zanore. Prandaj, bazat e t\u00eb dh\u00ebnave t\u00eb q\u00ebndrueshme (dhe IP e peshkuar t\u00eb cilat i tregojn\u00eb ato) fillova t'i quaj <strong>krogan<\/strong> (karakter nga nj\u00eb loj\u00eb kompjuterike, ku t\u00eb gjith\u00eb organet e r\u00ebnd\u00ebsishme jan\u00eb t\u00eb dyfishuara), nd\u00ebrsa nyjat, klasteret dhe vet\u00eb projekti jan\u00eb quajtur <strong>tuchanka<\/strong> (planeti ku jetojn\u00eb krogan\u00ebt).<\/p>\n<p><\/p>\n<p>Tani drejtuesit lejuan <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/domclick\/tuchanka\">nd\u00ebrtimin e projektit p\u00ebr komunitetin open source n\u00ebn licenc\u00ebn MIT<\/a><\/noindex>. README do t\u00eb p\u00ebrkthhet n\u00eb anglisht s\u00eb shpejti (sepse pritet q\u00eb konsumator\u00ebt kryesor\u00eb t\u00eb jen\u00eb zhvilluesit e Pacemaker dhe PostgreSQL), dhe versioni i vjet\u00ebr n\u00eb rus t\u00eb README e kam vendosur ta organizoj (pjes\u00ebrisht) n\u00eb form\u00ebn e k\u00ebtij artikulli.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Modelimi i klastereve resiliente mbi baz\u00ebn e PostgreSQL dhe Pacemaker\" src=\"\/wp-content\/uploads\/2020\/08\/7ebb04b3e56337060e981da319192a28.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Klaster\u00ebt krijohen n\u00eb virtualka <noindex><a rel=\"nofollow\" href=\"https:\/\/www.virtualbox.org\">VirtualBox<\/a><\/noindex>. N\u00eb total do t\u00eb krijohen 12 virtualka (n\u00eb total 36GiB), t\u00eb cilat do t\u00eb formojn\u00eb 4 grupe klaster t\u00eb q\u00ebndrueshme (versione t\u00eb ndryshme). Dy klaster\u00ebt e par\u00eb p\u00ebrb\u00ebhen nga dy servera PostgreSQL, t\u00eb cil\u00ebt vendosen n\u00eb qendra t\u00eb ndryshme t\u00eb t\u00eb dh\u00ebnave, dhe nj\u00eb server i p\u00ebrbashk\u00ebt <em>witness<\/em> c <strong>quorum device<\/strong> (i vendosur n\u00eb nj\u00eb virtualke t\u00eb lir\u00eb n\u00eb qendr\u00ebn e tret\u00eb t\u00eb t\u00eb dh\u00ebnave), i cili zgjidh pasigurin\u00eb <strong>50%\/50%<\/strong>, duke i dh\u00ebn\u00eb vot\u00ebn e tij nj\u00ebrit nga pal\u00ebt. Klasteri i tret\u00eb \u00ebsht\u00eb n\u00eb tre qendra t\u00eb t\u00eb dh\u00ebnave: nj\u00eb master, dy skllav\u00eb, pa <strong>quorum device<\/strong>. Klasteri i kat\u00ebrt p\u00ebrb\u00ebhet nga kat\u00ebr server\u00eb PostgreSQL, dy n\u00eb \u00e7do qend\u00ebr t\u00eb t\u00eb dh\u00ebnave: nj\u00eb master dhe t\u00eb tjer\u00ebt replika, dhe gjithashtu p\u00ebrdor <em>witness<\/em> c <strong>quorum device<\/strong>. Katri i kat\u00ebrt mbulon d\u00ebshtimin e dy server\u00ebve ose t\u00eb nj\u00eb qendre t\u00eb t\u00eb dh\u00ebnave. Ky zgjidhje mund t\u00eb zgjeroheshe n\u00eb nj\u00eb num\u00ebr m\u00eb t\u00eb madh replikash, n\u00ebse \u00ebsht\u00eb e nevojshme.<\/p>\n<p><\/p>\n<p>Sh\u00ebrbimi i koh\u00ebs s\u00eb sakt\u00eb <noindex><a rel=\"nofollow\" href=\"https:\/\/www.ntp.org\">ntpd<\/a><\/noindex> gjithashtu \u00ebsht\u00eb konfigurue p\u00ebr q\u00ebndrueshm\u00ebri, por atje p\u00ebrdoren metoda e vet <code>ntpd<\/code> (<em>orphan mode<\/em>). Serveri i p\u00ebrgjithsh\u00ebm <em>witness<\/em> luan rolin e serverit qendror NTP, duke shp\u00ebrndar\u00eb koh\u00ebn e tij p\u00ebr t\u00eb gjith\u00eb klaster\u00ebt, duke sinkronizuar k\u00ebshtu t\u00eb gjith\u00eb server\u00ebt mes tyre. N\u00ebse <em>witness<\/em> d\u00ebshton ose \u00ebsht\u00eb i izoluar, at\u00ebher\u00eb nj\u00eb nga server\u00ebt e klasterit do t\u00eb filloj\u00eb t\u00eb shp\u00ebrndaj\u00eb koh\u00ebn e tij (brenda klasterit). Nj\u00eb <strong>HTTP proxy<\/strong> gjithashtu \u00ebsht\u00eb ngritur n\u00eb <em>witness<\/em>, me ndihm\u00ebn e t\u00eb cil\u00ebs virtualkat e tjera kan\u00eb qasje n\u00eb depozit\u00eb Yum. N\u00eb realitet, sh\u00ebrbime t\u00eb tilla si koha e sakt\u00eb dhe proxy, me siguri do t\u00eb vendosen n\u00eb server\u00eb t\u00eb dedikuar, por n\u00eb sken\u00eb ato jan\u00eb vendosur n\u00eb <em>witness<\/em> vet\u00ebm p\u00ebr kursimin e numrit t\u00eb virtualkave dhe hap\u00ebsir\u00ebs.<\/p>\n<p><\/p>\n<h1 id=\"versii\">Versionet<\/h1>\n<p><\/p>\n<p>v0. Punon me CentOS 7 dhe PostgreSQL 11 n\u00eb VirtualBox 6.1.<\/p>\n<p><\/p>\n<h1 id=\"struktura-klasterov\">Struktura e klaster\u00ebve<\/h1>\n<p><\/p>\n<p>T\u00eb gjitha klaster\u00ebt jan\u00eb t\u00eb destinuar p\u00ebr t'u vendosur n\u00eb disa qendra t\u00eb t\u00eb dh\u00ebnave, t\u00eb lidhura n\u00eb nj\u00eb rrjet t\u00eb shesht\u00eb dhe duhet t\u00eb mb\u00ebshtesin d\u00ebshtimin ose izolimin rrjetor t\u00eb nj\u00eb qendre t\u00eb t\u00eb dh\u00ebnave. Prandaj <strong>nuk \u00ebsht\u00eb i mundur<\/strong> p\u00ebrdoret p\u00ebr t\u00eb mbrojtur nga <strong>split-brain<\/strong> teknologji standarde Pacemaker, e quajtur <em>STONITH<\/em> (Shoq\u00ebrimi i Nj\u00eb Nj\u00ebsie Tjet\u00ebr n\u00eb Kok\u00eb) ose <em>fencing<\/em>. Esenca e saj \u00ebsht\u00eb: n\u00ebse nyjet n\u00eb klaster fillojn\u00eb t\u00eb dyshojn\u00eb se ndonj\u00eb nyje ka ndodhur di\u00e7ka e \u00e7uditshme, nuk p\u00ebrgjigjet ose sillen n\u00eb m\u00ebnyr\u00eb jo korrekte, ato e \u00e7aktivizojn\u00eb at\u00eb p\u00ebrmes pajisjeve 't\u00eb jashtme', p\u00ebr shembull, kart\u00ebn kontrolluese IPMI ose UPS. Por kjo do t\u00eb funksionoj\u00eb vet\u00ebm n\u00eb rastet kur, n\u00eb rast d\u00ebshtimi t\u00eb vet\u00ebm t\u00eb serverit, IPMI ose UPS vazhdojn\u00eb t\u00eb funksionojn\u00eb. K\u00ebtu, gjithashtu parashikohet mbrojtja nga nj\u00eb d\u00ebshtim shum\u00eb m\u00eb katastrofik, kur d\u00ebshtojn\u00eb (p.sh. d\u00ebshtojn\u00eb n\u00eb energji) e gjith\u00eb qendra e t\u00eb dh\u00ebnave. N\u00eb rast t\u00eb nj\u00eb d\u00ebshtimi t\u00eb till\u00eb, t\u00eb gjitha <em>stonith<\/em>- pajisjet (IPMI, UPS etj.) gjithashtu nuk do t\u00eb funksionojn\u00eb.<\/p>\n<p><\/p>\n<p>N\u00eb vend t\u00eb k\u00ebsaj, sistemi bazohet n\u00eb iden\u00eb e kvorumit. T\u00eb gjitha nyjet kan\u00eb nj\u00eb z\u00eb, dhe mund t\u00eb punojn\u00eb vet\u00ebm ato q\u00eb shohin m\u00eb shum\u00eb se gjysm\u00eb n\u00eb t\u00eb gjitha nyjet. Ky num\u00ebr 'gjysm\u00eb+1' quhet <strong>kuorum<\/strong>. N\u00ebse nuk arrin t\u00eb arrihet kvorumi, at\u00ebher\u00eb nyja vendos se ndodhet n\u00eb izolim rrjetor dhe duhet t\u00eb \u00e7aktivizoj\u00eb burimet e saj, pra \u00ebsht\u00eb nj\u00eb <strong>mbrojtje nga split-brain<\/strong>. N\u00ebse softi q\u00eb p\u00ebrgjigjet p\u00ebr k\u00ebt\u00eb sjellje nuk funksionon, at\u00ebher\u00eb duhet t\u00eb aktivizohet watchdog, p\u00ebr shembull, n\u00eb baz\u00eb t\u00eb IPMI.<\/p>\n<p><\/p>\n<p>N\u00ebse numri i nyjeve \u00ebsht\u00eb \u00e7ift (klaster n\u00eb dy data center), at\u00ebher\u00eb mund t\u00eb lind\u00eb nj\u00eb pasiguri e till\u00eb e quajtur. <strong>50%\/50%<\/strong> (<em>pes\u00ebdhjet\u00eb p\u00ebr pes\u00ebdhjet\u00eb<\/em>), kur izolimi rrjetor ndan klasterin pik\u00ebrisht n\u00eb mes. Prandaj, p\u00ebr num\u00ebr t\u00eb barabart\u00eb nyjesh, shtohet. <strong>quorum device<\/strong> \u2014 nj\u00eb demon i pad\u00ebshiruesh\u00ebm, i cili mund t\u00eb konceptohet n\u00eb makin\u00ebn virtuale m\u00eb t\u00eb lir\u00eb n\u00eb data center e tret\u00eb. Ai i jep vot\u00ebn nj\u00ebrit prej segmenteve (q\u00eb sheh) dhe k\u00ebshtu zgjidh pasigurin\u00eb 50%\/50%. Serveri ku do t\u00eb aktivizohet pajisja e quorum, un\u00eb e quajta. <em>witness<\/em> (terminologji nga repmgr, m\u00eb p\u00eblqeu).<\/p>\n<p><\/p>\n<p>Burimet mund t\u00eb l\u00ebvizin nga nj\u00eb vend n\u00eb tjetrin, p\u00ebr shembull, nga server\u00ebt e prishur n\u00eb ato t\u00eb rregullt, ose me urdh\u00ebr nga administratoret e sistemeve. Q\u00eb klient\u00ebt t\u00eb din\u00eb se ku ndodhen burimet q\u00eb u nevojiten (ku duhet t\u00eb lidhen?), p\u00ebrdoren. <em>IP t\u00eb l\u00ebvizshme<\/em> (<strong>float IP<\/strong>). K\u00ebto jan\u00eb IP q\u00eb Pacemaker mund t'i l\u00ebviz\u00eb mes nyjeve (t\u00eb gjitha ndodhen n\u00eb nj\u00eb rrjet t\u00eb shesht\u00eb). \u00c7dora nj\u00eb prej tyre simbolizon nj\u00eb burim (sh\u00ebrbim) dhe do t\u00eb jet\u00eb aty ku duhet t\u00eb lidheni p\u00ebr t\u00eb pasur qasje n\u00eb k\u00ebt\u00eb sh\u00ebrbim (n\u00eb rastin ton\u00eb, DB).<\/p>\n<p><\/p>\n<h2 id=\"tuchanka1-shema-s-uplotneniem\">Tuchanka1 (skema me ngjeshje)<\/h2>\n<p><\/p>\n<h3 id=\"struktura\">Struktura<\/h3>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Modelimi i klastereve resiliente mbi baz\u00ebn e PostgreSQL dhe Pacemaker\" src=\"\/wp-content\/uploads\/2020\/08\/5651238e36f4af1c32f117191cf30261.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ideja ishte q\u00eb kishim shum\u00eb baza t\u00eb vogla t\u00eb dh\u00ebnash me ngarkes\u00eb t\u00eb ul\u00ebt, p\u00ebr t\u00eb cilat nuk \u00ebsht\u00eb e leverdishme t\u00eb mbash nj\u00eb server t\u00eb dedikuar slave n\u00eb modalitetin hot standby p\u00ebr transaksionet read only (nuk ka nevoj\u00eb p\u00ebr nj\u00eb shp\u00ebrdorim t\u00eb till\u00eb burimesh).<\/p>\n<p><\/p>\n<p>N\u00eb \u00e7do qend\u00ebr t\u00eb t\u00eb dh\u00ebnave ka nj\u00eb server. N\u00eb \u00e7do server ka dy instanca PostgreSQL (n\u00eb terminologjin\u00eb e PostgreSQL ato quhen klastere, por p\u00ebr t\u00eb shmangur konfuzionin do t'i quaj instanca (n\u00eb p\u00ebrputhje me DB t\u00eb tjera), nd\u00ebrsa klastere do t'i quaj vet\u00ebm klasteret Pacemaker). Nj\u00eb instanc\u00eb punon si master dhe vet\u00ebm ajo ofron sh\u00ebrbime (vet\u00ebm ajo ka IP flotante). Instanca tjet\u00ebr punon si skllave p\u00ebr qendr\u00ebn e dyt\u00eb t\u00eb t\u00eb dh\u00ebnave dhe do t\u00eb ofroj\u00eb sh\u00ebrbime vet\u00ebm n\u00ebse masteri bie. Duke qen\u00eb se p\u00ebr t\u00eb shumt\u00ebn e koh\u00ebs do t\u00eb ofrohet sh\u00ebrbim (do t\u00eb ekzekutohen k\u00ebrkesa) vet\u00ebm nga nj\u00eb instanc\u00eb nga dy (master), t\u00eb gjitha burimet e serverit optimizohen p\u00ebr master (kapaciteti dedikohet p\u00ebr kesh shared_buffers etj.), por gjithashtu kur \u00ebsht\u00eb e nevojshme, ka burime t\u00eb mjaftueshme edhe p\u00ebr instanc\u00ebn tjet\u00ebr (edhe n\u00ebse p\u00ebr nj\u00eb pun\u00eb jo optimale p\u00ebrmes keshit t\u00eb sistemit t\u00eb skedar\u00ebve) p\u00ebr rastin e d\u00ebshtimit t\u00eb nj\u00ebrit nga qendrat e t\u00eb dh\u00ebnave. Skllavi nuk ofron sh\u00ebrbime (nuk ekzekuton k\u00ebrkesa vet\u00ebm p\u00ebr lexim) gjat\u00eb funksionimit normal t\u00eb klasterit, p\u00ebr t\u00eb shmangur luft\u00ebn p\u00ebr burimet me masterin n\u00eb t\u00eb nj\u00ebjtin server.<\/p>\n<p><\/p>\n<p>N\u00eb rastin e dy nyjave, q\u00ebndrueshm\u00ebria ndaj d\u00ebshtimeve \u00ebsht\u00eb e mundur vet\u00ebm me replikim asinkron, sepse n\u00eb rastin e replikimit sinkron, d\u00ebshtimi i skllavit do t\u00eb \u00e7onte n\u00eb ndalimin e masterit.<\/p>\n<p><\/p>\n<h3 id=\"otkaz-witness\">D\u00ebshtimi i witness<\/h3>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Modelimi i klastereve resiliente mbi baz\u00ebn e PostgreSQL dhe Pacemaker\" src=\"\/wp-content\/uploads\/2020\/08\/3c046d13c0c6839de297827ca3a8928b.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>D\u00ebshtimi i witness (<em>quorum device<\/em>) do ta shqyrtoj vet\u00ebm p\u00ebr klasterin Tuchanka1, me t\u00eb gjitha t\u00eb tjer\u00ebt do t\u00eb jet\u00eb e nj\u00ebjta histori. N\u00eb rast d\u00ebshtimi t\u00eb witness, struktura e klasterit nuk do t\u00eb ndryshoj\u00eb, gjith\u00e7ka do t\u00eb vazhdoj\u00eb t\u00eb funksionoj\u00eb si\u00e7 ka punuar. Por kvorumi do t\u00eb b\u00ebhet 2 nga 3, dhe p\u00ebr k\u00ebt\u00eb arsye \u00e7do d\u00ebshtim tjet\u00ebr do t\u00eb b\u00ebhet fatal p\u00ebr klasterin. Sidoqoft\u00eb, do t\u00eb duhet t\u00eb riparoni urgjentisht.<\/p>\n<p><\/p>\n<h3 id=\"otkaz-tuchanka1\">D\u00ebshtimi i Tuchanka1<\/h3>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Modelimi i klastereve resiliente mbi baz\u00ebn e PostgreSQL dhe Pacemaker\" src=\"\/wp-content\/uploads\/2020\/08\/112957293bd682428115e4e93c9f1a96.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>D\u00ebshtimi i nj\u00ebrit nga qendrat e t\u00eb dh\u00ebnave p\u00ebr Tuchanka1. N\u00eb k\u00ebt\u00eb rast <em>witness<\/em> i jep vot\u00ebn e tij nyj\u00ebs s\u00eb dyt\u00eb n\u00eb qendr\u00ebn e dyt\u00eb t\u00eb t\u00eb dh\u00ebnave. Atje, skllavi i dikursh\u00ebm shnd\u00ebrrohet n\u00eb master, si rezultat, t\u00eb dy master\u00ebt punojn\u00eb n\u00eb t\u00eb nj\u00ebjtin server dhe t\u00eb dy IP-t\u00eb e tyre flotante i drejtohen atyre.<\/p>\n<p><\/p>\n<h2 id=\"tuchanka2-klassicheskaya\">Tuchanka2 (klasike)<\/h2>\n<p><\/p>\n<h3 id=\"struktura-1\">Struktura<\/h3>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Modelimi i klastereve resiliente mbi baz\u00ebn e PostgreSQL dhe Pacemaker\" src=\"\/wp-content\/uploads\/2020\/08\/c3af368f823fbd580b4ebb14cc87c750.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Schema klasike me dy nyja. N\u00eb nj\u00eb nyje punon masteri, n\u00eb t\u00eb tjer\u00ebn skllavi. T\u00eb dy mund t\u00eb ekzekutojn\u00eb k\u00ebrkesa (skllavi vet\u00ebm k\u00ebrkesa p\u00ebr lexim), ndaj t\u00eb dy i drejtohen IP flotante: krogan2 \u2014 p\u00ebr master, krogan2s1 \u2014 p\u00ebr skllavin. Do t\u00eb ket\u00eb q\u00ebndrueshm\u00ebri ndaj d\u00ebshtimeve p\u00ebr t\u00eb dy, masterin dhe skllavin.<\/p>\n<p><\/p>\n<p>N\u00eb rastin e dy nyjave, q\u00ebndrueshm\u00ebria ndaj d\u00ebshtimeve \u00ebsht\u00eb e mundur vet\u00ebm me replikim asinkron, sepse n\u00eb rastin e replikimit sinkron, d\u00ebshtimi i skllavit do t\u00eb \u00e7onte n\u00eb ndalimin e masterit.<\/p>\n<p><\/p>\n<h3 id=\"otkaz-tuchanka2\">D\u00ebshtimi i Tuchanka2<\/h3>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Modelimi i klastereve resiliente mbi baz\u00ebn e PostgreSQL dhe Pacemaker\" src=\"\/wp-content\/uploads\/2020\/08\/79bfcaf88c96d8ee16767dcef53741c1.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>N\u00eb rastin e d\u00ebshtimit t\u00eb nj\u00ebrit nga qendrat e t\u00eb dh\u00ebnave <em>witness<\/em> votimi p\u00ebr t\u00eb dytin. N\u00eb qendr\u00ebn e vetme funksionale t\u00eb t\u00eb dh\u00ebnave do t\u00eb ngrihet masteri, dhe t\u00eb dy IP-t\u00eb fluturues do t\u00eb tregojn\u00eb n\u00eb t\u00eb: masteri dhe skllavi. Sigurisht, instance duhet t\u00eb jet\u00eb e konfiguruar n\u00eb nj\u00eb m\u00ebnyr\u00eb q\u00eb t\u00eb ket\u00eb burime t\u00eb mjaftueshme (p\u00ebr kufizimet n\u00ebn lidhje etj.) p\u00ebr t\u00eb pranuar n\u00eb t\u00eb nj\u00ebjt\u00ebn koh\u00eb t\u00eb gjitha lidhjet dhe k\u00ebrkesat nga masteri dhe skllavi. Prandaj, gjat\u00eb funksionimit normal, ai duhet t\u00eb ket\u00eb nj\u00eb rezerv\u00eb t\u00eb mjaftueshme p\u00ebr kufizimet.<\/p>\n<p><\/p>\n<h2 id=\"tuchanka4-mnogo-rabov\">Tuchanka4 (shum\u00eb skllev\u00ebr)<\/h2>\n<p><\/p>\n<h3 id=\"struktura-2\">Struktura<\/h3>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Modelimi i klastereve resiliente mbi baz\u00ebn e PostgreSQL dhe Pacemaker\" src=\"\/wp-content\/uploads\/2020\/08\/17819fd97847f0573d429e422d799bc1.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kjo \u00ebsht\u00eb nj\u00eb tjet\u00ebr ekstrem. Ka Baza t\u00eb Dh\u00ebnash ku ka shum\u00eb k\u00ebrkesa read-only (rasisti tipik i nj\u00eb uebi me ngarkes\u00eb t\u00eb lart\u00eb). Tuchanka4 \u00ebsht\u00eb situata kur skllev\u00ebr mund t\u00eb jen\u00eb tre ose m\u00eb shum\u00eb p\u00ebr t\u00eb trajtuar k\u00ebto k\u00ebrkesa, por p\u00ebr t\u00eb mos pasur shum\u00eb. Kur ka nj\u00eb num\u00ebr shum\u00eb t\u00eb madh skllev\u00ebr, do t\u00eb duhet t\u00eb shpikni nj\u00eb sistem hierarkik replikimi. N\u00eb rastin minimal (n\u00eb figur\u00eb) n\u00eb secil\u00ebn prej dy qendrave t\u00eb t\u00eb dh\u00ebnave ndodhen nga dy server\u00eb, n\u00eb secilin prej t\u00eb cil\u00ebve ka nga nj\u00eb instance PostgreSQL.<\/p>\n<p><\/p>\n<p>Nj\u00eb ve\u00e7ori tjet\u00ebr e k\u00ebsaj skeme \u00ebsht\u00eb se k\u00ebtu mund t\u00eb organizohet nj\u00eb replikim i nj\u00ebansh\u00ebm. Ai \u00ebsht\u00eb konfiguruar n\u00eb m\u00ebnyr\u00eb q\u00eb t\u00eb replikoj\u00eb, sa m\u00eb shum\u00eb t\u00eb jet\u00eb e mundur, n\u00eb nj\u00eb qend\u00ebr t\u00eb dh\u00ebnash tjet\u00ebr, dhe jo n\u00eb nj\u00eb replik\u00eb n\u00eb t\u00eb nj\u00ebjt\u00ebn qend\u00ebr t\u00eb dh\u00ebnash si masteri. N\u00eb master dhe n\u00eb secilin skllav tregohet IP fluturuese. N\u00eb rastin ideal, mes skllev\u00ebrve do t\u00eb duhet t\u00eb b\u00ebhet balancimi i k\u00ebrkesave me ndonj\u00eb <em>sql proxy<\/em>, p\u00ebr shembull, n\u00eb an\u00ebn e klientit. Nj\u00eb lloj i ndrysh\u00ebm klient\u00ebsh mund t\u00eb k\u00ebrkoj\u00eb nj\u00eb lloj t\u00eb ndrysh\u00ebm <em>sql proxy<\/em>, dhe vet\u00ebm zhvilluesit e klient\u00ebve e din\u00eb se kujt i nevojitet \u00e7far\u00eb. Kjo funksionalitet mund t\u00eb realizohet si nga nj\u00eb demon t\u00eb jasht\u00ebm, ashtu edhe nga nj\u00eb bibliotek\u00eb klienti (connection pool), etj. T\u00eb gjitha k\u00ebto dalin jasht\u00eb k\u00ebsaj teme t\u00eb klas\u00ebs s\u00eb dh\u00ebnash me toleranc\u00eb ndaj d\u00ebshtimit (toleranc\u00eb ndaj d\u00ebshtimit <em>SQL proxy<\/em> mund t\u00eb realizohet n\u00eb m\u00ebnyr\u00eb t\u00eb pavarur, s\u00eb bashku me toleranc\u00ebn e klientit).<\/p>\n<p><\/p>\n<h3 id=\"otkaz-tuchanka4\">D\u00ebshtimi Tuchanka4<\/h3>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Modelimi i klastereve resiliente mbi baz\u00ebn e PostgreSQL dhe Pacemaker\" src=\"\/wp-content\/uploads\/2020\/08\/e005ae90ffd63abdb272012b94735618.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kur ndodh d\u00ebshtimi i nj\u00eb qendre t\u00eb dh\u00ebnash (dmth. dy server\u00eb), witness voton p\u00ebr t\u00eb dytin. Si rezultat, n\u00eb qendr\u00ebn e dyt\u00eb t\u00eb t\u00eb dh\u00ebnave funksionojn\u00eb dy server\u00eb: n\u00eb nj\u00eb funksionon masteri, dhe n\u00eb t\u00eb tregohet IP fluturuese p\u00ebr masterin (p\u00ebr t\u00eb pranuar k\u00ebrkesa read-write); dhe n\u00eb serverin e dyt\u00eb funksionon skllavi me replikim t\u00eb nj\u00ebansh\u00ebm, dhe n\u00eb t\u00eb tregohet nj\u00eb nga IP-t\u00eb flutruese t\u00eb skllavit (p\u00ebr k\u00ebrkesat read only).<\/p>\n<p><\/p>\n<p>E para q\u00eb duhet t\u00eb theksohet: IP fluturuese e skllavit do t\u00eb jet\u00eb vet\u00ebm nj\u00eb, dhe p\u00ebr funksionim t\u00eb duhur me t\u00eb, do t\u00eb nevojitet q\u00eb <em>sql proxy<\/em> ka drejtonte t\u00eb gjitha k\u00ebrkesat n\u00eb IP-n\u00eb e mbetur float; dhe n\u00ebse <em>sql proxy<\/em> jo, mund t\u00eb renditni t\u00eb gjitha IP-t\u00eb float t\u00eb skllev\u00ebrve me presje n\u00eb URL p\u00ebr lidhje. N\u00eb k\u00ebt\u00eb rast me <em>libpq<\/em> lidhja do t\u00eb jet\u00eb me IP-n\u00eb e par\u00eb punuese, ashtu si\u00e7 \u00ebsht\u00eb b\u00ebr\u00eb n\u00eb sistemin e testimit automatik. Ndoshta, n\u00eb biblioteka t\u00eb tjera, si JDBC, kjo nuk do t\u00eb funksionoj\u00eb dhe \u00ebsht\u00eb e nevojshme <em>sql proxy<\/em>. Kjo \u00ebsht\u00eb b\u00ebr\u00eb sepse ka nj\u00eb ndalim p\u00ebr t\u00eb ngritur nj\u00ebkoh\u00ebsisht IP-t\u00eb float p\u00ebr skllev\u00ebrit n\u00eb nj\u00eb server, p\u00ebr t'i shp\u00ebrndar\u00eb ato n\u00eb m\u00ebnyr\u00eb t\u00eb barabart\u00eb n\u00eb server\u00ebt e skllev\u00ebrve, n\u00ebse punohet me disa.<\/p>\n<p><\/p>\n<p>E dyta: madje n\u00eb rastin e d\u00ebshtimit t\u00eb qendr\u00ebs s\u00eb t\u00eb dh\u00ebnave, do t\u00eb ruhet replikimi sinkron. Dhe madje n\u00ebse ndodh nj\u00eb d\u00ebshtim i dyt\u00eb, dometh\u00ebn\u00eb n\u00eb qendr\u00ebn e mbetur, nj\u00eb nga dy server\u00ebt d\u00ebshtojn\u00eb, klasteri edhe pse do t\u00eb ndaloj\u00eb ofrimin e sh\u00ebrbimeve, do t\u00eb ruaj\u00eb informacionin p\u00ebr t\u00eb gjitha transaksionet e angazhuara, p\u00ebr t\u00eb cilat ai dha nj\u00eb konfirmim p\u00ebr angazhimin (nuk do t\u00eb ket\u00eb humbje informacioni n\u00eb rastin e d\u00ebshtimit t\u00eb dyt\u00eb).<\/p>\n<p><\/p>\n<h2 id=\"tuchanka3-3-data-centra\">Tuchanka3 (3 qendra t\u00eb dh\u00ebnash)<\/h2>\n<p><\/p>\n<h3 id=\"struktura-3\">Struktura<\/h3>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Modelimi i klastereve resiliente mbi baz\u00ebn e PostgreSQL dhe Pacemaker\" src=\"\/wp-content\/uploads\/2020\/08\/e11f9884b92fe20a63b5080ae8c7f82b.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ky \u00ebsht\u00eb nj\u00eb klaster p\u00ebr nj\u00eb situat\u00eb kur ka tre qendra t\u00eb plota t\u00eb t\u00eb dh\u00ebnave n\u00eb funksionim, n\u00eb secil\u00ebn prej t\u00eb cilave ka nj\u00eb server t\u00eb DB n\u00eb funksionim. N\u00eb k\u00ebt\u00eb rast <em>quorum device<\/em> nuk \u00ebsht\u00eb e nevojshme. N\u00eb nj\u00eb qend\u00ebr t\u00eb t\u00eb dh\u00ebnave punon masteri, n\u00eb dy t\u00eb tjera jan\u00eb skllev\u00ebr. Replikimi \u00ebsht\u00eb sinkron, lloji ANY (slave1, slave2), dometh\u00ebn\u00eb klienti do t\u00eb marr\u00eb konfirmimin e angazhimit, kur ndonj\u00eb nga skllev\u00ebrit e para t\u00eb p\u00ebrgjigjet q\u00eb ka pranuar angazhimin. Burimet indikojn\u00eb nj\u00eb IP float p\u00ebr masterin dhe dy p\u00ebr skllev\u00ebrit. Ndryshe nga Tuchanka4, t\u00eb gjitha tre IP-t\u00eb float jan\u00eb t\u00eb disponueshme. P\u00ebr balancimin e k\u00ebrkesave SQL read-only mund t\u00eb p\u00ebrdorin <em>sql proxy<\/em> (me disponueshm\u00ebri t\u00eb ve\u00e7ant\u00eb), ose t\u00eb caktuar nj\u00eb IP float skllev\u00ebr p\u00ebr gjysm\u00ebn e klient\u00ebve, nd\u00ebrsa gjysm\u00ebs tjet\u00ebr nj\u00eb IP float tjet\u00ebr.<\/p>\n<p><\/p>\n<h3 id=\"otkaz-tuchanka3\">D\u00ebshtimi Tuchanka3<\/h3>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Modelimi i klastereve resiliente mbi baz\u00ebn e PostgreSQL dhe Pacemaker\" src=\"\/wp-content\/uploads\/2020\/08\/1e61158be3c23742384d3621e8f7896b.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>N\u00eb rastin e d\u00ebshtimit t\u00eb nj\u00eb nga qendrat e t\u00eb dh\u00ebnave, mbeten dy. Nj\u00ebra ka ngritur masterin dhe IP-n\u00eb float nga masteri, n\u00eb tjetr\u00ebn ka skllev\u00ebr dhe t\u00eb dyja IP-t\u00eb float t\u00eb skllev\u00ebrve (n\u00eb instanc\u00eb duhet t\u00eb ket\u00eb rezerv\u00eb dyfish p\u00ebr burimet, p\u00ebr t\u00eb pranuar t\u00eb gjitha lidhjet nga t\u00eb dyja IP-t\u00eb float t\u00eb skllev\u00ebrve). Nd\u00ebrmjet master\u00ebve dhe skllev\u00ebrit ekziston replikimi sinkron. Gjithashtu klasteri do t\u00eb ruaj\u00eb informacionin p\u00ebr transaksionet e angazhuara dhe t\u00eb konfirmuara (nuk do t\u00eb ket\u00eb humbje informacioni) n\u00eb rastin e shkat\u00ebrrimit t\u00eb dy qendrave t\u00eb t\u00eb dh\u00ebnave (n\u00ebse ato jan\u00eb shkat\u00ebrruar jo nj\u00ebkoh\u00ebsisht).<\/p>\n<p><\/p>\n<p><em>Un\u00eb vendosa t\u00eb mos p\u00ebrfshij nj\u00eb p\u00ebrshkrim t\u00eb detajuar t\u00eb struktur\u00ebs s\u00eb skedar\u00ebve dhe shp\u00ebrndarjes. Kush do t\u00eb doj\u00eb t\u00eb eksperimentoj\u00eb, mund ta lexoj\u00eb t\u00eb gjith\u00eb k\u00ebt\u00eb n\u00eb README. Un\u00eb po jap vet\u00ebm p\u00ebrshkrimin e testimit automatik.<\/em><\/p>\n<p><\/p>\n<h1 id=\"sistema-avtomaticheskogo-testirovaniya\">Sistemi i testimit automatizuar<\/h1>\n<p><\/p>\n<p>P\u00ebr t\u00eb verifikuar q\u00ebndrueshm\u00ebrin\u00eb e klaster\u00ebve me simuluar defekte t\u00eb ndryshme u krijua nj\u00eb sistem testimi automatik. Aktivizohet me nj\u00eb skript <code>test\/failure<\/code>. Skripti mund t\u00eb pranoj\u00eb si parametra numrat e klaster\u00ebve q\u00eb d\u00ebshironi t\u00eb testoni. P\u00ebr shembull, kjo komand\u00eb:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">test\/failure 2 3<\/code><\/pre>\n<p><\/p>\n<p>do t\u00eb testoj\u00eb vet\u00ebm klasterin e dyt\u00eb dhe t\u00eb tret\u00eb. N\u00ebse parametrat nuk jan\u00eb t\u00eb specifikuar, t\u00eb gjitha klaster\u00ebt do t\u00eb testohen. T\u00eb gjitha klaster\u00ebt testohen paralelisht, dhe rezultati shfaqet n\u00eb panelin tmux. Tmux p\u00ebrdor nj\u00eb server t\u00eb dedikuar tmux, k\u00ebshtu q\u00eb skripti mund t\u00eb aktivizohet nga tmux default, duke krijuar nj\u00eb tmux t\u00eb brendsh\u00ebm. Rekomandoj t\u00eb p\u00ebrdorni terminalin n\u00eb nj\u00eb dritare t\u00eb madhe dhe me nj\u00eb shkronj\u00eb t\u00eb vog\u00ebl. Para fillimit t\u00eb testimit, t\u00eb gjitha virtualkat rikthehen n\u00eb nj\u00eb snapshot n\u00eb momentin kur skripti p\u00ebrfundon. <code>setup<\/code>.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Modelimi i klastereve resiliente mbi baz\u00ebn e PostgreSQL dhe Pacemaker\" src=\"\/wp-content\/uploads\/2020\/08\/b546bab1ebbbe365991e1ff3d1667237.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Terminali \u00ebsht\u00eb ndar\u00eb n\u00eb kolona n\u00eb p\u00ebrputhje me numrin e klaster\u00ebve q\u00eb po testohen, n\u00eb parazgjedhje (n\u00eb screenshot) ato jan\u00eb kat\u00ebr. Un\u00eb do ta shqiptoj p\u00ebrmbajtjen e kolonave me shembullin Tuchanka2. Panelet n\u00eb screenshot jan\u00eb t\u00eb num\u00ebruara:<\/p>\n<p><\/p>\n<ol>\n<li>K\u00ebtu shfaqet statistika mbi testet. Kolonat:\n<ul>\n<li><strong>failure<\/strong> \u2014 emri i testit (funksioni n\u00eb skript), i cili simulohet nj\u00eb defekt.<\/li>\n<li><strong>reaction<\/strong> \u2014 koha mesatare aritmetike n\u00eb sekonda, p\u00ebr t\u00eb cil\u00ebn klasteri ka rikuperuar funksionalitetin e tij. Matet nga fillimi i pun\u00ebs s\u00eb skriptit q\u00eb simuli nj\u00eb defekt, deri n\u00eb momentin kur klasteri rikuperon funksionalitetin e tij dhe \u00ebsht\u00eb n\u00eb gjendje t\u00eb vazhdoj\u00eb ofrimin e sh\u00ebrbimeve. N\u00ebse koha \u00ebsht\u00eb shum\u00eb e vog\u00ebl, p\u00ebr shembull, gjasht\u00eb sekonda (ndodh n\u00eb klaster\u00ebt me disa skllev\u00ebr (Tuchanka3 dhe Tuchanka4)), kjo do t\u00eb thot\u00eb se defekti ndodhi n\u00eb nj\u00eb skllav asinkron dhe nuk ndikohet asgj\u00eb n\u00eb funksionalitet, nuk pati nd\u00ebrrime t\u00eb gjendjes s\u00eb klasterit.<\/li>\n<li><strong>deviation<\/strong> \u2014 tregon shp\u00ebrndarjen (sakt\u00ebsin\u00eb) e vler\u00ebs <strong>reaction<\/strong> me metod\u00ebn \"n\u00ebnshkall\u00eb\".<\/li>\n<li><strong>count<\/strong> \u2014 sa her\u00eb \u00ebsht\u00eb realizuar ky test.<\/li>\n<\/ul>\n<\/li>\n<li>Nj\u00eb ditar i shkurt\u00ebr lejon vler\u00ebsimin se \u00e7far\u00eb po b\u00ebn klasteri n\u00eb momentin e tanish\u00ebm. Shfaqet numri i iteracionit (testit), marka e koh\u00ebs dhe emri i operacionit. Nj\u00eb p\u00ebrfundim i tejet i gjat\u00eb (&gt; 5 minuta) tregon p\u00ebr nj\u00eb problem.<\/li>\n<li><strong>heart<\/strong> (zemra) \u2014 koha aktuale. P\u00ebr vler\u00ebsim vizual t\u00eb funksionimit <em>majstori<\/em> n\u00eb tabel\u00ebn e tij shkruhet vazhdimisht koha aktuale duke p\u00ebrdorur IP-n\u00eb float t\u00eb majstor. N\u00eb rast suksesi, rezultati shfaqet n\u00eb k\u00ebt\u00eb panel.<\/li>\n<li><strong>rrahje<\/strong> (puls) \u2014 \u00abkoha aktuale\u00bb, e cila m\u00eb par\u00eb ishte regjistruar nga skripti <strong>heart<\/strong> n\u00eb majstor, tani lexoh\u00ebt nga <em>robi<\/em> p\u00ebrmes IP-s\u00eb s\u00eb tij float. Lejon vler\u00ebsimin vizual t\u00eb funksionimit t\u00eb rob at dhe replikimi. N\u00eb Tuchanka1 nuk ka rob\u00ebr me IP float (nuk ka rob\u00ebr q\u00eb ofrojn\u00eb sh\u00ebrbime), por aty ka dy instanca (DB), prandaj k\u00ebtu do t\u00eb shfaqet jo <strong>rrahje<\/strong>, nd\u00ebrsa <strong>heart<\/strong> instanc\u00ebs s\u00eb dyt\u00eb.<\/li>\n<li>Monitorimi i gjendjes s\u00eb klasterit duke p\u00ebrdorur utilitarin <code>pcs mon<\/code>. Tregon struktur\u00ebn, shp\u00ebrndarjen e burimeve sipas nyjeve dhe informacion tjet\u00ebr t\u00eb dobish\u00ebm.<\/li>\n<li>K\u00ebtu shfaqet monitorimi sistematik nga \u00e7do virtuale e klasterit. Ka panele t\u00eb tilla dhe m\u00eb shum\u00eb \u2014 sa virtuale ka klasteri. Dy grafika <em>Ngarkesa CPU<\/em> (n\u00eb virtuale jan\u00eb dy procesor\u00eb), emri i virtuales, <em>Ngarkesa e Sistem\u00ebs<\/em> (e quajtur si Ngarkesa Mesatare, sepse \u00ebsht\u00eb e mesatarizuar p\u00ebr 5, 10 dhe 15 minuta), t\u00eb dh\u00ebnat p\u00ebr proceset dhe shp\u00ebrndarja e memories.<\/li>\n<li>Gjurmimi i skriptit q\u00eb kryen testet. N\u00eb rast t\u00eb defektit \u2014 ndalimi papritur i pun\u00ebs ose nj\u00eb cikli t\u00eb pafund pritjeje \u2014 k\u00ebtu mund t\u00eb shihni shkakun e nj\u00eb sjelljeje t\u00eb till\u00eb.<\/li>\n<\/ol>\n<p><\/p>\n<p>Testimi b\u00ebhet n\u00eb dy etapa. Fillimisht, skripti kalon p\u00ebrmes t\u00eb gjitha llojeve t\u00eb testeve, duke zgjedhur rast\u00ebsisht nj\u00eb virtuale, ku ky test aplikon. Pastaj kryhet nj\u00eb cik\u00ebl t\u00eb pafund testimi, virtualet dhe defekti zgjidhen \u00e7do her\u00eb rast\u00ebsisht. Ndalimi papritur i skriptit t\u00eb testit (pjesa e poshtme) ose nj\u00eb cik\u00ebl i pafund pritjeje p\u00ebr di\u00e7ka (&gt; 5 minuta koha e ekzekutimit t\u00eb nj\u00eb operacioni, kjo \u00ebsht\u00eb e dukshme n\u00eb gjurmim) tregon se ndonj\u00eb test n\u00eb k\u00ebt\u00eb klaster ka d\u00ebshtuar.<\/p>\n<p><\/p>\n<p>Secili test p\u00ebrb\u00ebhet nga operacione t\u00eb m\u00ebposhtme:<\/p>\n<p><\/p>\n<ol>\n<li>Fillimi i funksionit, duke imituar defektin.<\/li>\n<li><strong>Gati?<\/strong> \u2014 pritja p\u00ebr rikuperimin e funksionimit t\u00eb klasterit (kur ofrohen t\u00eb gjitha sh\u00ebrbimet).<\/li>\n<li>Shfaqet koha e pritjes p\u00ebr rikuperimin e klasterit (<em>reaction<\/em>).<\/li>\n<li><strong>Riparo<\/strong> \u2014 klasteri \"po riparohet\". Pas k\u00ebsaj, ai duhet t\u00eb kthehet n\u00eb nj\u00eb gjendje t\u00eb plot\u00eb funksionimi dhe gatishm\u00ebri p\u00ebr defektin e ardhsh\u00ebm.<\/li>\n<\/ol>\n<p><\/p>\n<p>Ja lista e testeve me p\u00ebrshkrimin se \u00e7far\u00eb b\u00ebjn\u00eb:<\/p>\n<p><\/p>\n<ul>\n<li><strong>ForkBomb<\/strong>: krijon \"Out of memory\" me an\u00eb t\u00eb nj\u00eb bomb\u00eb fork.<\/li>\n<li><strong>OutOfSpace<\/strong>: mbush me t\u00eb dh\u00ebna. Por testi, n\u00eb fakt, \u00ebsht\u00eb simbolik, duke pasur parasysh ngarkes\u00ebn e vog\u00ebl q\u00eb krijohet gjat\u00eb testimit, n\u00eb rastin e mbushjes s\u00eb mbajt\u00ebsit nuk ndodhin zakonisht d\u00ebshtime t\u00eb PostgreSQL.<\/li>\n<li><strong>Postgres-KILL<\/strong>: vret PostgreSQL me komand\u00ebn <code>killall -KILL postgres<\/code>.<\/li>\n<li><strong>Postgres-STOP<\/strong>: pezullon PostgreSQL me komand\u00ebn <code>killall -STOP postgres<\/code>.<\/li>\n<li><strong>PowerOff<\/strong>: \u201end\u00ebrron energjin\u00eb\u201d e makineris\u00eb virtuale me komand\u00ebn <code>VBoxManage controlvm \"virtual machine\" poweroff<\/code>.<\/li>\n<li><strong>Reset<\/strong>: riboton makinerin\u00eb virtuale me komand\u00ebn <code>VBoxManage controlvm \"virtual machine\" reset<\/code>.<\/li>\n<li><strong>SBD-STOP<\/strong>: pezullon demonin SBD me komand\u00ebn <code>killall -STOP sbd<\/code>.<\/li>\n<li><strong>ShutDown<\/strong>: d\u00ebrgon komand\u00ebn n\u00eb makinerin\u00eb virtuale p\u00ebrmes SSH <code>systemctl poweroff<\/code>, sistemi p\u00ebrfundon pun\u00ebn si\u00e7 duhet.<\/li>\n<li><strong>UnLink<\/strong>: izolim rrjeti, komand\u00eb <code>VBoxManage controlvm \"virtual machine\" setlinkstate1 off<\/code>.<\/li>\n<\/ul>\n<p><\/p>\n<p>Mbyllja e testimit gjithashtu me komand\u00ebn standarde tmux \"kill-window\" <strong>Ctrl-b &amp;<\/strong>, ose me komand\u00ebn \"detach-client\" <strong>Ctrl-b d<\/strong>: n\u00eb k\u00ebt\u00eb rast testi \u00ebsht\u00eb mbyllur, tmux mbyllet, makinerit\u00eb virtuale p\u00ebrfundojn\u00eb.<\/p>\n<p><\/p>\n<h1 id=\"vyyavlennye-pri-testirovanii-problemy\">Problemet e zbuluara gjat\u00eb testimit<\/h1>\n<p><\/p>\n<ul>\n<li>\n<p>N\u00eb k\u00ebt\u00eb moment <em>demonin sbd<\/em> p\u00ebrpunon ndalimin e demon\u00ebve t\u00eb monitoruar, por jo ngjalljen e tyre. Dhe, si pasoj\u00eb, d\u00ebshtimet e pap\u00ebrshtatshme trajtohen n\u00eb m\u00ebnyr\u00eb t\u00eb pasakt\u00eb, duke \u00e7uar n\u00eb ngjallje vet\u00ebm <em>Corosync<\/em> dhe <em>Pacemaker<\/em>, por pa i pezulluar <em>sbd<\/em>. P\u00ebr verifikim <em>Corosync<\/em> ve\u00e7se ekziston <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/ClusterLabs\/sbd\/pull\/83\"><strong>PR#83<\/strong> (n\u00eb GitHub te <em>sbd<\/em>)<\/a><\/noindex>, miratuar n\u00eb deg\u00ebn <em>master<\/em>. Premtuan (n\u00eb PR#83), se do t\u00eb ket\u00eb di\u00e7ka t\u00eb ngjashme edhe p\u00ebr Pacemaker, shpresojm\u00eb q\u00eb n\u00eb <em>RedHat 8<\/em> t\u00eb b\u00ebhet. Por k\u00ebto \"d\u00ebshtime\" jan\u00eb teorike, leht\u00eb mund t\u00eb imitohet n\u00eb m\u00ebnyr\u00eb artificiale duke p\u00ebrdorur, p\u00ebr shembull, <code>killall -STOP corosync<\/code>, por nuk ndodhin kurr\u00eb n\u00eb jet\u00ebn reale.<\/p>\n<p>\n<\/li>\n<li>\n<p>Me <em>Pacemaker<\/em> n\u00eb versionin p\u00ebr <em>CentOS 7<\/em> nuk \u00ebsht\u00eb vendosur sakt\u00eb <em>sync_timeout<\/em> i <em>quorum device<\/em>, si rezultat <noindex><a rel=\"nofollow\" href=\"https:\/\/lists.clusterlabs.org\/pipermail\/users\/2019-August\/026145.html\">n\u00eb rastin e d\u00ebshtimit t\u00eb nj\u00eb nyje me nj\u00eb probabilitet t\u00eb caktuar edhe nyja tjet\u00ebr<\/a><\/noindex>, n\u00eb t\u00eb cil\u00ebn duhet t\u00eb kalonte masteri. U zgjidh me rritjen <em>sync_timeout<\/em> i <em>quorum device<\/em> gjasave gjat\u00eb p\u00ebrgatitjes (n\u00eb skriptin <code>setup\/setup1<\/code>). Ky korrigjim nuk u pranua nga zhvilluesit <em>Pacemaker<\/em>, p\u00ebrkundrazi ata premtuan t\u00eb rishikojn\u00eb infrastruktur\u00ebn n\u00eb nj\u00eb m\u00ebnyr\u00eb t\u00eb till\u00eb (n\u00eb nj\u00eb t\u00eb ardhme t\u00eb paqart\u00eb), q\u00eb ky koh\u00ebzgjatje t\u00eb llogaritet automatikisht.<\/p>\n<p>\n<\/li>\n<li>\n<p>N\u00ebse gjat\u00eb konfigurimit t\u00eb baz\u00ebs s\u00eb t\u00eb dh\u00ebnave, \u00ebsht\u00eb treguar se n\u00eb <code>LC_MESSAGES<\/code> (mesazhet tekstuale) mund t\u00eb p\u00ebrdoret Unicode, p\u00ebr shembull, <code>ru_RU.UTF-8<\/code>, at\u00ebher\u00eb gjat\u00eb aktivizimit <em>postgres<\/em> n\u00eb nj\u00eb ambient ku locale nuk \u00ebsht\u00eb UTF-8, le t\u00eb themi, n\u00eb nj\u00eb ambient t\u00eb zbraz\u00ebt (k\u00ebtu <em>pacemaker<\/em>+<em>pgsqlms<\/em>(paf) aktivizon <em>postgres<\/em>), at\u00ebher\u00eb <noindex><a rel=\"nofollow\" href=\"https:\/\/www.postgresql.org\/message-id\/13FE0F7C-5140-499C-8C2E-0BE64BC3A48B%40ya.ru\">n\u00eb logun e vendit t\u00eb shkronjave UTF-8 do t\u00eb ken\u00eb shenja pyetjesh<\/a><\/noindex>. Zhvilluesit e PostgreSQL nuk jan\u00eb arritur q\u00eb t\u00eb bien dakord se \u00e7far\u00eb t\u00eb b\u00ebjn\u00eb n\u00eb k\u00ebt\u00eb rast. Kjo b\u00ebn q\u00eb duhet t\u00eb vendoset <code>LC_MESSAGES=en_US.UTF-8<\/code> gjate konfigurimit (krijimit) t\u00eb nj\u00eb instance t\u00eb Baza e t\u00eb Dh\u00ebnave.<\/p>\n<p>\n<\/li>\n<li>\n<p>N\u00ebse \u00ebsht\u00eb vendosur wal_receiver_timeout (n\u00eb m\u00ebnyr\u00eb t\u00eb parazgjedhur \u00ebsht\u00eb 60s), at\u00ebher\u00eb gjat\u00eb testit PostgreSQL-STOP n\u00eb master n\u00eb klasteret tuchanka3 dhe tuchanka4 <noindex><a rel=\"nofollow\" href=\"https:\/\/www.postgresql.org\/message-id\/60590EC6-4062-4F25-A49C-3948ED2A7D47%40ya.ru\">nuk ndodh ribashkimi i replikimit me masterin e ri<\/a><\/noindex>. Replikimi atje \u00ebsht\u00eb sinkron, prandaj ndalon jo vet\u00ebm pun\u00ebtori, por edhe masteri i ri. Zgjidhet duke vendosur wal_receiver_timeout=0 gjat\u00eb konfigurimit t\u00eb PostgreSQL.<\/p>\n<p>\n<\/li>\n<li>\n<p>Her\u00eb pas here kam v\u00ebn\u00eb re pezullimin e replikimit n\u00eb PostgreSQL gjat\u00eb testit ForkBomb (mbipakosja e memories). <noindex><a rel=\"nofollow\" href=\"https:\/\/www.postgresql.org\/message-id\/60590EC6-4062-4F25-A49C-3948ED2A7D47%40ya.ru\">Pas ForkBomb ndonj\u00ebher\u00eb pun\u00ebtor\u00ebt mund t\u00eb mos ribashkohen me masterin e ri<\/a><\/noindex>. Kam hasur nj\u00eb t\u00eb till\u00eb vet\u00ebm n\u00eb klasteret tuchanka3 dhe tuchanka4, ku p\u00ebr shkak se replikimi \u00ebsht\u00eb sinkron, masteri ka pezulluar. Problemi kaloi vet\u00eb, pas nj\u00eb kohe t\u00eb gjat\u00eb (af\u00ebr dy or\u00ebsh). K\u00ebrkohet hetim shtes\u00eb p\u00ebr ta zgjidhur k\u00ebt\u00eb. Nga simptomat duket si nj\u00eb gabim i m\u00ebparsh\u00ebm, i shkaktuar nga nj\u00eb arsye tjet\u00ebr, por me pasoja t\u00eb ngjashme.<\/p>\n<p>\n<\/li>\n<\/ul>\n<p><\/p>\n<p>Imazhi i kroganit \u00ebsht\u00eb marr\u00eb nga <noindex><a rel=\"nofollow\" href=\"http:\/\/fav.me\/d8fo42n\">Deviant Art<\/a><\/noindex> me lejen e autorit:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Modelimi i klastereve resiliente mbi baz\u00ebn e PostgreSQL dhe Pacemaker\" src=\"\/wp-content\/uploads\/2020\/08\/ded1ead387814d97d84d0fb89e025386.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Burimi: <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.2 - 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\/sq\/blog\/administrirovanie\/modelirovanie-otkazoustojchivyh-klasterov-na-baze-postgresql-i-pacemaker\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"sq_AL\" \/>\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\/sq\/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\udd47Modelimi i klastereve t\u00eb q\u00ebndrueshme n\u00eb baz\u00eb t\u00eb PostgreSQL dhe Pacemaker | ProHoster","description":"Hyrje Para disa koh\u00ebsh, m\u00eb \u00ebsht\u00eb dh\u00ebn\u00eb detyra p\u00ebr t\u00eb zhvilluar nj\u00eb klaster t\u00eb q\u00ebndruesh\u00ebm p\u00ebr PostgreSQL.","canonical_url":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/modelirovanie-otkazoustojchivyh-klasterov-na-baze-postgresql-i-pacemaker","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sq_AL","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\/sq\/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\/sq\/wp-json\/wp\/v2\/posts\/92570","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/comments?post=92570"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts\/92570\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/media\/92571"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/media?parent=92570"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/categories?post=92570"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/tags?post=92570"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}