{"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 klaster\u00ebve t\u00eb q\u00ebndruesh\u00ebm 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>Para nj\u00eb koh\u00eb, m\u00eb \u00ebsht\u00eb dh\u00ebn\u00eb detyra p\u00ebr t\u00eb zhvilluar nj\u00eb klaster t\u00eb q\u00ebndruesh\u00ebm p\u00ebr <noindex><a rel=\"nofollow\" href=\"https:\/\/www.postgresql.org\">PostgreSQL<\/a><\/noindex>, q\u00eb funksionon n\u00eb disa qendra t\u00eb t\u00eb dh\u00ebnave t\u00eb lidhura me fibra optike brenda nj\u00eb qyteti, dhe q\u00eb \u00ebsht\u00eb n\u00eb gjendje t\u00eb p\u00ebrballoj\u00eb d\u00ebshtimin (p.sh., munges\u00ebn e energjis\u00eb) t\u00eb nj\u00eb qendre t\u00eb t\u00eb dh\u00ebnave. Si softuer q\u00eb responsabon p\u00ebr q\u00ebndrueshm\u00ebrin\u00eb, kam zgjedhur <noindex><a rel=\"nofollow\" href=\"https:\/\/clusterlabs.org\">Pacemaker<\/a><\/noindex>, sepse \u00ebsht\u00eb zgjidhja zyrtare nga RedHat p\u00ebr krijimin e klaster\u00ebve t\u00eb q\u00ebndruesh\u00ebm. Ajo \u00ebsht\u00eb e mir\u00eb sepse RedHat e mb\u00ebshtet at\u00eb, dhe sepse kjo zgjidhje \u00ebsht\u00eb universale (modulare). N\u00ebp\u00ebrmjet saj, mund t\u00eb sigurohet q\u00ebndrueshm\u00ebria jo vet\u00ebm p\u00ebr PostgreSQL, por edhe p\u00ebr sh\u00ebrbime t\u00eb tjera, ose duke p\u00ebrdorur modulet standarde, ose duke krijuar ato p\u00ebr nevojat specifike.<\/p>\n<p><\/p>\n<p>P\u00ebr 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 hetuar k\u00ebt\u00eb, kam zhvilluar nj\u00eb laborator testimi q\u00eb imiton d\u00ebshtime t\u00eb ndryshme n\u00eb nyjet e klasterit, pret p\u00ebr rikuperimin e funksionalitetit, rikuperon nyjen e d\u00ebshtuar dhe vazhdon testimin n\u00eb cik\u00ebl. Fillimisht, ky projekt quhej hapgsql, por me kalimin e koh\u00ebs m\u00eb \u00ebsht\u00eb b\u00ebr\u00eb e m\u00ebrzitshme emri q\u00eb kishte vet\u00ebm nj\u00eb vigj\u00eb. Prandaj, bazat e t\u00eb dh\u00ebnave t\u00eb q\u00ebndrueshme (dhe IP-t\u00eb q\u00eb tregojn\u00eb p\u00ebr to) fillova t\u2019i quaj <strong>krogan<\/strong> (nj\u00eb personazh nga nj\u00eb loj\u00eb kompjuterike, i cili ka t\u00eb gjitha organet e r\u00ebnd\u00ebsishme t\u00eb dyfishta), dhe nyjet, klaster\u00ebt dhe vet\u00eb projektin e quajta <strong>tuchanka<\/strong> (planeta ku jetojn\u00eb krogan\u00ebt).<\/p>\n<p><\/p>\n<p>Tani udh\u00ebheqja ka lejuar <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/domclick\/tuchanka\">hapjen e projektit p\u00ebr komunitetin open source n\u00ebn licenc\u00ebn MIT<\/a><\/noindex>. README n\u00eb nj\u00eb t\u00eb ardhme t\u00eb af\u00ebrt do t\u00eb p\u00ebrkthehet n\u00eb anglisht (sepse pritet q\u00eb konsumator\u00ebt kryesor\u00eb t\u00eb jen\u00eb zhvilluesit e Pacemaker dhe PostgreSQL), dhe variantin e 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 klaster\u00ebve t\u00eb q\u00ebndruesh\u00ebm 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 vendosen n\u00eb virtualka <noindex><a rel=\"nofollow\" href=\"https:\/\/www.virtualbox.org\">VirtualBox<\/a><\/noindex>. Gjithsej do t\u00eb krijohen 12 virtualka (me nj\u00eb total prej 36GiB), t\u00eb cilat formojn\u00eb 4 klaster\u00eb t\u00eb q\u00ebndruesh\u00ebm (varianta t\u00eb ndryshme). Dy klaster\u00ebt e par\u00eb p\u00ebrb\u00ebhen nga dy server\u00eb PostgreSQL, t\u00eb cil\u00ebt jan\u00eb vendosur n\u00eb qendra t\u00eb ndryshme t\u00eb t\u00eb dh\u00ebnave, dhe nj\u00eb server i p\u00ebrbashk\u00ebt <em>witness<\/em> me <strong>quorum device<\/strong> (i vendosur n\u00eb nj\u00eb virtualke t\u00eb lir\u00eb n\u00eb nj\u00eb qend\u00ebr t\u00eb 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 prej pal\u00ebve. Klasteri i tret\u00eb \u00ebsht\u00eb n\u00eb tre qendra t\u00eb t\u00eb dh\u00ebnave: nj\u00eb master, dy skllev\u00ebr, pa <strong>quorum device<\/strong>. Klasteri i kat\u00ebrt p\u00ebrb\u00ebhet nga kat\u00ebr server\u00eb PostgreSQL, me dy n\u00eb \u00e7do qend\u00ebr t\u00eb t\u00eb dh\u00ebnave: nj\u00eb master, t\u00eb tjer\u00ebt replikat, dhe gjithashtu p\u00ebrdor <em>witness<\/em> me <strong>quorum device<\/strong>. Klasteri i kat\u00ebrt mban nj\u00eb d\u00ebshtim t\u00eb dy server\u00ebve ose nj\u00eb qendre t\u00eb t\u00eb dh\u00ebnave. Kjo zgjidhje mund t\u00eb shkall\u00ebzohet, n\u00ebse \u00ebsht\u00eb e nevojshme, n\u00eb m\u00eb shum\u00eb replika.<\/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> \u00ebsht\u00eb gjithashtu rikonfiguruar p\u00ebr q\u00ebndrueshm\u00ebri, por aty \u00ebsht\u00eb p\u00ebrdorur metoda e vet\u00eb <code>ntpd<\/code> (<em>orphan mode<\/em>). Serveri i p\u00ebrbashk\u00ebt <em>witness<\/em> p\u00ebrmbush rolin e serverit Qendror NTP, duke shp\u00ebrndar\u00eb koh\u00ebn e tij p\u00ebr t\u00eb gjith\u00eb klaster\u00ebt, duke sinjalizuar k\u00ebshtu t\u00eb gjith\u00eb server\u00ebt midis tyre. N\u00ebse <em>witness<\/em> d\u00ebshmon d\u00ebshtimin ose t\u00eb izolohet, 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 proxy ndihm\u00ebs <strong>HTTP proxy<\/strong> \u00ebsht\u00eb gjithashtu ngritur mbi <em>witness<\/em>, me t\u00eb cilin 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, nd\u00ebrsa n\u00eb k\u00ebt\u00eb laborator ato jan\u00eb vendosur n\u00eb <em>witness<\/em> vet\u00ebm p\u00ebr t\u00eb kursyer numrin e virtualkave dhe hap\u00ebsir\u00ebn.<\/p>\n<p><\/p>\n<h1 id=\"versii\">Versionet<\/h1>\n<p><\/p>\n<p>v0. Funksionon 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 gjith\u00eb 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 p\u00ebrballojn\u00eb d\u00ebshtimin ose izolimin rrjetor t\u00eb nj\u00eb qendre t\u00eb t\u00eb dh\u00ebnave. Prandaj <strong>e pamundur<\/strong> p\u00ebrdorimi p\u00ebr mbrojtje nga <strong>split-brain<\/strong> teknologji standarde Pacemaker, e cila quhet <em>STONITH<\/em> (Shoot The Other Node In The Head) ose <em>fencing<\/em>. Thelbi i saj: n\u00ebse nyjet n\u00eb klaster fillojn\u00eb t\u00eb dyshojn\u00eb se ndonj\u00eb nyj\u00eb po kalon n\u00eb v\u00ebshtir\u00ebsi, nuk p\u00ebrgjigjet ose sillet n\u00eb m\u00ebnyr\u00eb t\u00eb pap\u00ebrshtatshme, ato e \u00e7activate at\u00eb me an\u00eb t\u00eb 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 rastin e nj\u00eb d\u00ebshtimi t\u00eb vet\u00ebm t\u00eb serverit, IPMI ose UPS vazhdojn\u00eb t\u00eb funksionojn\u00eb. K\u00ebtu planifikohet nj\u00eb mbrojtje nga nj\u00eb d\u00ebshtim shum\u00eb m\u00eb katastrofik, kur t\u00eb gjith\u00eb qendra e t\u00eb dh\u00ebnave d\u00ebshton (p.sh., humbet energjin\u00eb). Dhe n\u00eb nj\u00eb d\u00ebshtim 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, ideja themelore e sistemit \u00ebsht\u00eb koncepti i kvorumit. T\u00eb gjitha nyjet kan\u00eb nj\u00eb vot\u00eb, dhe mund t\u00eb funksionojn\u00eb vet\u00ebm ato q\u00eb shohin m\u00eb shum\u00eb se gjysma e t\u00eb gjitha nyjeve. Ky num\u00ebr \"gjysm\u00eb+1\" quhet <strong>kvorum<\/strong>. N\u00ebse kvorumi nuk arrihet, nyja vendos se \u00ebsht\u00eb n\u00eb izolim rrjetor dhe duhet t\u00eb \u00e7aktivizoj\u00eb burimet e saj, pra kjo \u00ebsht\u00eb nj\u00eb <strong>mbrojtje nga split-brain<\/strong>. N\u00ebse softi q\u00eb \u00ebsht\u00eb p\u00ebrgjegj\u00ebs p\u00ebr k\u00ebt\u00eb sjellje nuk funksionon, at\u00ebher\u00eb duhet t\u00eb aktivizohet watchdog, p\u00ebr shembull, bazuar n\u00eb IPMI.<\/p>\n<p><\/p>\n<p>N\u00ebse numri i nyjeve \u00ebsht\u00eb \u00e7ift (klaster n\u00eb dy qendra t\u00eb t\u00eb dh\u00ebnave), at\u00ebher\u00eb mund t\u00eb ndodh\u00eb ajo q\u00eb quhet pasiguri. <strong>50%\/50%<\/strong> (<em>pjesa 50-50<\/em>), kur izolimi rrjetor ndan klasterin sakt\u00ebsisht n\u00eb dy pjes\u00eb. Prandaj, p\u00ebr numrin \u00e7ift t\u00eb nyjeve shtohet <strong>quorum device<\/strong> \u2014 nj\u00eb demon q\u00eb nuk k\u00ebrkon burime, i cili mund t\u00eb ekzekutohet n\u00eb virtualizimin m\u00eb t\u00eb lir\u00eb n\u00eb qendr\u00ebn e tret\u00eb t\u00eb t\u00eb dh\u00ebnave. Ai i jep z\u00ebrin nj\u00ebrit prej segmenteve (q\u00eb sheh) dhe k\u00ebshtu zgjidh pasigurin\u00eb 50%\/50%. Serveri n\u00eb t\u00eb cilin do t\u00eb aktivizohet pajisja e kuorumit 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 serverat e prishur n\u00eb ata t\u00eb funksionsh\u00ebm, ose me urdh\u00ebr t\u00eb administrator\u00ebve t\u00eb sistemit. P\u00ebr t'u siguruar q\u00eb klient\u00ebt e din\u00eb se ku ndodhen burimet q\u00eb u nevojiten (ku t\u00eb lidhen?), p\u00ebrdoren <em>IP t\u00eb l\u00ebvizshme<\/em> (<strong>IP t\u00eb l\u00ebvizshme<\/strong>). K\u00ebto jan\u00eb IP q\u00eb Pacemaker mund t'i zhvendos\u00eb midis nyjeve (gjith\u00e7ka \u00ebsht\u00eb n\u00eb nj\u00eb rrjet t\u00eb shesht\u00eb). Secila prej tyre simbolizon nj\u00eb burim (sh\u00ebrbim) dhe do t\u00eb jet\u00eb aty ku duhet t\u00eb lidhen p\u00ebr t\u00eb marr\u00eb 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 (schem\u00ebn me shkall\u00ebzim)<\/h2>\n<p><\/p>\n<h3 id=\"struktura\">Struktura<\/h3>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Modelimi i klaster\u00ebve t\u00eb q\u00ebndruesh\u00ebm 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 se kemi shum\u00eb baza t\u00eb dh\u00ebnash t\u00eb vogla me ngarkes\u00eb t\u00eb ul\u00ebt, p\u00ebr t\u00eb cilat nuk \u00ebsht\u00eb ekonomike t\u00eb mbash nj\u00eb server t\u00eb dedikuar slave n\u00eb modalitetin hot standby p\u00ebr transaksione read only (nuk ka nevoj\u00eb p\u00ebr nj\u00eb shpenzim t\u00eb till\u00eb burimesh).<\/p>\n<p><\/p>\n<p>N\u00eb secil\u00ebn qend\u00ebr t\u00eb t\u00eb dh\u00ebnave ka nga nj\u00eb server. N\u00eb \u00e7do server ka dy instanca PostgreSQL (n\u00eb terminologjin\u00eb PostgreSQL quhen klastere, por p\u00ebr t\u00eb shmangur konfuzionin do t'i quaj instanca (sip\u00ebrisht nga analogjia me DB t\u00eb tjera), nd\u00ebrsa klastere do t\u00eb quaj vet\u00ebm klasteret e Pacemaker). Nj\u00eb instanc\u00eb punon n\u00eb modin master, dhe vet\u00ebm ai ofron sh\u00ebrbime (vet\u00ebm ai ka float IP). Instanca e dyt\u00eb punon si slave p\u00ebr qendr\u00ebn e dyt\u00eb t\u00eb t\u00eb dh\u00ebnave dhe do t\u00eb ofroj\u00eb sh\u00ebrbime vet\u00ebm n\u00eb rast se masteri i tij d\u00ebshtoi. Duke pasur parasysh se pjesa m\u00eb e madhe e koh\u00ebs do t\u00eb ofrohet vet\u00ebm nj\u00eb instanc\u00eb nga t\u00eb dy (master), t\u00eb gjitha burimet e serverit optimizohen p\u00ebr masterin (i caktohet memorie p\u00ebr kesh shared_buffers etj.), por n\u00eb m\u00ebnyr\u00eb q\u00eb t\u00eb mjaftoj\u00eb gjithashtu p\u00ebr instanc\u00ebn e dyt\u00eb (pavar\u00ebsisht se p\u00ebr t\u00eb do t\u00eb ket\u00eb burime jooptimale p\u00ebrmes keshit t\u00eb sistemit t\u00eb skedar\u00ebve) n\u00eb rast t\u00eb d\u00ebshtimit t\u00eb nj\u00eb prej qendrave t\u00eb t\u00eb dh\u00ebnave. Slave nuk ofron sh\u00ebrbime (nuk kryen k\u00ebrkesa read only) gjat\u00eb funksionimit normal t\u00eb klasterit, p\u00ebr t\u00eb shmangur luft\u00ebn p\u00ebr burime me masterin n\u00eb t\u00eb nj\u00ebjtin server.<\/p>\n<p><\/p>\n<p>N\u00eb rastin e dy nyjeve, disponueshm\u00ebria e lart\u00eb \u00ebsht\u00eb e mundur vet\u00ebm me replikim asinkron, sepse n\u00ebse ndodh nj\u00eb d\u00ebshtim te slave, do t\u00eb \u00e7oj\u00eb 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 klaster\u00ebve t\u00eb q\u00ebndruesh\u00ebm 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 tjerat do t\u00eb ket\u00eb t\u00eb nj\u00ebjt\u00ebn histori. N\u00ebse witness d\u00ebshton, struktura e klasterit nuk do t\u00eb ndryshoj\u00eb, gjith\u00e7ka do t\u00eb vazhdoj\u00eb t\u00eb funksionoj\u00eb si\u00e7 ka funksionuar. Por kuorumi do t\u00eb b\u00ebhet 2 nga 3, dhe p\u00ebr k\u00ebt\u00eb arsye \u00e7do d\u00ebshtim tjet\u00ebr do t\u00eb jet\u00eb fatal p\u00ebr klasterin. Do t\u00eb duhet urgent t\u00eb riparohet.<\/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 klaster\u00ebve t\u00eb q\u00ebndruesh\u00ebm 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 z\u00ebrin nyj\u00ebs s\u00eb dyt\u00eb n\u00eb qendr\u00ebn e dyt\u00eb t\u00eb t\u00eb dh\u00ebnave. Atje, ish slave shnd\u00ebrrohet n\u00eb master, si pasoj e k\u00ebsaj, t\u00eb dy master\u00ebt punojn\u00eb n\u00eb nj\u00eb server dhe n\u00eb ta tregohet t\u00eb dy float IP e tyre.<\/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 klaster\u00ebve t\u00eb q\u00ebndruesh\u00ebm 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>Skema klasike me dy nyje. Nj\u00ebri punon si master, tjetri si slave. T\u00eb dy mund t\u00eb kryejn\u00eb k\u00ebrkesa (slave vet\u00ebm read only), prandaj t\u00eb dy tregojn\u00eb float IP: krogan2 \u2014 p\u00ebr masterin, krogan2s1 \u2014 p\u00ebr slavin. Disponueshm\u00ebria e lart\u00eb do t\u00eb jet\u00eb si p\u00ebr masterin ashtu edhe p\u00ebr slavin.<\/p>\n<p><\/p>\n<p>N\u00eb rastin e dy nyjeve, disponueshm\u00ebria e lart\u00eb \u00ebsht\u00eb e mundur vet\u00ebm me replikim asinkron, sepse n\u00ebse ndodh nj\u00eb d\u00ebshtim te slave, do t\u00eb \u00e7oj\u00eb 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 klaster\u00ebve t\u00eb q\u00ebndruesh\u00ebm 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> voton p\u00ebr t\u00eb dytin. N\u00eb qendr\u00ebn e vetme t\u00eb funksionimit do t\u00eb ngrihet masteri, dhe n\u00eb t\u00eb do t\u00eb tregohen t\u00eb dy float IP: ai master dhe ai slave. Sigurisht, instanca duhet t\u00eb jet\u00eb e konfiguruar n\u00eb nj\u00eb m\u00ebnyr\u00eb q\u00eb t\u00eb ken\u00eb mjaft burime (limitet p\u00ebr lidhje etj.) p\u00ebr t\u00eb pranuar nj\u00ebkoh\u00ebsisht t\u00eb gjitha lidhjet dhe k\u00ebrkesat nga float IP master dhe slave. K\u00ebshtu q\u00eb gjat\u00eb funksionimit normal duhet t\u00eb ket\u00eb nj\u00eb rezerv\u00eb t\u00eb mjaftueshme n\u00eb limitet.<\/p>\n<p><\/p>\n<h2 id=\"tuchanka4-mnogo-rabov\">Tuchanka4 (shum\u00eb slave)<\/h2>\n<p><\/p>\n<h3 id=\"struktura-2\">Struktura<\/h3>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Modelimi i klaster\u00ebve t\u00eb q\u00ebndruesh\u00ebm 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, t\u00eb cilat kan\u00eb shum\u00eb k\u00ebrkesa read-only (rast tipik i nj\u00eb siti me ngarkes\u00eb t\u00eb lart\u00eb). Tuchanka4 \u00ebsht\u00eb situata kur mund t\u00eb ket\u00eb tre ose m\u00eb shum\u00eb slave p\u00ebr t\u00eb p\u00ebrballuar k\u00ebrkesat e tilla, por s\u00ebrish jo shum\u00eb. Kur ka nj\u00eb num\u00ebr shum\u00eb t\u00eb madh slave, do t\u00eb duhet t\u00eb krijohet nj\u00eb sistem hierarkik replikimi. N\u00eb rastin minimal (n\u00eb figur\u00eb) n\u00eb secil\u00ebn nga dy qendrat e t\u00eb dh\u00ebnave jan\u00eb dy servera, secili me nga nj\u00eb instanc\u00eb PostgreSQL.<\/p>\n<p><\/p>\n<p>Nj\u00eb ve\u00e7ori tjet\u00ebr e k\u00ebsaj skeme \u00ebsht\u00eb se k\u00ebtu tashm\u00eb mund t\u00eb organizohet nj\u00eb replikim i sinkronizuar. Ajo \u00ebsht\u00eb e 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 datacenter tjet\u00ebr dhe jo n\u00eb nj\u00eb replika n\u00eb t\u00eb nj\u00ebjtin datacenter si master. N\u00eb master dhe n\u00eb \u00e7do skllav tregohet nj\u00eb float IP. N\u00eb t\u00eb v\u00ebrtet\u00eb, mes skllav\u00ebve 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. Klient\u00eb t\u00eb ndrysh\u00ebm mund t\u00eb ken\u00eb nevoja t\u00eb ndryshme <em>sql proxy<\/em>, dhe vet\u00ebm zhvilluesit e klient\u00ebve e din\u00eb se kush ka nevoj\u00eb p\u00ebr \u00e7far\u00eb. Kjo funksionalitet mund t\u00eb realizohet si nga nj\u00eb demon t\u00eb jasht\u00ebm, ashtu edhe nga biblioteka e klientit (connection pool), etj. Gjith\u00e7ka kjo del jasht\u00eb tem\u00ebs s\u00eb klasterit t\u00eb DB me q\u00ebllim p\u00ebrshtatshm\u00ebrin\u00eb ndaj d\u00ebshtimeve (p\u00ebrshtatshm\u00ebria <em>SQL proxy<\/em> mund t\u00eb realizohet pavar\u00ebsisht, s\u00eb bashku me p\u00ebrshtatshm\u00ebrin\u00eb e klientit).<\/p>\n<p><\/p>\n<h3 id=\"otkaz-tuchanka4\">D\u00ebshtimi i Tuchanka4<\/h3>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Modelimi i klaster\u00ebve t\u00eb q\u00ebndruesh\u00ebm 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 nj\u00eb datacenter d\u00ebshtojn\u00eb (dmth. dy servera), d\u00ebshmitari voton p\u00ebr t\u00eb dytin. Si rezultat, n\u00eb datacentin e dyt\u00eb funksionojn\u00eb dy servera: nj\u00eb ka masterin, dhe p\u00ebr t\u00eb tregohet float IP i masterit (p\u00ebr t\u00eb pranuar k\u00ebrkesat read-write); nd\u00ebrsa n\u00eb serverin e dyt\u00eb funksionon nj\u00eb skllav me replikim t\u00eb sinkronizuar, dhe p\u00ebr t\u00eb tregohet nj\u00eb nga float IP-t\u00eb e skllav\u00ebve (p\u00ebr k\u00ebrkesat read only).<\/p>\n<p><\/p>\n<p>E para q\u00eb duhet t\u00eb theksohet: float IP skllav do t\u00eb jet\u00eb vet\u00ebm nj\u00eb. Dhe p\u00ebr funksionimin e tij t\u00eb sakt\u00eb duhet q\u00eb <em>sql proxy<\/em> t\u00eb gjith\u00eb k\u00ebrkesat t\u00eb redirektohen n\u00eb float IP-in e mbetur; dhe n\u00ebse <em>sql proxy<\/em> jo, at\u00ebher\u00eb mund t\u00eb listohen t\u00eb gjitha float IP-t\u00eb e skllav\u00ebve 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 funksionale, ashtu si \u00ebsht\u00eb b\u00ebr\u00eb n\u00eb sistemin e testimit automatik. Mund t\u00eb ndodh\u00eb q\u00eb n\u00eb biblioteka t\u00eb tjera, si JDBC, t\u00eb mos funksionoj\u00eb k\u00ebshtu dhe t\u00eb nevojitet <em>sql proxy<\/em>. Kjo \u00ebsht\u00eb b\u00ebr\u00eb p\u00ebr shkak se p\u00ebr float IP p\u00ebr skllav\u00ebt \u00ebsht\u00eb vendosur nj\u00eb ndales\u00eb p\u00ebr t'u ngjitur n\u00eb t\u00eb nj\u00ebjtin server n\u00eb t\u00eb nj\u00ebjt\u00ebn koh\u00eb, n\u00eb m\u00ebnyr\u00eb q\u00eb ata t\u00eb shp\u00ebrndahen n\u00eb m\u00ebnyr\u00eb t\u00eb barabart\u00eb n\u00eb serverat skllav\u00eb, n\u00ebse punojn\u00eb disa.<\/p>\n<p><\/p>\n<p>E dyta: edhe n\u00eb rast d\u00ebshtimi t\u00eb datacenterit do t\u00eb ruhet replikimi i sinkronizuar. Dhe madje edhe n\u00ebse ndodhet nj\u00eb d\u00ebshtim tjet\u00ebr, dmth. nj\u00eb nga dy serverat n\u00eb datacentin e mbetur d\u00ebshtojn\u00eb, klusteri do t\u00eb ndaloj\u00eb t\u00eb ofroj\u00eb sh\u00ebrbime, por prap\u00eb do t\u00eb ruaj\u00eb informacionin mbi t\u00eb gjitha transaksionet e komituara, p\u00ebr t\u00eb cilat ka dh\u00ebn\u00eb konfirmimin e komitimit (nuk do t\u00eb ket\u00eb humbje informacioni n\u00eb rast d\u00ebshtimi t\u00eb dyt\u00eb).<\/p>\n<p><\/p>\n<h2 id=\"tuchanka3-3-data-centra\">Tuchanka3 (3 datacentra)<\/h2>\n<p><\/p>\n<h3 id=\"struktura-3\">Struktura<\/h3>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Modelimi i klaster\u00ebve t\u00eb q\u00ebndruesh\u00ebm 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 kluster p\u00ebr situat\u00ebn kur ka tre datacentra q\u00eb funksionojn\u00eb plot\u00ebsisht, n\u00eb secilin prej t\u00eb cil\u00ebve ka nj\u00eb server DB q\u00eb funksionon plot\u00ebsisht. N\u00eb k\u00ebt\u00eb rast <em>quorum device<\/em> nuk \u00ebsht\u00eb e nevojshme. N\u00eb nj\u00eb datacenter funksionon masteri, nd\u00ebrsa n\u00eb dy t\u00eb tjera - skllav\u00ebt. Replikimi \u00ebsht\u00eb sinkron, lloji ANY (slave1, slave2), dometh\u00ebn\u00eb klienti do t\u00eb marr\u00eb nj\u00eb konfirmim t\u00eb komitimit kur ndonj\u00eb nga skllav\u00ebt p\u00ebrgjigjet i pari, se ka pranuar komitimin. Nj\u00eb float IP i tregon burimet p\u00ebr masterin dhe dy p\u00ebr skllav\u00ebt. Ndryshe nga Tuchanka4, t\u00eb tri float IP-t\u00eb jan\u00eb t\u00eb p\u00ebrshtatshme p\u00ebr d\u00ebshtimin. P\u00ebr balancimin e k\u00ebrkesave SQL p\u00ebr vet\u00ebm leximin mund t\u00eb p\u00ebrdoren <em>sql proxy<\/em> (me nj\u00eb q\u00ebndrim t\u00eb ve\u00e7ant\u00eb p\u00ebr d\u00ebshtimet), ose t'u caktohet gjysma e klient\u00ebve nj\u00eb float IP skllav, nd\u00ebrsa gjysma tjet\u00ebr - nj\u00eb tjet\u00ebr.<\/p>\n<p><\/p>\n<h3 id=\"otkaz-tuchanka3\">D\u00ebshtimi i Tuchanka3<\/h3>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Modelimi i klaster\u00ebve t\u00eb q\u00ebndruesh\u00ebm 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>Kur d\u00ebshtoni nj\u00eb nga datacentra, mbeten dy. N\u00eb nj\u00ebrin \u00ebsht\u00eb ngritur masteri dhe float IP i masterit, n\u00eb tjetrin - nj\u00eb skllav dhe t\u00eb dy float IP-t\u00eb e skllav\u00ebve (n\u00eb instanc\u00eb duhet t\u00eb ket\u00eb dyfish rezerv\u00eb p\u00ebr burimet, n\u00eb m\u00ebnyr\u00eb q\u00eb t\u00eb pranoj\u00eb t\u00eb gjitha lidhjet nga t\u00eb dy float IP-t\u00eb e skllav\u00ebve). Nd\u00ebrmjet masterit dhe skllavit ka nj\u00eb replikim t\u00eb sinkronizuar. Po ashtu, klusteri do t\u00eb ruaj\u00eb informacionin mbi transaksionet e komituara dhe t\u00eb konfirmuara (nuk do t\u00eb ket\u00eb humbje informacioni) n\u00eb rast shkat\u00ebrrimi t\u00eb dy datacentra (n\u00ebse ato nuk shkat\u00ebrrohen n\u00eb t\u00eb nj\u00ebjt\u00ebn koh\u00eb).<\/p>\n<p><\/p>\n<p><em>P\u00ebrshkrimi i detajuar i struktur\u00ebs s\u00eb skedar\u00ebve dhe implementimit nuk e kam vendosur. Kushdo q\u00eb do t\u00eb d\u00ebshiroj\u00eb t\u00eb loz\u00eb, mund ta lexoj\u00eb t\u00eb gjith\u00eb k\u00ebt\u00eb n\u00eb README. Un\u00eb vet\u00ebm ofroj p\u00ebrshkrimin e testimit automatik.<\/em><\/p>\n<p><\/p>\n<h1 id=\"sistema-avtomaticheskogo-testirovaniya\">Sistemi i testimit automatik<\/h1>\n<p><\/p>\n<p>P\u00ebr t\u00eb verifikuar p\u00ebrshtatshm\u00ebrin\u00eb e klustereve me simulimin e defekteve t\u00eb ndryshme \u00ebsht\u00eb krijuar nj\u00eb sistem automatizimi. Aktivizohet me skriptin <code>test\/failure<\/code>. Skripti mund t\u00eb pranoj\u00eb si parametra numrat e klustereve q\u00eb d\u00ebshirojn\u00eb t\u00eb testohen. P\u00ebr shembull, ky urdh\u00ebr:<\/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 klusterin e dyt\u00eb dhe t\u00eb tret\u00eb. N\u00ebse parametrat nuk jan\u00eb caktuar, at\u00ebher\u00eb do t\u00eb testohen t\u00eb gjitha klustert. T\u00eb gjith\u00eb klustert testohen paralelisht, dhe rezultati shfaqet n\u00eb panelin tmux. Tmux p\u00ebrdor nj\u00eb server tmux t\u00eb dedikuar, k\u00ebshtu q\u00eb skripti mund t\u00eb ekzekutohet nga tmux-i default, duke krijuar nj\u00eb tmux t\u00eb thelluar. Rekomandoj p\u00ebrdorimin e terminalit 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 virtualet 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 klaster\u00ebve t\u00eb q\u00ebndruesh\u00ebm 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 i ndar\u00eb n\u00eb kolonat e numrit t\u00eb klaster\u00ebve t\u00eb testuar, me kat\u00ebr prej tyre si\u00e7 \u00ebsht\u00eb treguar n\u00eb screenshot. Do t\u00eb shpjegoj p\u00ebrmbajtjen e kolonave duke p\u00ebrdorur Tuchanka2 si shembull. Panelet n\u00eb screenshot jan\u00eb t\u00eb num\u00ebruara:<\/p>\n<p><\/p>\n<ol>\n<li>K\u00ebtu shfaqet statistika p\u00ebr testet. Kolonat:\n<ul>\n<li><strong>failure<\/strong> \u2014 emri i testit (funksioni n\u00eb skript), i cili simulon nj\u00eb defekt.<\/li>\n<li><strong>reaction<\/strong> \u2014 koha mesatare n\u00eb sekonda, p\u00ebr t\u00eb cil\u00ebn klasteri riktheu funksionalitetin e tij. Matet nga fillimi i pun\u00ebs s\u00eb skriptit q\u00eb simulon defektin, deri n\u00eb momentin kur klasteri rikthehet n\u00eb funksionalitet dhe \u00ebsht\u00eb n\u00eb gjendje t\u00eb vazhdoj\u00eb t\u00eb ofroj\u00eb sh\u00ebrbime. N\u00ebse koha \u00ebsht\u00eb shum\u00eb e shkurt\u00ebr, p\u00ebr shembull, gjasht\u00eb sekonda (si\u00e7 ndodh n\u00eb klaster\u00ebt me disa skllav\u00eb (Tuchanka3 dhe Tuchanka4)), kjo do t\u00eb thot\u00eb se defekti u shfaq n\u00eb nj\u00eb skllav asinkron dhe nuk ndikoi n\u00eb funksionimin, nuk kishte 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> duke p\u00ebrdorur metod\u00ebn e \"devijimit standard\".<\/li>\n<li><strong>count<\/strong> \u2014 sa her\u00eb \u00ebsht\u00eb kryer ky test.<\/li>\n<\/ul>\n<\/li>\n<li>Nj\u00eb regjist\u00ebr i shkurt\u00ebr lejon t\u00eb vler\u00ebsohet se \u00e7far\u00eb po b\u00ebn klasteri n\u00eb momentin aktual. Shfaqet numri i iteracionit (testit), vula temporale dhe emri i operacionit. Nj\u00eb performanc\u00eb shum\u00eb e gjat\u00eb (&gt; 5 minuta) tregon p\u00ebr ndonj\u00eb problem.<\/li>\n<li><strong>heart<\/strong> (zemra) \u2014 koha aktuale. P\u00ebr vler\u00ebsimin vizual t\u00eb funksionalitetit <em>t\u00eb masterit<\/em> n\u00eb tabel\u00ebn e tij shkruhet vazhdimisht koha aktuale duke p\u00ebrdorur IP-n\u00eb float t\u00eb masterit. N\u00eb rast suksesi, rezultati shfaqet n\u00eb k\u00ebt\u00eb panel.<\/li>\n<li><strong>beat<\/strong> (pulsi) \u2014 \"koha aktuale\" e cila ishte regjistruar m\u00eb par\u00eb nga skripti <strong>heart<\/strong> n\u00eb master, tani lexuar nga <em>skllavit<\/em> n\u00ebp\u00ebrmjet IP-s\u00eb s\u00eb tij float. Lejon t\u00eb vler\u00ebsohet vizualisht funksionaliteti i skllavit dhe replikimit. N\u00eb Tuchanka1 nuk ka skllav\u00eb me IP float (nuk ka skllav\u00eb q\u00eb ofrojn\u00eb sh\u00ebrbime), por aty ka dy instance (BD), prandaj k\u00ebtu do t\u00eb shfaqet jo <strong>beat<\/strong>, dhe <strong>heart<\/strong> e dyta e instanc\u00ebs.<\/li>\n<li>Monitorimi i gjendjes s\u00eb klasterit duke p\u00ebrdorur utilitarin <code>pcs mon<\/code>. Tregon struktur\u00ebn, shp\u00ebrndarjen e burimeve n\u00eb nyje dhe informacion t\u00eb dobish\u00ebm tjet\u00ebr.<\/li>\n<li>K\u00ebtu shfaqet monitorimi sistemor nga secila makin\u00eb virtuale t\u00eb klasterit. Mund t\u00eb ket\u00eb m\u00eb shum\u00eb se kaq \u2014 sa m\u00eb shum\u00eb makina virtuale ka n\u00eb klaster. Dy grafik\u00eb <em>CPU Load<\/em> (n\u00eb makinat virtuale jan\u00eb dy procesor\u00eb), emri i makin\u00ebs virtuale, <em>System Load<\/em> (e quajtur si Load Average, sepse \u00ebsht\u00eb mesatare 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 testimet. N\u00eb rast defekti \u2014 ndalim t\u00eb papritur t\u00eb pun\u00ebs ose nj\u00eb cikli t\u00eb pafund pritje \u2014 k\u00ebtu mund t\u00eb shihni shkakun e k\u00ebtij sjelljeje.<\/li>\n<\/ol>\n<p><\/p>\n<p>Testimi zhvillohet n\u00eb dy etapa. Fillimisht, skripti kalon p\u00ebrmes t\u00eb gjitha llojeve t\u00eb testeve, duke zgjedhur rast\u00ebsisht makin\u00ebn virtuale, t\u00eb cil\u00ebs t\u2019i aplikoj\u00eb k\u00ebt\u00eb test. M\u00eb pas kryhet nj\u00eb cik\u00ebl t\u00eb pafund testimi, makin\u00ebn virtuale dhe defekti zgjidhen rast\u00ebsisht \u00e7do her\u00eb. Nd\u00ebrprerja e papritur e skriptit t\u00eb testimit (paneli i posht\u00ebm) ose cikli i pafund pritjeje p\u00ebr ndonj\u00eb gj\u00eb (&gt; 5 minuta koha e ekzekutimit t\u00eb nj\u00eb operacioni, e cila duket n\u00eb gjurmim) tregon se ndonj\u00eb nga testet n\u00eb k\u00ebt\u00eb klaster ka d\u00ebshtuar.<\/p>\n<p><\/p>\n<p>\u00c7do test p\u00ebrb\u00ebhet nga operacione t\u00eb m\u00ebposhtme:<\/p>\n<p><\/p>\n<ol>\n<li>Aktivizimi i funksionit q\u00eb simulojn\u00eb defektin.<\/li>\n<li><strong>Ready?<\/strong> \u2014 pritja p\u00ebr rikthimin n\u00eb funksionalitet t\u00eb klasterit (kur ofrohen t\u00eb gjitha sh\u00ebrbimet).<\/li>\n<li>Shfaqet koha e pritjes p\u00ebr rikthimin e klasterit (<em>reaction<\/em>).<\/li>\n<li><strong>Fix<\/strong> \u2014 klasteri \"po riparot\". Pas k\u00ebsaj, ai duhet t\u00eb kthehet n\u00eb nj\u00eb gjendje plot\u00ebsisht funksionale dhe t\u00eb gatsh\u00ebm p\u00ebr defekte t\u00eb tjera.<\/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 &quot;Dalja nga memorja&quot; me nj\u00eb bomb\u00eb fork.<\/li>\n<li><strong>OutOfSpace<\/strong>: mbush diskun. Por testi \u00ebsht\u00eb m\u00eb shum\u00eb simbolik, me ngarkes\u00ebn e pap\u00ebrfillshme q\u00eb krijohet gjat\u00eb testimit, p\u00ebrgjith\u00ebsisht nuk ndodhin d\u00ebshtime t\u00eb PostgreSQL kur disk \u00ebsht\u00eb i mbushur.<\/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>: \"ndalon energjin\u00eb\" e makin\u00ebs virtuale me komand\u00ebn <code>VBoxManage controlvm &quot;virtual machine&quot; poweroff<\/code>.<\/li>\n<li><strong>Rivendosja<\/strong>: ri-ngre makin\u00ebn virtuale me komand\u00ebn <code>VBoxManage controlvm &quot;virtual machine&quot; 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 n\u00eb makin\u00ebn virtuale komand\u00ebn <code>systemctl poweroff<\/code>, sistemi p\u00ebrfundon pun\u00ebn n\u00eb m\u00ebnyr\u00eb korrekte.<\/li>\n<li><strong>UnLink<\/strong>: izolimi rrjetor, komanda <code>VBoxManage controlvm &quot;virtual machine&quot; setlinkstate1 off<\/code>.<\/li>\n<\/ul>\n<p><\/p>\n<p>P\u00ebrfundimi i testit mund t\u00eb b\u00ebhet ose me komand\u00ebn standarde tmux &quot;kill-window&quot; <strong>Ctrl-b &amp;<\/strong>, ose me komand\u00ebn &quot;detach-client&quot; <strong>Ctrl-b d<\/strong>: n\u00eb k\u00ebt\u00eb rast, testi p\u00ebrfundon, tmux mbyllet, makinat virtuale fik\u00ebn.<\/p>\n<p><\/p>\n<h1 id=\"vyyavlennye-pri-testirovanii-problemy\">Problemet e identifikuara gjat\u00eb testimit<\/h1>\n<p><\/p>\n<ul>\n<li>\n<p>Aktualisht <em>demonin sbd watchdog<\/em> reaktron n\u00eb ndalimin e demon\u00ebve t\u00eb monitoruar, por jo n\u00eb bllokimin e tyre. Dhe, si pasoj\u00eb, funksionalitetet e pap\u00ebrshtatshme trajtohen q\u00eb d\u00ebrgojn\u00eb n\u00eb bllokimin vet\u00ebm <em>Corosync<\/em> dhe <em>Pacemaker<\/em>, por nj\u00ebkoh\u00ebsisht pa e pezulluar <em>sbd<\/em>. P\u00ebr verifikim <em>Corosync<\/em> kemi tashm\u00eb <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 edhe p\u00ebr Pacemaker do t\u00eb ket\u00eb di\u00e7ka t\u00eb ngjashme, shpresoj q\u00eb deri n\u00eb <em>RedHat 8<\/em> do ta b\u00ebjn\u00eb. Por t\u00eb tilla 'probleme' jan\u00eb t\u00eb teori, leht\u00eb imitohet artificialisht me ndihm\u00ebn e, p\u00ebr shembull, <code>killall -STOP corosync<\/code>, por kurr\u00eb nuk ndodhin n\u00eb jet\u00ebn reale.<\/p>\n<p>\n<\/li>\n<li>\n<p>Tek <em>Pacemaker<\/em> n\u00eb versionin e <em>CentOS 7<\/em> \u00ebsht\u00eb p\u00ebrgatitur gabim <em>sync_timeout<\/em> u <em>quorum device<\/em>, si rezultat <noindex><a rel=\"nofollow\" href=\"https:\/\/lists.clusterlabs.org\/pipermail\/users\/2019-August\/026145.html\">kur nj\u00eb nyje d\u00ebshton, me nj\u00eb probabilitet t\u00eb caktuar, edhe nyja tjet\u00ebr ri-startohej<\/a><\/noindex>, n\u00eb t\u00eb cil\u00ebn duhej t\u00eb kalonte masteri. Era v\u00ebshtir\u00ebsohet me rritjen <em>sync_timeout<\/em> u <em>quorum device<\/em> gjat\u00eb implementimit (n\u00eb skriptin <code>setup\/setup1<\/code>). Kjo korrigjim nuk u pranua nga zhvilluesit <em>Pacemaker<\/em>, p\u00ebrkundrazi, ata premtuan t\u00eb riparojn\u00eb infrastruktur\u00ebn n\u00eb at\u00eb m\u00ebnyr\u00eb (n\u00eb nj\u00eb t\u00eb ardhme t\u00eb pacaktuar) q\u00eb ky timeout 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 e specifikuar se n\u00eb <code>LC_MESSAGES<\/code> (mesazhe tekstuale) mund t\u00eb p\u00ebrdoret Unicode, p\u00ebr shembull, <code>ru_RU.UTF-8<\/code>, at\u00ebher\u00eb gjat\u00eb ekzekutimit <em>postgres<\/em> n\u00eb nj\u00eb mjedis ku locale nuk \u00ebsht\u00eb UTF-8, t\u00eb pakt\u00ebn n\u00eb nj\u00eb mjedis t\u00eb zbraz\u00ebt (k\u00ebtu <em>pacemaker<\/em>+<em>pgsqlms<\/em>(paf) e fillon <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 log n\u00eb vend t\u00eb caracter\u00ebve UTF-8 do t\u00eb ket\u00eb shenja pyetje<\/a><\/noindex>. Zhvilluesit e PostgreSQL nuk arrinin t\u00eb vendosin se \u00e7far\u00eb duhet t\u00eb b\u00ebjn\u00eb n\u00eb k\u00ebt\u00eb rast. Kjo anashkalohet, duhet t\u00eb vendoset <code>LC_MESSAGES=en_US.UTF-8<\/code> gedhe gjat\u00eb konfigurimit (krijimit) t\u00eb instanc\u00ebs s\u00eb DB.<\/p>\n<p>\n<\/li>\n<li>\n<p>N\u00ebse \u00ebsht\u00eb e caktuar wal_receiver_timeout (n\u00eb m\u00ebnyr\u00eb default \u00ebsht\u00eb 60s), at\u00ebher\u00eb gjat\u00eb testit PostgreSQL-STOP n\u00eb master n\u00eb klaster\u00ebt tuchanka3 dhe tuchanka4 <noindex><a rel=\"nofollow\" href=\"https:\/\/www.postgresql.org\/message-id\/60590EC6-4062-4F25-A49C-3948ED2A7D47%40ya.ru\">nuk ka rind\u00ebrprerje t\u00eb replikimit n\u00eb masterin e ri<\/a><\/noindex>. Replikimi atje \u00ebsht\u00eb sinkron, k\u00ebshtu q\u00eb ndalon jo vet\u00ebm pun\u00ebtori, por edhe masteri i ri. Anashkalohet duke vendosur wal_receiver_timeout=0 gjat\u00eb konfigurimit t\u00eb PostgreSQL.<\/p>\n<p>\n<\/li>\n<li>\n<p>Rast\u00ebsisht kam v\u00ebzhguar pezullimin e replikimit n\u00eb PostgreSQL gjat\u00eb testit ForkBomb (mbingarkimi i 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 rindezhen n\u00eb masterin e ri<\/a><\/noindex>. Kam hasur di\u00e7ka t\u00eb till\u00eb vet\u00ebm n\u00eb klaster\u00ebt tuchanka3 dhe tuchanka4, ku p\u00ebr shkak t\u00eb replikimit sinkron, masteri pezullohej. Problemi kalonte vetvetiu, pas nj\u00eb kohe t\u00eb gjat\u00eb (rreth dy or\u00ebs). K\u00ebrkohet hulumtim shtes\u00eb p\u00ebr ta rregulluar k\u00ebt\u00eb. Nga simptomat duket si nj\u00eb defekt i m\u00ebparsh\u00ebm, i shkaktuar nga nj\u00eb arsye tjet\u00ebr, por me pasojat e nj\u00ebjta.<\/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 klaster\u00ebve t\u00eb q\u00ebndruesh\u00ebm 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.0.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u041d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043d\u0430\u0437\u0430\u0434 \u043f\u0435\u0440\u0435\u0434\u043e \u043c\u043d\u043e\u0439 \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u043b\u0438 \u0437\u0430\u0434\u0430\u0447\u0443 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043e\u0442\u043a\u0430\u0437\u043e\u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u044b\u0439 \u043a\u043b\u0430\u0441\u0442\u0435\u0440 \u0434\u043b\u044f PostgreSQL.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/modelirovanie-otkazoustojchivyh-klasterov-na-baze-postgresql-i-pacemaker\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.0.1\" \/>\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 klaster\u00ebve t\u00eb q\u00ebndruesh\u00ebm 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 me q\u00ebndrueshm\u00ebri 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}]}}