{"id":90103,"date":"2020-07-29T13:42:32","date_gmt":"2020-07-29T11:42:32","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/patroni-failure-stories-or-how-to-crash-your-postgresql-cluster-aleksej-lesovskij"},"modified":"2020-07-29T13:42:32","modified_gmt":"2020-07-29T11:42:32","slug":"patroni-failure-stories-or-how-to-crash-your-postgresql-cluster-aleksej-lesovskij","status":"publish","type":"post","link":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/patroni-failure-stories-or-how-to-crash-your-postgresql-cluster-aleksej-lesovskij","title":{"rendered":"Sfidhet e Patroni ose Si t\u00eb prishni klusterin tuaj PostgreSQL. Alexey Lesovski","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Sfidhet e Patroni ose Si t\u00eb prishni klusterin tuaj PostgreSQL. Alexey Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/6404cba13214f499d1f347cca0aacbe7.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Q\u00ebllimi kryesor i Patroni-s \u00ebsht\u00eb t\u00eb siguroj\u00eb Disponueshm\u00ebri t\u00eb Lart\u00eb p\u00ebr PostgreSQL. Por Patroni \u00ebsht\u00eb vet\u00ebm nj\u00eb template, dhe jo nj\u00eb mjet gati i gatsh\u00ebm (\u00e7ka gjithashtu \u00ebsht\u00eb e shkruar n\u00eb dokumentacion). N\u00eb shikim t\u00eb par\u00eb, duke e konfiguruar Patroni-n n\u00eb nj\u00eb laborator testimi, mund t\u00eb shikoni se sa mjet i shk\u00eblqyer \u00ebsht\u00eb dhe si e trajton leht\u00ebsisht p\u00ebrpjekjet tona p\u00ebr t\u00eb prishur klusterin. Megjithat\u00eb, n\u00eb praktik\u00eb n\u00eb nj\u00eb ambient prodhimi, gjithmon\u00eb gj\u00ebrat nuk ndodhin kaq bukur dhe elegante si n\u00eb laboratorin testues.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p><img decoding=\"async\" alt=\"Sfidhet e Patroni ose Si t\u00eb prishni klusterin tuaj PostgreSQL. Alexey Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/ff445e6d76a2ad46a232b705e104446f.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Do t\u00eb flas pak p\u00ebr veten time. Kam filluar si administrator sistemi. Kam punuar n\u00eb zhvillimin e websajteve. Q\u00eb nga viti 2014, punoj n\u00eb Data Egret. Kompania merret me konsulenc\u00eb n\u00eb fush\u00ebn e Postgres. Ne angazhohemi pik\u00ebrisht me Postgres dhe \u00e7do dit\u00eb punojm\u00eb me Postgres, k\u00ebshtu q\u00eb kemi ekspertiz\u00eb t\u00eb ndryshme t\u00eb lidhur me operimin. <\/p>\n<p><\/p>\n<p>Dhe n\u00eb fund t\u00eb vitit 2018, filluam ngadal\u00eb t\u00eb p\u00ebrdorim Patroni. Dhe krijuam nj\u00eb p\u00ebrvoj\u00eb t\u00eb caktuar. Ne si\u00e7 e diagnostikojm\u00eb, e optimizojm\u00eb, arrit\u00ebm n\u00eb praktikat tona m\u00eb t\u00eb mira. dhe n\u00eb k\u00ebt\u00eb prezantim do t\u00eb flas p\u00ebr to.<\/p>\n<p><\/p>\n<p>P\u00ebrve\u00e7 Postgres, un\u00eb e dua Linux-in. M\u00eb p\u00eblqen t\u00eb eksperimentoj dhe t\u00eb b\u00ebj k\u00ebrkime n\u00eb t\u00eb, kam pasion p\u00ebr nd\u00ebrtimin e b\u00ebrthamave. M\u00eb p\u00eblqen virtualizimi, kontejner\u00ebt, Docker, Kubernetes. M\u00eb intereson gjith\u00e7ka, sepse ndikojn\u00eb zakon\u00ebt e vjetra t\u00eb administrator\u00ebve. M\u00eb p\u00eblqen t\u00eb merrem me monitorimet. Dhe m\u00eb p\u00eblqejn\u00eb gj\u00ebrat e Postgre-s q\u00eb lidhen me administrimin, pra, replikimi, kopjimi rezerv\u00eb. Dhe n\u00eb koh\u00ebn e lir\u00eb shkruaj n\u00eb Go. Nuk jam programues, vet\u00ebm p\u00ebr vete shkruaj n\u00eb Go. Dhe m\u00eb sjell k\u00ebnaq\u00ebsi. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Sfidhet e Patroni ose Si t\u00eb prishni klusterin tuaj PostgreSQL. Alexey Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/02cfd9293af5a8410c91e39afe2c75e6.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<ul>\n<li>Mendoj se shum\u00eb prej jush e din\u00eb se n\u00eb Postgres nuk ka HA (Disponueshm\u00ebri e Lart\u00eb) nga kutia. P\u00ebr t\u00eb marr\u00eb HA, duhet t\u00eb vendosni di\u00e7ka, ta konfigurojeni, t\u00eb investoni p\u00ebrpjekje dhe ta merrni at\u00eb. <\/li>\n<li>Ka disa mjete dhe Patroni \u00ebsht\u00eb nj\u00eb nga ato q\u00eb zgjidh HA mjaft mir\u00eb. Por duke e instaluar k\u00ebt\u00eb n\u00eb laboratorin testues dhe duke e nisur, mund t\u00eb shikojm\u00eb q\u00eb gjith\u00e7ka funksionon, mund t\u00eb riprodhojm\u00eb disa probleme, t\u00eb shohim si i trajton ato Patroni. Dhe do t\u00eb shohim se gjith\u00e7ka funksionon mrekullisht. <\/li>\n<li>Por n\u00eb praktik\u00eb p\u00ebrballeshim me probleme t\u00eb ndryshme. Dhe mbi k\u00ebto probleme do t\u00eb flas.<\/li>\n<li>Do t\u00eb tregoj si i kemi diagnostikuar, \u00e7far\u00eb kemi ajustuar \u2013 na ndihmoi apo jo. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Sfidhet e Patroni ose Si t\u00eb prishni klusterin tuaj PostgreSQL. Alexey Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/7126b45b40dd08521e80a3c150382bec.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<ul>\n<li>Nuk do t\u00eb flas p\u00ebr m\u00ebnyr\u00ebn e instalimit t\u00eb Patroni, sepse mund ta gjej\u00ebsh leht\u00ebsisht n\u00eb internet, mund t\u00eb shikosh skedar\u00ebt e konfigurimit p\u00ebr t\u00eb kuptuar se si fillon dhe si konfigurrohet gjith\u00e7ka. Mund t\u00eb kuptosh skemat, arkitektur\u00ebn duke gjetur informacion rreth tyre n\u00eb internet. <\/li>\n<li>Nuk do t\u00eb flas p\u00ebr p\u00ebrvoj\u00ebn e t\u00eb tjer\u00ebve. Do t\u00eb flas vet\u00ebm p\u00ebr problemet me t\u00eb cilat u p\u00ebrball\u00ebm ne. <\/li>\n<li>Dhe nuk do t\u00eb flas p\u00ebr problemet q\u00eb jan\u00eb jasht\u00eb Patroni dhe PostgreSQL. N\u00ebse, p\u00ebr shembull, problemet e lidhura me balancimin, kur klasteri yn\u00eb u prish, nuk do t\u00eb flas p\u00ebr k\u00ebt\u00eb. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Sfidhet e Patroni ose Si t\u00eb prishni klusterin tuaj PostgreSQL. Alexey Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/3f8d179e7c78ce83e8842ef5c72fe30d.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Dhe nj\u00eb disclaim\u00ebr t\u00eb vog\u00ebl para se t\u00eb fillojm\u00eb leksionin ton\u00eb. <\/p>\n<p><\/p>\n<p>T\u00eb gjitha k\u00ebto probleme me t\u00eb cilat p\u00ebrballeshim ndodh\u00ebn n\u00eb gjasht\u00eb-mujorin e par\u00eb t\u00eb p\u00ebrdorimit. Me kalimin e koh\u00ebs arrit\u00ebm n\u00eb praktikat tona m\u00eb t\u00eb mira. Dhe problemet na u zhduk\u00ebn. Prandaj, ky tregim u paralajm\u00ebrua rreth gjasht\u00eb muaj m\u00eb par\u00eb, kur gjith\u00e7ka ishte ende e fresk\u00ebt n\u00eb mendje dhe un\u00eb e mbaja mend si duhet. <\/p>\n<p><\/p>\n<p>N\u00eb p\u00ebrgatitjen e leksionit, un\u00eb rishtazi rishikoja postmortem\u00ebt e vjetra dhe shikoja log\u00ebt. Disa detaje mund t\u00eb jen\u00eb harruar, ose disa detaje mund t\u00eb mos ken\u00eb qen\u00eb t\u00eb hulumtuara plot\u00ebsisht gjat\u00eb analiz\u00ebs s\u00eb problemeve, prandaj n\u00eb disa momente mund t\u00eb duket se problemet nuk jan\u00eb shqyrtuar plot\u00ebsisht, ose ka nj\u00eb mang\u00ebsi t\u00eb informacionit. Prandaj ju k\u00ebrkoj ndjes\u00eb p\u00ebr k\u00ebt\u00eb moment. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Sfidhet e Patroni ose Si t\u00eb prishni klusterin tuaj PostgreSQL. Alexey Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/30d414284a41fcbc3bf417c9da28ca52.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u00c7far\u00eb \u00ebsht\u00eb Patroni?<\/p>\n<p><\/p>\n<ul>\n<li>\u00cbsht\u00eb nj\u00eb model p\u00ebr nd\u00ebrtimin e HA. K\u00ebshtu \u00ebsht\u00eb shkruar n\u00eb dokumentacion. Dhe nga k\u00ebndv\u00ebshtrimi im, kjo \u00ebsht\u00eb nj\u00eb sakt\u00ebsim shum\u00eb i duhur. Patroni nuk \u00ebsht\u00eb nj\u00eb plumb argjendi q\u00eb do t\u00eb zgjidh\u00eb t\u00eb gjitha problemet tuaja, dometh\u00ebn\u00eb, nevojitet nj\u00eb p\u00ebrpjekje p\u00ebr ta b\u00ebr\u00eb q\u00eb t\u00eb funksionoj\u00eb dhe t\u00eb sjell\u00eb dobi. <\/li>\n<li>\u00cbsht\u00eb nj\u00eb sh\u00ebrbim agjent q\u00eb instalohet n\u00eb \u00e7do sh\u00ebrbim me baz\u00eb t\u00eb dh\u00ebnash, dhe q\u00eb \u00ebsht\u00eb nj\u00eb lloj sistemi init p\u00ebr PostgreSQL tuaj. Ai nis PostgreSQL, e ndalon, e rib\u00ebn n\u00eb pun\u00eb, ndryshon konfigurimin dhe ndryshon topologjin\u00eb e klasterit tuaj. <\/li>\n<li>P\u00ebr pasoj\u00eb, p\u00ebr t\u00eb ruajtur gjendjen e klasterit, p\u00ebrfaq\u00ebsimin e tij aktual, si duket, nevojitet nj\u00eb depo. Dhe nga ky k\u00ebndv\u00ebshtrim, Patroni zgjodhi rrug\u00ebn e ruajtjes s\u00eb gjendjes n\u00eb nj\u00eb sistem t\u00eb jasht\u00ebm. Ky \u00ebsht\u00eb nj\u00eb sistem i ruajtjes s\u00eb konfigurimeve t\u00eb shp\u00ebrndara. Kjo mund t\u00eb jet\u00eb Etcd, Consul, ZooKeeper, ose Etcd i kubernetes, dmth, ndonj\u00eb nga k\u00ebto mund\u00ebsi. <\/li>\n<li>Nj\u00eb nga karakteristikat e Patroni \u00ebsht\u00eb se auto-failover e merrni direkt nga kutia, duke e konfiguruar at\u00eb. N\u00eb krahasim me Repmgr, failover vjen si paket\u00eb. Me Repmgr marrim switchover, por n\u00ebse duam auto-failover, duhet ta konfigurojm\u00eb at\u00eb p\u00ebrve\u00e7. N\u00eb Patroni, auto-failover \u00ebsht\u00eb i pranish\u00ebm nga kutia.<\/li>\n<li>Ka shum\u00eb gj\u00ebra t\u00eb tjera gjithashtu. P\u00ebr shembull, menaxhimi i konfigurimeve, shtimi i replikave t\u00eb reja, backup-et, etj. Por k\u00ebto jan\u00eb jasht\u00eb k\u00ebtij raporti, dhe nuk do t\u00eb flas p\u00ebr to. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Sfidhet e Patroni ose Si t\u00eb prishni klusterin tuaj PostgreSQL. Alexey Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/fed0f1ce931df99ca76ae1116f8098cc.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Nj\u00eb p\u00ebrmbledhje e vog\u00ebl \u00ebsht\u00eb se detyra kryesore e Patroni \u00ebsht\u00eb t\u00eb realizoj\u00eb auto-failover n\u00eb nj\u00eb m\u00ebnyr\u00eb t\u00eb besueshme, duke siguruar q\u00eb klasteri yn\u00eb t\u00eb mbetet funksional dhe aplikacioni t\u00eb mos v\u00ebrej\u00eb ndryshimet n\u00eb topologjin\u00eb e klasterit. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Sfidhet e Patroni ose Si t\u00eb prishni klusterin tuaj PostgreSQL. Alexey Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/fac52620957efa47ced330e7cc8084e0.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Por kur fillojm\u00eb t\u00eb p\u00ebrdorim Patroni, sistemi yn\u00eb b\u00ebhet pak m\u00eb kompleks. Nj\u00eb her\u00eb e nj\u00eb koh\u00eb kemi pasur Postgres, nd\u00ebrsa me p\u00ebrdorimin e Patroni marrim Patronin vet\u00eb, marrim DCS, ku ruhet gjendja. Dhe gjith\u00e7ka duhet t\u00eb funksionoj\u00eb si\u00e7 duhet. P\u00ebr k\u00ebt\u00eb, \u00e7far\u00eb mund t\u00eb d\u00ebshtoj\u00eb?<\/p>\n<p><\/p>\n<p>Mund t\u00eb d\u00ebshtoj\u00eb:<\/p>\n<p><\/p>\n<ul>\n<li>Mund t\u00eb d\u00ebshtoj\u00eb Postgres. Mund t\u00eb jet\u00eb master ose replik\u00eb, ndonj\u00ebra prej tyre mund t\u00eb dal\u00eb jasht\u00eb funksionit. <\/li>\n<li>Mund t\u00eb d\u00ebshtoj\u00eb vet\u00eb Patroni. <\/li>\n<li>Mund t\u00eb d\u00ebshtoj\u00eb DCS, ku ruhet gjendja.<\/li>\n<li>Dhe mund t\u00eb d\u00ebshtoj\u00eb rrjeti. <\/li>\n<\/ul>\n<p><\/p>\n<p>T\u00eb gjitha k\u00ebto \u00e7\u00ebshtje do t'i shqyrtoj n\u00eb raport. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Sfidhet e Patroni ose Si t\u00eb prishni klusterin tuaj PostgreSQL. Alexey Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/1aeaf46d37bf1935b514b0581e0dbd0b.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Do t\u00eb shqyrtoj rastet sipas kompleksitetit t\u00eb tyre, jo nga k\u00ebndv\u00ebshtrimi se \u00e7far\u00eb rasti p\u00ebrfshin shum\u00eb komponente. Por nga k\u00ebndv\u00ebshtrimi i ndjenjave subjektive, se ky rast ishte i komplikuar p\u00ebr mua, ishte e v\u00ebshtir\u00eb ta analizoja... dhe p\u00ebrkundrazi, ndonj\u00eb rast ishte i leht\u00eb dhe ishte e leht\u00eb ta analizoja. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Sfidhet e Patroni ose Si t\u00eb prishni klusterin tuaj PostgreSQL. Alexey Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/65b0c98bf2284610e955ced5eb998f39.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Rasti i par\u00eb \u00ebsht\u00eb m\u00eb i thjesht\u00eb. \u00cbsht\u00eb ai rast kur mor\u00ebm nj\u00eb klaster t\u00eb bazave t\u00eb t\u00eb dh\u00ebnave dhe n\u00eb t\u00eb nj\u00ebjtin klaster \u00e7el\u00ebm ruajtjen ton\u00eb DCS. Kjo \u00ebsht\u00eb nj\u00eb gabim shum\u00eb i zakonsh\u00ebm. \u00cbsht\u00eb nj\u00eb gabim n\u00eb nd\u00ebrtimin e arkitekturave, pra kombinimi i komponent\u00ebve t\u00eb ndrysh\u00ebm n\u00eb nj\u00eb vend. <\/p>\n<p><\/p>\n<p>Pra, ndodhi nj\u00eb failover, le t\u00eb shohim \u00e7far\u00eb ndodhi. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Sfidhet e Patroni ose Si t\u00eb prishni klusterin tuaj PostgreSQL. Alexey Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/244b69d623fe2205c2d9ed2aa4620067.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Dhe k\u00ebtu na intereson momenti kur ndodhi failover. Pra, na intereson ky moment i koh\u00ebs, kur u ndryshua gjendja e klasterit. <\/p>\n<p><\/p>\n<p>Por failover-i nuk \u00ebsht\u00eb gjithmon\u00eb momental, pra nuk z\u00eb nj\u00eb nj\u00ebsi kohe, ai mund t\u00eb zgjatet. Ai mund t\u00eb jet\u00eb i gjat\u00eb n\u00eb koh\u00eb.<\/p>\n<p><\/p>\n<p>Prandaj, ai ka koh\u00ebn e fillimit dhe koh\u00ebn e p\u00ebrfundimit, dmth, \u00ebsht\u00eb nj\u00eb ngjarje, e vazhdueshme. Dhe ne i ndajm\u00eb t\u00eb gjitha ngjarjet n\u00eb tre intervale: kemi koh\u00ebn para d\u00ebshtimit, gjat\u00eb d\u00ebshtimit dhe pas d\u00ebshtimit. Pra, ne shqyrtojm\u00eb t\u00eb gjitha ngjarjet n\u00eb k\u00ebt\u00eb shkall\u00eb kohore. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Sfidhet e Patroni ose Si t\u00eb prishni klusterin tuaj PostgreSQL. Alexey Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/a0ed61afe55d1a157147e0d80b17e5d1.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Dhe e para gj\u00eb, kur ndodhi d\u00ebshtimi, ne k\u00ebrkojm\u00eb shkakun, \u00e7far\u00eb ndodhi, \u00e7far\u00eb e shkaktoi d\u00ebshtimin. <\/p>\n<p><\/p>\n<p>N\u00ebse shikojm\u00eb logjet, ato do t\u00eb jen\u00eb logjet klasike t\u00eb Patroni. Ai na njofton atje se serveri u b\u00eb master dhe roli i masterit kaloi n\u00eb k\u00ebt\u00eb nyje. K\u00ebtu \u00ebsht\u00eb e sh\u00ebnuar. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Sfidhet e Patroni ose Si t\u00eb prishni klusterin tuaj PostgreSQL. Alexey Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/9998c69f7d0d4358b277f4e0e7b4350f.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>M\u00eb pas, ne duhet t\u00eb kuptojm\u00eb pse ndodhi d\u00ebshtimi, dmth, cilat ndodhi q\u00eb e detyruan rolin e masterit t\u00eb kalonte nga nj\u00eb nyje n\u00eb nj\u00eb tjet\u00ebr. Dhe n\u00eb k\u00ebt\u00eb rast, gjith\u00e7ka \u00ebsht\u00eb e thjesht\u00eb. Kemi nj\u00eb gabim n\u00eb nd\u00ebrveprimin me sistemin e ruajtjes. Masteri e kuptoi se nuk mund t\u00eb punonte me DCS, dmth, ndodhi nj\u00eb problem n\u00eb nd\u00ebrveprim. Dhe ai thot\u00eb se nuk mund t\u00eb jet\u00eb m\u00eb master dhe heq dor\u00eb nga autorizimet. Kjo rresht \u00abdemoted self\u00bb flet sakt\u00ebsisht p\u00ebr k\u00ebt\u00eb. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Sfidhet e Patroni ose Si t\u00eb prishni klusterin tuaj PostgreSQL. Alexey Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/4a8eca27689546b4b0fc3c666a3c37c4.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>N\u00ebse shohim ngjarjet q\u00eb i paraprin\u00eb d\u00ebshtimit, ne mund t\u00eb shohim ato shkakton q\u00eb ishin problemet p\u00ebr vazhdimin e pun\u00ebs s\u00eb masterit. <\/p>\n<p><\/p>\n<p>N\u00ebse shohim logjet e Patroni, do t\u00eb shohim se kemi nj\u00eb shum\u00ebllojshm\u00ebri gabimesh, koh\u00ebzgjatjesh, dmth, agjenti Patroni nuk mund t\u00eb punonte me DCS. N\u00eb k\u00ebt\u00eb rast, kjo \u00ebsht\u00eb agjenti Consul, me t\u00eb cilin komunikimi b\u00ebhet p\u00ebrmes portit 8500. <\/p>\n<p><\/p>\n<p>Dhe problemi k\u00ebtu \u00ebsht\u00eb se Patroni dhe baza e t\u00eb dh\u00ebnave jan\u00eb t\u00eb nisura n\u00eb t\u00eb nj\u00ebjtin host. Dhe n\u00eb k\u00ebt\u00eb nyje jan\u00eb nisur server\u00ebt Consul. Duke krijuar ngarkes\u00eb n\u00eb server, ne krijuam probleme edhe p\u00ebr <a class=\"wpil_keyword_link\" href=\"https:\/\/prohoster.info\/sq\/server\/\"   title=\"server\u00ebsh\" data-wpil-keyword-link=\"linked\"  data-wpil-monitor-id=\"1515\">server\u00ebsh<\/a> Consul. Ata nuk arrit\u00ebn t\u00eb komunikojn\u00eb normalisht. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Sfidhet e Patroni ose Si t\u00eb prishni klusterin tuaj PostgreSQL. Alexey Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/0d8dba6641809560e6b32825d481e30b.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Pas disa koh\u00ebsh, kur ngarkesa u ul, Patroni yn\u00eb mundi s\u00ebrish t\u00eb komunikonte me agjent\u00ebt. Puna normale rifilloi. Dhe i nj\u00ebjti server Pgdb-2 u b\u00eb s\u00ebrish master. DMTH, kishte nj\u00eb flip t\u00eb vog\u00ebl, p\u00ebr shkakun e t\u00eb cilit nyja hoqi dor\u00eb nga autorizimet e masterit dhe m\u00eb pas i mori s\u00ebrish, dmth, gjith\u00e7ka u kthye si\u00e7 ishte. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Sfidhet e Patroni ose Si t\u00eb prishni klusterin tuaj PostgreSQL. Alexey Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/131b93e0bd83099e1b99b53742419e13.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Dhe kjo mund t\u00eb interpretohet si nj\u00eb aktivizim t\u00eb rrem\u00eb, ose mund t\u00eb interpretohet si Patroni b\u00ebri gjith\u00e7ka si\u00e7 duhet. DMTH, ai e kuptoi se nuk mund t\u00eb mbante gjendjen e klasterit dhe hoqi dor\u00eb nga autorizimet.<\/p>\n<p><\/p>\n<p>Dhe k\u00ebtu \u00e7\u00ebshtja erdhi p\u00ebr shkak se serverat Consul ndodhen n\u00eb t\u00eb nj\u00ebjtin ekip me bazat. S\u00eb fundi, \u00e7do ngarkes\u00eb: qoft\u00eb ngarkes\u00eb n\u00eb disqe ose procesor\u00eb, gjithashtu ndikon n\u00eb nd\u00ebrveprimin me klasterin Consul.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Sfidhet e Patroni ose Si t\u00eb prishni klusterin tuaj PostgreSQL. Alexey Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/142c7cf839c8da078451f7ba9d5499e5.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Dhe ne vendos\u00ebm q\u00eb kjo nuk duhet t\u00eb jetoj\u00eb s\u00eb bashku, ne ndam\u00eb nj\u00eb klaster t\u00eb ve\u00e7ant\u00eb p\u00ebr Consul. Dhe Patroni tashm\u00eb po punonte me nj\u00eb Consul t\u00eb ve\u00e7ant\u00eb, dmth ishte nj\u00eb klaster Postgres i ve\u00e7ant\u00eb, nj\u00eb klaster Consul i ve\u00e7ant\u00eb. Kjo \u00ebsht\u00eb nj\u00eb udh\u00ebzues baz\u00eb p\u00ebr si duhet t\u00eb ndahen dhe mbahen t\u00eb gjith\u00eb k\u00ebto gj\u00ebra, q\u00eb t\u00eb mos jetojn\u00eb s\u00eb bashku. <\/p>\n<p><\/p>\n<p>Si nj\u00eb mund\u00ebsi, mund t\u00eb rregullojm\u00eb parametrat ttl, loop_wait, retry_timeout, dmth. t\u00eb p\u00ebrpiqemi q\u00eb duke rritur k\u00ebto parametra t\u00eb kalojm\u00eb k\u00ebto pik\u00ebngarkesash t\u00eb p\u00ebrkohshme. Por kjo nuk \u00ebsht\u00eb opsioni m\u00eb i p\u00ebrshtatsh\u00ebm, sepse kjo ngarkes\u00eb mund t\u00eb jet\u00eb e vazhdueshme me koh\u00eb. Dhe thjesht do t\u00eb dalim p\u00ebrtej k\u00ebtyre kufijve t\u00eb parametrave. Dhe kjo mund t\u00eb mos ndihmoj\u00eb aq shum\u00eb. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Sfidhet e Patroni ose Si t\u00eb prishni klusterin tuaj PostgreSQL. Alexey Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/c51f35dcd88b1c792acec231c0c6c66c.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Problemi i par\u00eb, si\u00e7 e kuptuat, \u00ebsht\u00eb i thjesht\u00eb. Ne mor\u00ebm dhe DCS e vendos\u00ebm me baz\u00ebn, dhe mor\u00ebm nj\u00eb problem. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Sfidhet e Patroni ose Si t\u00eb prishni klusterin tuaj PostgreSQL. Alexey Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/cc2a98d9790441577fb4080406cbc53f.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Problemi i dyt\u00eb \u00ebsht\u00eb i ngjash\u00ebm me t\u00eb parin. Ai \u00ebsht\u00eb i ngjash\u00ebm sepse kemi s\u00ebrish probleme me nd\u00ebrveprimin me sistemin DCS.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Sfidhet e Patroni ose Si t\u00eb prishni klusterin tuaj PostgreSQL. Alexey Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/e5c01b105adca48cc620085db8dd2d2b.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>N\u00ebse shohim log\u00ebt, do t\u00eb shohim se s\u00ebrish kemi gabime komunikimi. Dhe Patroni thot\u00eb se nuk mund t\u00eb nd\u00ebrveproj\u00eb me DCS, prandaj masteri aktual kalon n\u00eb modin e replik\u00ebs.<\/p>\n<p><\/p>\n<p>Masteri i vjet\u00ebr b\u00ebhet replik\u00eb, k\u00ebtu Patroni vepron si\u00e7 duhet. Ai nis pg_rewind p\u00ebr t\u00eb kthyer regjistrin e transaksioneve dhe m\u00eb pas t\u00eb lidhet me masterin e ri, dhe pastaj t\u00eb arrij\u00eb masterin e ri. K\u00ebtu Patroni vepron ashtu si\u00e7 duhet. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Sfidhet e Patroni ose Si t\u00eb prishni klusterin tuaj PostgreSQL. Alexey Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/29255f4790abb15b64dbf9ee0b41c7fc.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>K\u00ebtu duhet t\u00eb gjejm\u00eb vendin q\u00eb i parapriu fileserver-it, dmth. ato gabime q\u00eb sh\u00ebrbyen si shkak se p\u00ebrse ndodhi fileserver-i. Dhe n\u00eb k\u00ebt\u00eb kontekst, punuar me log\u00ebt e Patronit \u00ebsht\u00eb mjaft e leht\u00eb. Ai shkruan mesazhe t\u00eb nj\u00ebjta me nj\u00eb interval t\u00eb caktuar. Dhe n\u00ebse fillojm\u00eb t\u00eb rrotullojm\u00eb shpejt k\u00ebto log-e, do t\u00eb shohim se log\u00ebt jan\u00eb ndryshuar, q\u00eb do t\u00eb thot\u00eb se kan\u00eb filluar disa probleme. Kthehemi shpejt n\u00eb k\u00ebt\u00eb vend, shikojm\u00eb se \u00e7far\u00eb ndodh. <\/p>\n<p><\/p>\n<p>Dhe n\u00eb nj\u00eb situat\u00eb normale, log\u00ebt duket m\u00eb shum\u00eb k\u00ebshtu. Kontrollohet pronari i bllokimit. Dhe n\u00ebse pronari, p\u00ebr shembull, \u00ebsht\u00eb ndryshuar, mund t\u00eb ndodhin disa ngjarje, p\u00ebr t\u00eb cilat Patroni duhet t\u00eb reagoj\u00eb. Por n\u00eb k\u00ebt\u00eb rast, gjith\u00e7ka \u00ebsht\u00eb n\u00eb rregull. Ne k\u00ebrkojm\u00eb vendin kur filluan gabimet. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Sfidhet e Patroni ose Si t\u00eb prishni klusterin tuaj PostgreSQL. Alexey Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/f48ebd22a405f5b2900621451c68f543.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Dhe duke shkuar deri n\u00eb at\u00eb pik\u00eb ku filluan t\u00eb shfaqeshin gabimet, ne shohim se ndodhi nj\u00eb auto-failover. Dhe p\u00ebr shkak se gabimet tona ishin t\u00eb lidhura me nd\u00ebrveprimin me DCS dhe n\u00eb rastin ton\u00eb ne p\u00ebrdor\u00ebm Consul, ne gjithashtu shohim n\u00eb log-et e Consul, se \u00e7far\u00eb ndodhi atje. <\/p>\n<p><\/p>\n<p>Duke p\u00ebrputhur m\u00eb af\u00ebr koh\u00ebn e failover-it dhe koh\u00ebn n\u00eb log-et e Consul, ne shohim se fqinj\u00ebt tan\u00eb n\u00eb klasterin Consul filluan t\u00eb dyshojn\u00eb p\u00ebr ekzistenc\u00ebn e an\u00ebtar\u00ebve t\u00eb tjer\u00eb t\u00eb klasterit Consul.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Sfidhet e Patroni ose Si t\u00eb prishni klusterin tuaj PostgreSQL. Alexey Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/63b02ac5b4f5a34a2822f1eee2b1f2f8.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Dhe n\u00ebse shohim log-et e agjent\u00ebve t\u00eb tjer\u00eb t\u00eb Consul, gjithashtu duket se po ndodh nj\u00eb kolaps rrjetesh. T\u00eb gjith\u00eb an\u00ebtar\u00ebt e klasterit Consul dyshojn\u00eb p\u00ebr ekzistenc\u00ebn e nj\u00ebri-tjetrit. Dhe kjo ishte nj\u00eb nxitje p\u00ebr failover-in. <\/p>\n<p><\/p>\n<p>N\u00ebse shohim se \u00e7far\u00eb ndodhi para k\u00ebtyre gabimeve, mund t\u00eb shohim se ka gjithfar\u00eb gabimesh, p\u00ebr shembull, deadlin\u00eb, RPC falled, pra, duket qart\u00eb se ka nj\u00eb problem t\u00eb duksh\u00ebm n\u00eb nd\u00ebrveprimin e an\u00ebtar\u00ebve t\u00eb klasterit Consul me nj\u00ebri-tjetrin. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Sfidhet e Patroni ose Si t\u00eb prishni klusterin tuaj PostgreSQL. Alexey Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/b15c912f2afb49d9d85e7bb9361ce449.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>P\u00ebrgjigjja m\u00eb e leht\u00eb \u00ebsht\u00eb t\u00eb rregullojm\u00eb rrjetin. Por p\u00ebr mua, duke q\u00ebndruar n\u00eb tribun\u00eb, \u00ebsht\u00eb e leht\u00eb t\u00eb deklaroj k\u00ebt\u00eb. Por rrethanat jan\u00eb t\u00eb tilla q\u00eb nuk gjithmon\u00eb klienti mund t\u00eb lejoj\u00eb t\u00eb rregulloj\u00eb rrjetin. Ai mund t\u00eb jet\u00eb n\u00eb DC dhe mund t\u00eb mos ket\u00eb mund\u00ebsi t\u00eb rregulloj\u00eb rrjetin, t\u00eb ndikoj\u00eb n\u00eb pajisjet. Dhe prandaj ne kemi nevoj\u00eb p\u00ebr disa mund\u00ebsi t\u00eb tjera. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Sfidhet e Patroni ose Si t\u00eb prishni klusterin tuaj PostgreSQL. Alexey Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/1dbdb66233acc3bc321a30a1c5fe14f9.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Mund\u00ebsit\u00eb jan\u00eb:<\/p>\n<p><\/p>\n<ul>\n<li>Mund\u00ebsia m\u00eb e thjesht\u00eb, e cila \u00ebsht\u00eb shkruar, mendoj, madje edhe n\u00eb dokumentacion, \u00ebsht\u00eb t\u00eb \u00e7aktivizosh kontrollimet e Consul, pra thjesht t\u00eb kalosh nj\u00eb masiv t\u00eb zbraz\u00ebt. Dhe ne i themi agjentit t\u00eb Consul-it t\u00eb mos p\u00ebrdor\u00eb asnj\u00eb kontrollim. N\u00ebp\u00ebrmjet k\u00ebtyre kontrollimeve ne mund t\u00eb injorojm\u00eb k\u00ebto stuhi rrjetesh dhe t\u00eb mos inicijojm\u00eb nj\u00eb failover. <\/li>\n<li>Mund\u00ebsia tjet\u00ebr \u00ebsht\u00eb t\u00eb rishikoni raft_multiplier. Ky \u00ebsht\u00eb nj\u00eb paramet\u00ebr i vet\u00eb serverit t\u00eb Consul. N\u00eb m\u00ebnyr\u00eb q\u00eb ai t\u00eb jet\u00eb n\u00eb nj\u00eb vler\u00eb prej 5. Kjo vler\u00eb rekomandohet sipas dokumentacionit p\u00ebr mjediset staging. N\u00eb thelb, kjo ndikon n\u00eb frekuenc\u00ebn e shk\u00ebmbimit t\u00eb mesazheve midis an\u00ebtar\u00ebve t\u00eb rrjetit Consul. N\u00eb thelb, ky paramet\u00ebr ndikon n\u00eb shpejt\u00ebsin\u00eb e komunikimit t\u00eb sh\u00ebrbimit midis an\u00ebtar\u00ebve t\u00eb klasterit Consul. Dhe p\u00ebr prodhim tashm\u00eb rekomandohet ta ulet k\u00ebt\u00eb q\u00eb nyjat t\u00eb komunikojn\u00eb m\u00eb shpesh. <\/li>\n<li>Nj\u00eb opsion tjet\u00ebr q\u00eb kemi filluar t\u00eb p\u00ebrdorim \u00ebsht\u00eb rritja e p\u00ebrpar\u00ebsis\u00eb s\u00eb proceseve Consul midis proceseve t\u00eb tjera p\u00ebr planifikuesin e proceseve t\u00eb sistemit operativ. Ekziston nj\u00eb parametr \u00abnice\u00bb, i cili p\u00ebrcakton sakt\u00ebsisht p\u00ebrpar\u00ebsin\u00eb e proceseve q\u00eb merret parasysh nga planifikuesi i OS gjat\u00eb planifikimit. Ne e kemi ulur vler\u00ebn e nice p\u00ebr agjent\u00ebt e Consul, dmth. e rrit\u00ebm p\u00ebrpar\u00ebsin\u00eb, n\u00eb m\u00ebnyr\u00eb q\u00eb sistemi operativ t'u jap\u00eb proceseve Consul m\u00eb shum\u00eb koh\u00eb p\u00ebr t\u00eb punuar dhe p\u00ebr t\u00eb ekzekutuar kodin e tyre. N\u00eb rastin ton\u00eb, kjo e zgjidhi problemin ton\u00eb. <\/li>\n<li>Nj\u00eb opsion tjet\u00ebr \u00ebsht\u00eb t\u00eb mos p\u00ebrdorim Consul. Kam nj\u00eb mik q\u00eb \u00ebsht\u00eb nj\u00eb mb\u00ebshtet\u00ebs i madh i Etcd. Dhe ne diskutojm\u00eb rregullisht se \u00e7far\u00eb \u00ebsht\u00eb m\u00eb mir\u00eb, Etcd apo Consul. Por n\u00eb lidhje me at\u00eb q\u00eb \u00ebsht\u00eb m\u00eb e mira, ne zakonisht pajtohemi se Consul ka nj\u00eb agjent q\u00eb duhet t\u00eb jet\u00eb i aktivizuar n\u00eb \u00e7do nyje me baz\u00ebn e t\u00eb dh\u00ebnave. K\u00ebshtu, nd\u00ebrveprimi i Patroni me klasterin Consul kalon p\u00ebrmes k\u00ebtij agjenti. Dhe ky agjent b\u00ebhet pika kritike. N\u00ebse ndodhi di\u00e7ka me agjentin, at\u00ebher\u00eb Patroni nuk mund t\u00eb punoj\u00eb m\u00eb me klasterin Consul. Dhe kjo \u00ebsht\u00eb nj\u00eb problem. N\u00eb rastin e Etcd, nuk ka asnj\u00eb agjent. Patroni mund t\u00eb punoj\u00eb drejtp\u00ebrdrejt me list\u00ebn e server\u00ebve Etcd dhe t\u00eb komunikoj me ta. N\u00eb k\u00ebt\u00eb aspekt, n\u00ebse p\u00ebrdorni Etcd n\u00eb kompanin\u00eb tuaj, at\u00ebher\u00eb ndoshta Etcd do t\u00eb ishte zgjedhja m\u00eb e mir\u00eb se Consul. Por ne te klient\u00ebt tan\u00eb jemi gjithmon\u00eb t\u00eb kufizuar nga ajo q\u00eb ka zgjedhur dhe po p\u00ebrdor klienti. Dhe n\u00eb shumic\u00ebn e rasteve, Consul \u00ebsht\u00eb te t\u00eb gjitha klient\u00ebt. <\/li>\n<li>Dhe pika e fundit \u00ebsht\u00eb rishikimi i vlerave t\u00eb parametrave. Ne mund t'i rrisim k\u00ebto parametra n\u00eb nj\u00eb nivel m\u00eb t\u00eb lart\u00eb n\u00eb shpres\u00eb se problemet tona t\u00eb momentit n\u00eb rrjet do t\u00eb jen\u00eb t\u00eb shkurtra dhe nuk do t\u00eb bien brenda intervalit t\u00eb k\u00ebtyre parametrave. K\u00ebshtu, ne mund t\u00eb reduktojm\u00eb agresivitetin e Patroni n\u00eb realizimin e autoshkarkimeve, n\u00ebse ndodhin disa probleme n\u00eb rrjet.<\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Sfidhet e Patroni ose Si t\u00eb prishni klusterin tuaj PostgreSQL. Alexey Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/f0043050da20f6368dabf66ec9a4eade.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Mendoj se shum\u00eb ata q\u00eb p\u00ebrdorin Patroni jan\u00eb t\u00eb njohur me k\u00ebt\u00eb komand\u00eb. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Sfidhet e Patroni ose Si t\u00eb prishni klusterin tuaj PostgreSQL. Alexey Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/9f78f59dab166e47ac78436802156d04.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kjo komand\u00eb tregon gjendjen aktuale t\u00eb klasterit. Dhe me sa duket, kjo pamje mund t\u00eb duket normale. Ne kemi nj\u00eb master, kemi nj\u00eb replik\u00eb, nuk ka as nj\u00eb vones\u00eb n\u00eb replikim. Por kjo pamje \u00ebsht\u00eb normale deri n\u00eb at\u00eb moment kur nuk e dim\u00eb se n\u00eb k\u00ebt\u00eb klaster duhen t\u00eb jen\u00eb tre nyje, e jo dy. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Sfidhet e Patroni ose Si t\u00eb prishni klusterin tuaj PostgreSQL. Alexey Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/a39c891f8620ba210b6bce0727e0fa8b.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Si p\u00ebrfundim, ka ndodhur nj\u00eb autofailover. Dhe pas k\u00ebtij autofailoveri, na ka humbur nj\u00eb replika. Duhet t\u00eb kuptojm\u00eb pse ndodhi kjo dhe ta rikuperojm\u00eb at\u00eb. P\u00ebrs\u00ebri shikojm\u00eb log\u00ebt dhe shohim pse ndodhi autofailoveri.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Sfidhet e Patroni ose Si t\u00eb prishni klusterin tuaj PostgreSQL. Alexey Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/e6e67d46cb20c8d7e58c7505157f68e1.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>N\u00eb k\u00ebt\u00eb rast, replica e dyt\u00eb u b\u00eb master. K\u00ebtu gjith\u00e7ka \u00ebsht\u00eb n\u00eb rregull. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Sfidhet e Patroni ose Si t\u00eb prishni klusterin tuaj PostgreSQL. Alexey Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/b86ccea68b0c6013a23bbd2804e48320.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Dhe duhet t\u00eb shohim p\u00ebr replik\u00ebn q\u00eb ka humbur dhe nuk \u00ebsht\u00eb n\u00eb klaster. Hapim log\u00ebt e Patroni dhe shohim se \u00e7far\u00eb ka ndodhur gjat\u00eb p\u00ebrpjekjes p\u00ebr t'u lidhur me klasterin, kishte nj\u00eb problem n\u00eb faz\u00ebn e pg_rewind. P\u00ebr t'u lidhur me klasterin, duhet t\u00eb rikthejm\u00eb regjistrin e transaksioneve, t\u00eb k\u00ebrkojm\u00eb regjistrin e nevojsh\u00ebm nga masteri dhe p\u00ebr at\u00eb t\u00eb arrijm\u00eb masterin. <\/p>\n<p><\/p>\n<p>N\u00eb k\u00ebt\u00eb rast nuk kemi regjistrin e transaksioneve dhe replika nuk mund t\u00eb startohet. Si rrjedhoj\u00eb, ndalojm\u00eb Postgres me nj\u00eb gabim. Prandaj, ajo nuk \u00ebsht\u00eb n\u00eb klaster. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Sfidhet e Patroni ose Si t\u00eb prishni klusterin tuaj PostgreSQL. Alexey Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/dadbd44b766674b719d85781ef7f0caa.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Duhet t\u00eb kuptojm\u00eb pse ajo nuk \u00ebsht\u00eb n\u00eb klaster dhe pse nuk kishte log\u00eb. Shkojm\u00eb te masteri i ri dhe shohim \u00e7far\u00eb ka n\u00eb log\u00ebt e tij. Dhe rezulton se kur u b\u00eb pg_rewind ka ndodhur nj\u00eb checkpoint. Dhe nj\u00eb pjes\u00eb e regjistrave t\u00eb vjet\u00ebr t\u00eb transaksioneve u riem\u00ebruan. Kur masteri i vjet\u00ebr p\u00ebrpiqej t\u00eb lidhej me masterin e ri dhe k\u00ebrkonte k\u00ebto log\u00eb, ato tashm\u00eb ishin riem\u00ebruar dhe thjesht nuk ekzistonin.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Sfidhet e Patroni ose Si t\u00eb prishni klusterin tuaj PostgreSQL. Alexey Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/f2d5c37324f9436b2bdad1290612d86f.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Krahasova timestamp-et kur ndodh\u00ebn k\u00ebto ngjarje. Dhe dallimi ishte vet\u00ebm 150 milisekonda, pra, n\u00eb 369 milisekonda p\u00ebrfundoi checkpoint-i, dhe seksionet WAL u riem\u00ebruan. Dhe vet\u00ebm 517 milisekondash pas 150 milisekondave rifilloi rewind n\u00eb replik\u00ebn e vjet\u00ebr. Pra, realisht 150 milisekonda ishin t\u00eb mjaftueshme p\u00ebr t\u00eb parandalur replik\u00ebn q\u00eb t\u00eb lidhej dhe t\u00eb punonte. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Sfidhet e Patroni ose Si t\u00eb prishni klusterin tuaj PostgreSQL. Alexey Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/99dd80deb8466bfc3aff568456e07102.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Cilat jan\u00eb opsionet?<\/p>\n<p><\/p>\n<p>Fillimisht kemi p\u00ebrdorur slotet e replikimit. Na dukej se ishte mir\u00eb. Megjithat\u00eb, n\u00eb faz\u00ebn e par\u00eb t\u00eb operimit i ndaluam slotet. Na dukej se n\u00ebse slotet do t\u00eb grumbullonin shum\u00eb seksione WAL, mund t\u00eb rrezikonim masterin. Ai do t\u00eb bie. Pas nj\u00eb kohe pa slot, kuptuam se na duheshin slotet dhe i rikthyer. <\/p>\n<p><\/p>\n<p>Por k\u00ebtu ka nj\u00eb problem, q\u00eb kur ngel\u00ebsi kalon n\u00eb kopje, ai fshin slotet dhe s\u00eb bashku me slotet fshin segmentet WAL. Dhe p\u00ebr t\u00eb shmangur shfaqjen e k\u00ebtij problemi, ne vendos\u00ebm t\u00eb rrisim parametrin wal_keep_segments. Ai fillimisht \u00ebsht\u00eb 8 segmente. Ne e rrit\u00ebm n\u00eb 1,000 dhe shikuan sa hap\u00ebsir\u00eb kishte n\u00eb dispozicion. Dhe ne i dham\u00eb 16 gigabajt p\u00ebr wal_keep_segments. Pra, gjat\u00eb kalimit, ne gjithmon\u00eb kemi nj\u00eb rezerv\u00eb prej 16 gigabajt\u00ebsh t\u00eb regjistrimeve t\u00eb transaksioneve n\u00eb t\u00eb gjitha nyjat.<\/p>\n<p><\/p>\n<p>Dhe plus \u2013 kjo \u00ebsht\u00eb gjithashtu e r\u00ebnd\u00ebsishme p\u00ebr detyrat e zgjatura t\u00eb mir\u00ebmbajtjes. Le t\u00eb themi se na nevojitet t\u00eb p\u00ebrdit\u00ebsojm\u00eb nj\u00eb nga replikat. Dhe duam ta ndalim at\u00eb. Duhet t\u00eb p\u00ebrdit\u00ebsojm\u00eb softuerin, ndoshta sistemin operativ, di\u00e7ka tjet\u00ebr. Dhe kur ndalim replik\u00ebn, p\u00ebr k\u00ebt\u00eb replik\u00eb fshihet gjithashtu sloti. Dhe n\u00ebse p\u00ebrdorim nj\u00eb wal_keep_segments t\u00eb vog\u00ebl, at\u00ebher\u00eb gjat\u00eb munges\u00ebs s\u00eb zgjatur t\u00eb replik\u00ebs, regjistrimet e transaksioneve do t\u00eb humbin. Ne do ta rishikojm\u00eb replik\u00ebn, ajo do t\u00eb k\u00ebrkoj\u00eb ato regjistrime transaksionesh, ku ishte ndalur, por n\u00eb ngel\u00ebs ato mund t\u00eb mos jen\u00eb. Dhe replika nuk do t\u00eb mund t\u00eb lidh\u00eb. Prandaj, mbajm\u00eb nj\u00eb rezerv\u00eb t\u00eb madhe t\u00eb regjistrimeve.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Sfidhet e Patroni ose Si t\u00eb prishni klusterin tuaj PostgreSQL. Alexey Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/dad55c828128ce92f649a99cc53ce54b.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Sfidhet e Patroni ose Si t\u00eb prishni klusterin tuaj PostgreSQL. Alexey Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/63e70f0b098567f3a6d4fd66a0c293bb.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kemi nj\u00eb baz\u00eb prodhimi. Aty tashm\u00eb funksionojn\u00eb projekte. <\/p>\n<p><\/p>\n<p>Ka ndodhur nj\u00eb d\u00ebshtim i skedar\u00ebve. Hym\u00eb dhe shikuan \u2013 \u00e7do gj\u00eb \u00ebsht\u00eb n\u00eb rregull, replikat jan\u00eb n\u00eb vend, nuk ka vones\u00eb n\u00eb replikim. Po ashtu, nuk ka gabime n\u00eb regjistrat, \u00e7do gj\u00eb \u00ebsht\u00eb n\u00eb rregull. <\/p>\n<p><\/p>\n<p>Ekipa produkti thot\u00eb se duket se duhet t\u00eb ket\u00eb ndonj\u00eb t\u00eb dh\u00ebn\u00eb, por ne i shohim ato n\u00eb nj\u00eb burim t\u00eb vet\u00ebm, nd\u00ebrsa n\u00eb baz\u00eb ne nuk i shohim. Dhe duhet t\u00eb kuptojm\u00eb \u00e7far\u00eb ndodhi me to. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Sfidhet e Patroni ose Si t\u00eb prishni klusterin tuaj PostgreSQL. Alexey Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/568ca9aa31680d5e0c9d4ed9693b14e6.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>E qart\u00eb, pg_rewind i ka fshir\u00eb ato. Ne e kuptuam menj\u00ebher\u00eb k\u00ebt\u00eb, por shkuam p\u00ebr t\u00eb par\u00eb \u00e7far\u00eb ndodhi. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Sfidhet e Patroni ose Si t\u00eb prishni klusterin tuaj PostgreSQL. Alexey Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/a8fee389201d96e81761cd276c5265c3.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>N\u00eb loge gjithmon\u00eb mund t\u00eb gjejm\u00eb, kur ka ndodhur d\u00ebshtimi i skedar\u00ebve, kush u b\u00eb ngel\u00ebsi dhe mund t\u00eb p\u00ebrcaktojm\u00eb kush ishte ngel\u00ebsi i vjet\u00ebr dhe kur ai vendosi t\u00eb b\u00ebhej kopje, pra na duhen k\u00ebto loge, p\u00ebr t\u00eb zbuluar sasin\u00eb e regjistrimeve t\u00eb transaksioneve q\u00eb jan\u00eb humbur.<\/p>\n<p><\/p>\n<p>Mjeshtri yn\u00eb i vjet\u00ebr u ri-ngarkua. Dhe n\u00eb fillimin automatik ishte e shkruar Patroni. Patroni u aktivizua. Ai menj\u00ebher\u00eb aktivizoi Postgres. M\u00eb sakt\u00ebsisht, para se t\u00eb aktivizonte Postgres-in dhe para se ta b\u00ebnte at\u00eb nj\u00eb replik\u00eb, Patroni aktivizoi procesin pg_rewind. Si pasoj\u00eb, ai fshiu nj\u00eb pjes\u00eb t\u00eb regjistrave t\u00eb transaksioneve, shkarkoi t\u00eb reja dhe u lidhi. K\u00ebtu Patroni punoi shk\u00eblqyer, dmth si\u00e7 ishte parashikuar. Klasteri yn\u00eb u rikuperua. Kishim 3 node, pas failover-it 3 node - gjith\u00e7ka ishte n\u00eb rregull. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Sfidhet e Patroni ose Si t\u00eb prishni klusterin tuaj PostgreSQL. Alexey Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/b747a24f53e20ed098c2dc0afc79bead.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kemi humbur nj\u00eb pjes\u00eb t\u00eb t\u00eb dh\u00ebnave. Dhe na nevojitet t\u00eb kuptojm\u00eb sa kemi humbur. Po k\u00ebrkojm\u00eb pik\u00ebrisht momentin kur ndodhi rewind. Mund ta gjejm\u00eb k\u00ebt\u00eb p\u00ebrmes regjistrimeve n\u00eb ditar. U aktivizua rewind, b\u00ebri di\u00e7ka dhe p\u00ebrfundoi.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Sfidhet e Patroni ose Si t\u00eb prishni klusterin tuaj PostgreSQL. Alexey Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/5b7bacffb52e3ccd529a3a734c441295.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Na nevojitet t\u00eb gjejm\u00eb pozitat n\u00eb regjistrin e transaksioneve ku ndali masteri i vjet\u00ebr. N\u00eb k\u00ebt\u00eb rast \u2013 kjo \u00ebsht\u00eb shenja k\u00ebtu. Dhe na nevojitet nj\u00eb shenj\u00eb tjet\u00ebr, pra ajo distanc\u00eb me t\u00eb cil\u00ebn dallohet masteri i vjet\u00ebr nga ai i ri. <\/p>\n<p><\/p>\n<p>Marrim diferenc\u00ebn e zakonshme t\u00eb pg_wal_lsn_diff dhe e krahasojm\u00eb k\u00ebto dy shenja. N\u00eb k\u00ebt\u00eb rast, marrim 17 megabajt. \u00c7far\u00eb \u00ebsht\u00eb shum\u00eb ose pak e vendos secili p\u00ebr vete. Sepse p\u00ebr dik\u00eb 17 megabajt \u00ebsht\u00eb pak, p\u00ebr dik\u00eb tjet\u00ebr \u00ebsht\u00eb shum\u00eb dhe e papranueshme. K\u00ebtu secili e p\u00ebrcakton individualisht n\u00eb p\u00ebrputhje me nevojat e biznesit. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Sfidhet e Patroni ose Si t\u00eb prishni klusterin tuaj PostgreSQL. Alexey Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/55335fce85961e159459c38300a0ad12.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Por \u00e7far\u00eb kemi zbuluar p\u00ebr vete? <\/p>\n<p><\/p>\n<p>S\u00eb pari, duhet t\u00eb vendosim n\u00ebse gjithmon\u00eb na nevojitet autostart-i i Patroni pas rinisjes s\u00eb sistemit. Shpesh ndodh q\u00eb duhet t\u00eb hyjm\u00eb te masteri i vjet\u00ebr, t\u00eb shohim sa larg ka shkuar. Ndoshta t\u00eb hedhim nj\u00eb sy n\u00eb segmentet e regjistrit t\u00eb transaksioneve, t\u00eb shohim se \u00e7far\u00eb ka aty. Dhe t\u00eb kuptojm\u00eb nqs mund t\u2019i humbasim k\u00ebto t\u00eb dh\u00ebna apo na nevojitet t\u00eb aktivizojm\u00eb masterin e vjet\u00ebr n\u00eb modalitetin standalone p\u00ebr t\u00eb nxjerr\u00eb k\u00ebto t\u00eb dh\u00ebna. <\/p>\n<p><\/p>\n<p>Dhe vet\u00ebm pas k\u00ebsaj duhet t\u00eb marrim vendime se a mund t\u00eb hedhim k\u00ebto t\u00eb dh\u00ebna ose mund t'i rikthejm\u00eb, duke lidhur k\u00ebt\u00eb nyj\u00eb si nj\u00eb replik\u00eb n\u00eb klasterin ton\u00eb.<\/p>\n<p><\/p>\n<p>P\u00ebrve\u00e7 k\u00ebsaj, ekziston parametri \u2018maximum_lag_on_failover\u2019. N\u00eb p\u00ebrllogaritjen time, ky paramet\u00ebr ka nj\u00eb vler\u00eb prej 1 megabajt. <\/p>\n<p><\/p>\n<p>Si funksionon? N\u00ebse replika jon\u00eb \u00ebsht\u00eb prapa me 1 megabajt t\u00eb dh\u00ebnash n\u00eb lagun e replikimit, at\u00ebher\u00eb kjo replik\u00eb nuk merr pjes\u00eb n\u00eb zgjedhje. Dhe n\u00ebse ndodhi nj\u00eb failover, Patroni sheh se cilat replika jan\u00eb prapa. N\u00ebse ato jan\u00eb prapa me nj\u00eb num\u00ebr t\u00eb madh regjistrimesh t\u00eb transaksioneve, nuk mund t\u00eb b\u00ebhen master. Kjo \u00ebsht\u00eb nj\u00eb funksion mbrojt\u00ebs shum\u00eb i mir\u00eb, i cili ndihmon p\u00ebr t\u00eb mos humbur shum\u00eb t\u00eb dh\u00ebna. <\/p>\n<p><\/p>\n<p>Por k\u00ebtu ka nj\u00eb problem se lagun e replikimit n\u00eb klasterin Patroni dhe DCS e p\u00ebrdit\u00ebson me nj\u00eb interval t\u00eb caktuar. Mendoj se vlera e ttl sipas default \u00ebsht\u00eb 30 sekonda.<\/p>\n<p><\/p>\n<p>K\u00ebshtu, mund t\u00eb ndodh\u00eb nj\u00eb situat\u00eb ku vonesa e replikimit p\u00ebr replikat n\u00eb DCS \u00ebsht\u00eb nj\u00eb, nd\u00ebrsa n\u00eb t\u00eb v\u00ebrtet\u00eb mund t\u00eb jet\u00eb krejt\u00ebsisht ndryshe ose nuk ka vones\u00eb fare, pra kjo gj\u00eb nuk \u00ebsht\u00eb n\u00eb koh\u00eb reale. Dhe ajo nuk gjithmon\u00eb reflekton realitetin. Prandaj, nuk ka sens t\u00eb krijoni logjik\u00eb t\u00eb nd\u00ebrlikuar mbi t\u00eb. <\/p>\n<p><\/p>\n<p>Dhe rreziku i humbjeve gjithmon\u00eb mbetet. N\u00eb rastin m\u00eb t\u00eb keq nj\u00eb formul\u00eb, nd\u00ebrsa n\u00eb rastin mesatar nj\u00eb formul\u00eb tjet\u00ebr. K\u00ebshtu, kur planifikojm\u00eb implementimin e Patroni dhe vler\u00ebsojm\u00eb sa t\u00eb dh\u00ebna mund t\u00eb humbasim, duhet t\u00eb mb\u00ebshtetemi n\u00eb k\u00ebto formule dhe t\u00eb kemi nj\u00eb ide t\u00eb p\u00ebraf\u00ebrt se sa t\u00eb dh\u00ebna mund t\u00eb humbasim. <\/p>\n<p><\/p>\n<p>Dhe ka lajme t\u00eb mira. Kur masteri i vjet\u00ebr \u00ebsht\u00eb larguar p\u00ebrpara, ai mund t\u00eb largohet p\u00ebr shkak t\u00eb disa proceseve t\u00eb prapasken\u00ebs. K\u00ebshtu, ndoshta kishte nj\u00eb avokum automatik, ai shkroi t\u00eb dh\u00ebnat dhe i ruajti ato n\u00eb ditarin e transaksioneve. Dhe ne mund t\u2019i injorojm\u00eb k\u00ebto t\u00eb dh\u00ebna dhe t'i humbasim pa asnj\u00eb problem. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Sfidhet e Patroni ose Si t\u00eb prishni klusterin tuaj PostgreSQL. Alexey Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/a86e8971ab4ef41b89af9cf0bdf519ba.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>K\u00ebshtu duket logu n\u00eb rastin kur \u00ebsht\u00eb vendosur maximum_lag_on_failover dhe ka ndodhur nj\u00eb failover, duke qen\u00eb se duhet t\u00eb zgjidhet nj\u00eb master i ri. Republika e vler\u00ebson veten si t\u00eb paaft\u00eb p\u00ebr t\u00eb marr\u00eb pjes\u00eb n\u00eb zgjedhje. Dhe ajo refuzon t\u00eb marr\u00eb pjes\u00eb n\u00eb gar\u00ebn p\u00ebr liderin. Ajo pret deri sa t\u00eb zgjidhet nj\u00eb master i ri p\u00ebr t'u lidhur m\u00eb pas me t\u00eb. Kjo \u00ebsht\u00eb nj\u00eb mas\u00eb shtes\u00eb p\u00ebr t\u00eb shmangur humbjen e t\u00eb dh\u00ebnave.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Sfidhet e Patroni ose Si t\u00eb prishni klusterin tuaj PostgreSQL. Alexey Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/f760788e5951facdd08b2069037830fa.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Sfidhet e Patroni ose Si t\u00eb prishni klusterin tuaj PostgreSQL. Alexey Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/c32f26e7526e1873f3bfd7d3693fcc72.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>K\u00ebtu ekipi yn\u00eb produktiv ka shkruar se produkti i tyre ka probleme kur punon me Postgres. Nd\u00ebrkoh\u00eb, nuk mund t\u00eb qasemi n\u00eb masterin p\u00ebr shkak se ai nuk \u00ebsht\u00eb i aksesuesh\u00ebm p\u00ebrmes SSH. Dhe auto-failover gjithashtu nuk ndodhi. <\/p>\n<p><\/p>\n<p>Ky host u d\u00ebrgua me forc\u00eb p\u00ebr t\u00eb rifilluar. P\u00ebr shkak t\u00eb rifillimit ndodhi nj\u00eb auto-failover, ndon\u00ebse mund t\u00eb kishte ndodhur nj\u00eb auto-failover manual, ashtu si\u00e7 e kuptoj tani. Dhe pas rifillimit, ne shkuam t\u00eb shihnim se \u00e7far\u00eb ndodhi me masterin aktual. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Sfidhet e Patroni ose Si t\u00eb prishni klusterin tuaj PostgreSQL. Alexey Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/95efb82e0647a396a21683cd53a69547.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Gjat\u00eb k\u00ebsaj kohe, ne e dinim paraprakisht se kishim probleme me disk\u00ebt, pra ne kishim tashm\u00eb informacion nga monitorimi p\u00ebr ku duhet t\u00eb k\u00ebrkonim dhe \u00e7far\u00eb duhet t\u00eb gjenim. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Sfidhet e Patroni ose Si t\u00eb prishni klusterin tuaj PostgreSQL. Alexey Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/367aaab607d833d96a573ddbbbced502.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ne kontrolluam logun e postgres-it dhe filluam t\u00eb shihnim se \u00e7far\u00eb po ndodhte. Pash\u00eb komitetet q\u00eb zgjatnin nj\u00eb, dy, tre sekonda, gj\u00eb q\u00eb nuk \u00ebsht\u00eb normale. Pash\u00eb se avokumi automatik fillonte shum\u00eb ngadal\u00eb dhe n\u00eb nj\u00eb m\u00ebnyr\u00eb t\u00eb \u00e7uditshme. Dhe pash\u00eb skedar\u00eb p\u00ebrkoh\u00ebsor\u00eb n\u00eb disk. Pra, k\u00ebto jan\u00eb t\u00eb gjitha tregues t\u00eb problemeve me disk\u00ebt. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Sfidhet e Patroni ose Si t\u00eb prishni klusterin tuaj PostgreSQL. Alexey Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/7e0cfce7a81901ef9ef736c3fefc8dce.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ne ne shkuam n\u00eb sistemin dmesg (n\u00eb logun e mesazheve t\u00eb b\u00ebrtham\u00ebs). Dhe pam\u00eb se kishim probleme me nj\u00eb nga disqet. Sistemi i disqeve p\u00ebrb\u00ebnte nj\u00eb RAID softuer\u00ebsh. Shikuam \/proc\/mdstat dhe pan\u00eb se na mungonte nj\u00eb disk. Dometh\u00ebn\u00eb, k\u00ebtu ishte nj\u00eb RAID me 8 disqe, dhe na mungonte nj\u00eb. N\u00ebse e shikoni me kujdes slajdin, n\u00eb dalje mund t\u00eb shihni se sde mungon. N\u00eb m\u00ebnyr\u00eb figurative, na ka r\u00ebn\u00eb nj\u00eb disk. Kjo shkaktoi Probleme me disqet, dhe aplikacionet gjithashtu pat\u00ebn probleme n\u00eb pun\u00ebn me klasterin Postgres.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Sfidhet e Patroni ose Si t\u00eb prishni klusterin tuaj PostgreSQL. Alexey Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/4b09b3aa761cb504fa79173ef280faac.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Dhe n\u00eb k\u00ebt\u00eb rast, Patroni nuk do t\u00eb na ndihmonte, sepse Patroni nuk ka detyr\u00ebn t\u00eb monitoroj\u00eb gjendjen e serverit, gjendjen e disqeve. Dhe ne duhet t\u00eb monitorojm\u00eb k\u00ebto situata me monitorim t\u00eb jasht\u00ebm. Ne e shtuam monitorimin e disqeve n\u00eb monitorimin e jasht\u00ebm me shpejt\u00ebsi. <\/p>\n<p><\/p>\n<p>Dhe ishte nj\u00eb mendim \u2013 a do t\u00eb na ndihmonte fencing, ose ndonj\u00eb watchdog softuer\u00ebsh? Ne mendojm\u00eb se nuk do t\u00eb na ndihmonte n\u00eb k\u00ebt\u00eb rast, sepse gjat\u00eb problemeve Patroni vazhdoi t\u00eb bashk\u00ebpunonte me klasterin DCS dhe nuk pa asnj\u00eb problem. Dometh\u00ebn\u00eb, nga pik\u00ebpamja e DCS dhe Patroni me klasterin gjith\u00e7ka ishte mir\u00eb, ndon\u00ebse n\u00eb fakt kishte probleme me diskun, kishte probleme me disponueshm\u00ebrin\u00eb e baz\u00ebs. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Sfidhet e Patroni ose Si t\u00eb prishni klusterin tuaj PostgreSQL. Alexey Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/15fdac78535355d4eb889efcc27efc46.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Mendoj se kjo \u00ebsht\u00eb nj\u00eb nga problemet m\u00eb t\u00eb \u00e7uditshme q\u00eb kam shqyrtuar p\u00ebr nj\u00eb koh\u00eb t\u00eb gjat\u00eb, kam lexuar shum\u00eb loge, kam shqyrtuar dhe e quajta klaster-simuluese. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Sfidhet e Patroni ose Si t\u00eb prishni klusterin tuaj PostgreSQL. Alexey Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/b5259774931c290eda6673deb14b6c48.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Problemi ishte q\u00eb master i vjet\u00ebr nuk mund t\u00eb b\u00ebhej nj\u00eb replika normale, pra, Patroni e nisi at\u00eb, Patroni tregoi se ky nyje ishte prezent si replika, por n\u00eb t\u00eb nj\u00ebjt\u00ebn koh\u00eb ai nuk ishte nj\u00eb replika normale. Tani do t\u00eb shihni pse. Kjo m\u00eb ka mbetur nga analiza e atij problemi. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Sfidhet e Patroni ose Si t\u00eb prishni klusterin tuaj PostgreSQL. Alexey Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/c35a5d102a46764bbf96e5a75ee88171.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u00c7far\u00eb filloi gjith\u00e7ka? Filloi, si n\u00eb problemin e m\u00ebparsh\u00ebm, me ngadal\u00ebsim t\u00eb disqeve. Kishim komitete nj\u00eb her\u00eb n\u00eb sekond\u00eb, ndonj\u00ebher\u00eb dy. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Sfidhet e Patroni ose Si t\u00eb prishni klusterin tuaj PostgreSQL. Alexey Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/435c1b350a89f288e0e10ca9d5a2ec6e.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ishin nd\u00ebrprerje lidhjesh, dometh\u00ebn\u00eb, klient\u00ebt po nd\u00ebrpresin. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Sfidhet e Patroni ose Si t\u00eb prishni klusterin tuaj PostgreSQL. Alexey Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/920cb1f3f3b40578e15e6ff711e85c50.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ishin bllokime t\u00eb ndryshme r\u00ebnd\u00ebsie. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Sfidhet e Patroni ose Si t\u00eb prishni klusterin tuaj PostgreSQL. Alexey Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/285d6292d89b928a85e95602ee57d38a.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Dhe, p\u00ebr rrjedhoj\u00eb, sistemi i disqeve nuk ishte shum\u00eb i p\u00ebrgjegjsh\u00ebm. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Sfidhet e Patroni ose Si t\u00eb prishni klusterin tuaj PostgreSQL. Alexey Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/ebe71d49360e7f604ecd6a3c8276cb73.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Dhe m\u00eb misterioza p\u00ebr mua \u2013 \u00ebsht\u00eb k\u00ebrkesa e menj\u00ebhershme p\u00ebr ndalim. Postgres ka tre m\u00ebnyra ndalimi:<\/p>\n<p><\/p>\n<ul>\n<li>Kjo \u00ebsht\u00eb graceful, kur presim q\u00eb t\u00eb gjith\u00eb klient\u00ebt t\u00eb \u00e7aktivizohen vet\u00eb. <\/li>\n<li>Ka fast, kur i detyrojm\u00eb klient\u00ebt t\u00eb \u00e7aktivizohen, sepse po shkojm\u00eb p\u00ebr ndalim. <\/li>\n<li>Kjo \u00ebsht\u00eb immediate. N\u00eb k\u00ebt\u00eb rast, immediate nuk i informon as klient\u00ebt se duhet t\u00eb \u00e7aktivizohen, thjesht lidhen pa paralajm\u00ebrim. T\u00eb gjith\u00eb klient\u00ebt tashm\u00eb marrin nj\u00eb mesazh RST nga sistemi operativ (mesazh TCP q\u00eb lidhja \u00ebsht\u00eb nd\u00ebrprer\u00eb dhe klientit nuk ka m\u00eb asgj\u00eb p\u00ebr t\u00eb kapur). <\/li>\n<\/ul>\n<p><\/p>\n<p>Kush d\u00ebrgoi k\u00ebt\u00eb sinjal? Proceset n\u00eb sfond t\u00eb Postgres-it nuk d\u00ebrgojn\u00eb nj\u00ebri-tjetrit t\u00eb till\u00eb sinjale, dmth. \u00ebsht\u00eb kill-9. Ata nuk d\u00ebrgojn\u00eb k\u00ebshtu nj\u00ebri-tjetrit, ata vet\u00ebm reagojn\u00eb ndaj k\u00ebsaj, dmth. \u00ebsht\u00eb nj\u00eb ri-start urgjent i Postgres. Kush e d\u00ebrgoi at\u00eb, nuk e di. <\/p>\n<p><\/p>\n<p>Pash\u00eb me komand\u00ebn \u201clast\u201d dhe pash\u00eb nj\u00eb person tjet\u00ebr, i cili gjithashtu u lidh me k\u00ebt\u00eb server bashk\u00eb me ne, por u turp\u00ebrova t\u00eb b\u00ebja pyetje. Ndoshta ishte kill -9. Do ta shihja n\u00eb log-et kill -9, pasi Postgres shkruan se mori kill -9, por nuk e pash\u00eb k\u00ebt\u00eb n\u00eb log-e. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Sfidhet e Patroni ose Si t\u00eb prishni klusterin tuaj PostgreSQL. Alexey Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/fe8e844649cea3384ebfde86e36eba44.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Duke e hetuar m\u00eb tej, pash\u00eb se Patroni nuk kishte shkruar n\u00eb log p\u00ebr nj\u00eb koh\u00eb t\u00eb gjat\u00eb \u2013 54 sekonda. Dhe n\u00ebse krahasoj dy timestamp, k\u00ebtu ishin af\u00ebrsisht 54 sekonda pa mesazhe. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Sfidhet e Patroni ose Si t\u00eb prishni klusterin tuaj PostgreSQL. Alexey Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/ffb1c4db3d7de591d77d56ed2fcc4f2a.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Dhe gjat\u00eb k\u00ebsaj kohe ndodhi auto-failover. Patroni p\u00ebrs\u00ebri punoi jasht\u00ebzakonisht mir\u00eb. Mjeshtri yn\u00eb i vjet\u00ebr nuk ishte n\u00eb dispozicion, di\u00e7ka po ndodhte me t\u00eb. Dhe filluan zgjedhjet p\u00ebr nj\u00eb master t\u00eb ri. K\u00ebtu \u00e7do gj\u00eb funksionoi mir\u00eb. Ne pgsql01 u b\u00eb lideri i ri. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Sfidhet e Patroni ose Si t\u00eb prishni klusterin tuaj PostgreSQL. Alexey Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/6b2457653e9f77af44cd64b4aff021a0.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kemi nj\u00eb replik\u00eb q\u00eb u b\u00eb master. Dhe ka nj\u00eb replik\u00eb t\u00eb dyt\u00eb. Dhe me replik\u00ebn e dyt\u00eb pik\u00ebrisht pati probleme. Ajo p\u00ebrpiqej t\u00eb ri-konfigurohej. Si\u00e7 kuptoj, ajo p\u00ebrpiqej t\u00eb ndryshonte recovery.conf, t\u00eb ri-startonte Postgres dhe t\u00eb lidhej me masterin e ri. Ajo shkruan mesazhe \u00e7do 10 sekonda se po p\u00ebrpiqet, por nuk ia del. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Sfidhet e Patroni ose Si t\u00eb prishni klusterin tuaj PostgreSQL. Alexey Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/381818f189e19c3e1154074b4652f837.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Dhe gjat\u00eb k\u00ebtyre p\u00ebrpjekjeve, nj\u00eb sinjal immediate-shutdown arrin te masteri i vjet\u00ebr. Masteri ri-startohet. Po ashtu, rikuperimi ndalohet, sepse masteri i vjet\u00ebr po b\u00ebhet ri-start. Dmth. replikja nuk mund t\u00eb lidhet me t\u00eb, sepse ai \u00ebsht\u00eb n\u00eb modalitetin e fikjes. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Sfidhet e Patroni ose Si t\u00eb prishni klusterin tuaj PostgreSQL. Alexey Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/d8a8cde925fa8fe601d44ab908ae69dc.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>N\u00eb nj\u00eb moment, ajo funksionoi, por replikimi nuk u nd\u00ebrlidh. <\/p>\n<p><\/p>\n<p>Kam nj\u00eb hipotez\u00eb t\u00eb vetme, q\u00eb n\u00eb recovery.conf ishte adresa e masterit t\u00eb vjet\u00ebr. Dhe kur u shfaq masteri i ri, replikja e dyt\u00eb vazhdonte t\u00eb p\u00ebrpiqej t\u00eb lidhej me masterin e vjet\u00ebr. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Sfidhet e Patroni ose Si t\u00eb prishni klusterin tuaj PostgreSQL. Alexey Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/425ea3af1f1e186f4760e1fb1f5419fa.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kur Patroni u aktivizua n\u00eb replik\u00ebn e dyt\u00eb, n\u00ebnk\u00ebrkesa u aktivizua, por nuk mundi t\u00eb lidhej p\u00ebrmes replikimit. Dhe u krijua nj\u00eb vones\u00eb replikimi, e cila dukej k\u00ebshtu. Dmth. t\u00eb tre n\u00ebnk\u00ebrkesat ishin t\u00eb pranishme, por n\u00ebnk\u00ebrkesa e dyt\u00eb kishte vones\u00eb. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Sfidhet e Patroni ose Si t\u00eb prishni klusterin tuaj PostgreSQL. Alexey Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/f564eacd9944666c9a3f5bea634ede6b.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>N\u00eb t\u00eb nj\u00ebjt\u00ebn koh\u00eb, n\u00ebse shikoni loget q\u00eb ishin shkruar, mund t\u00eb shihni se replicimi nuk mund t\u00eb fillonte, sepse regjistrat e transaksionit jan\u00eb t\u00eb ndrysh\u00ebm. Dhe ato regjistra transaksionesh, q\u00eb ofron masteri, t\u00eb cilat p\u00ebrshkruhen n\u00eb recovery.conf, thjesht nuk i p\u00ebrshtaten nyj\u00ebs son\u00eb aktuale. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Sfidhet e Patroni ose Si t\u00eb prishni klusterin tuaj PostgreSQL. Alexey Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/6b09947d157c9ef0a190da2df2cb5892.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Dhe k\u00ebtu e b\u00ebra nj\u00eb gabim. Duhet t\u00eb kisha shkuar t\u00eb shihja se \u00e7far\u00eb kishte n\u00eb recovery.conf, p\u00ebr t\u00eb verifikuar hipotez\u00ebn time se ne po lidhej me masterin e gabuar. Por at\u00ebher\u00eb sapo po merja vesh k\u00ebt\u00eb dhe nuk m\u00eb erdhi n\u00eb mendje, ose pash\u00eb q\u00eb replicimi po vonohej dhe do t\u00eb duhej t\u00eb riinstalohej, dmth e punova disi me dor\u00eb t\u00eb lir\u00eb. Ky ishte gabimi im. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Sfidhet e Patroni ose Si t\u00eb prishni klusterin tuaj PostgreSQL. Alexey Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/159f2256fd81428fd0d82a255528887d.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Pas 30 minutash erdhi admini, dmth un\u00eb e ripara Patroni n\u00eb replik\u00eb. E kisha hequr dor\u00eb prej saj, mendoja se duhet t\u00eb riinstalohej. Dhe mendova \u2013 do ta riparoj Patroni, ndoshta do ndodhi di\u00e7ka e mir\u00eb. U aktivizua rikuperimi. Dhe baza u hap, ishte gati p\u00ebr t\u00eb pranuar lidhje. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Sfidhet e Patroni ose Si t\u00eb prishni klusterin tuaj PostgreSQL. Alexey Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/aeac98750386c8389d39e006a229cc85.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Replicimi filloi. Por pas nj\u00eb minute u ndal me nj\u00eb gabim, se nuk i p\u00ebrshtateshin regjistrat e transaksioneve. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Sfidhet e Patroni ose Si t\u00eb prishni klusterin tuaj PostgreSQL. Alexey Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/17eaba000a79c80c29d1bc3902de05e6.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Mendoja se do ta riparoj s\u00ebrish. E ripara p\u00ebrs\u00ebri Patroni, dhe nuk e ripara Postgres, por e ripara pik\u00ebrisht Patroni n\u00eb shpres\u00ebn se do ta aktivizonte baz\u00ebn si me magji. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Sfidhet e Patroni ose Si t\u00eb prishni klusterin tuaj PostgreSQL. Alexey Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/a85b38e033c45ad73da317f41e0ef24a.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Replicimi u aktivizua s\u00ebrish, por shenjat n\u00eb regjistrat e transaksioneve ishin t\u00eb ndryshme, nuk ishin ato q\u00eb ishin n\u00eb p\u00ebrpjekjen e kaluar p\u00ebr aktivizimin. Replicimi u ndal s\u00ebrish. Dhe mesazhi ishte pak ndryshe. Dhe nuk ishte shum\u00eb informues p\u00ebr mua. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Sfidhet e Patroni ose Si t\u00eb prishni klusterin tuaj PostgreSQL. Alexey Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/fd90d708230bd54af685786c7e361ee1.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Dhe k\u00ebtu m\u00eb vjen n\u00eb mendje \u2013 \u00e7far\u00eb, n\u00ebse e riparoj Postgres, n\u00eb at\u00eb koh\u00eb n\u00eb masterin aktual b\u00ebj nj\u00eb checkpoint, p\u00ebr t\u00eb avancuar pik\u00ebn n\u00eb regjistrin e transaksioneve pak p\u00ebrpara, p\u00ebr t\u00eb filluar rikuperimin nga nj\u00eb moment tjet\u00ebr? Plus atje kishim disa rezerv\u00eb WAL. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Sfidhet e Patroni ose Si t\u00eb prishni klusterin tuaj PostgreSQL. Alexey Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/19e67f95d1a74141a013947c9aa39e38.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>E ripara Patroni, b\u00ebra disa checkpoints n\u00eb master, disa pik\u00eb restart n\u00eb replik\u00eb, kur ajo u hap. Dhe kjo ndihmoi. Mendova gjat\u00eb se pse kjo ndihmoi dhe si funksionoi. Dhe replikimi filloi. Dhe replikimi nuk u ndal m\u00eb. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Sfidhet e Patroni ose Si t\u00eb prishni klusterin tuaj PostgreSQL. Alexey Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/418ca59a681be84f51ed374a73a759c9.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kjo problem p\u00ebr mua \u00ebsht\u00eb nj\u00eb nga m\u00eb misteret, mbi t\u00eb cilin ende po mendoj, \u00e7far\u00eb po ndodhte n\u00eb t\u00eb v\u00ebrtet\u00eb. <\/p>\n<p><\/p>\n<p>Cilat jan\u00eb p\u00ebrfundimet k\u00ebtu? Patroni mund t\u00eb funksionoj\u00eb si\u00e7 \u00ebsht\u00eb menduar dhe pa asnj\u00eb gabim. Por megjithat\u00eb \u2013 kjo nuk \u00ebsht\u00eb 100% garanci q\u00eb gjith\u00e7ka \u00ebsht\u00eb n\u00eb rregull. Nj\u00eb replik\u00eb mund t\u00eb nis\u00eb, por mund t\u00eb jet\u00eb n\u00eb nj\u00eb gjendje gjysm\u00eb-funksionuese, dhe aplikacioni nuk mund t\u00eb punoj\u00eb me nj\u00eb replik\u00eb t\u00eb till\u00eb, sepse do t\u00eb ket\u00eb t\u00eb dh\u00ebna t\u00eb vjetra. <\/p>\n<p><\/p>\n<p>Dhe pas \u00e7do skenar t\u00eb skadarit, gjithmon\u00eb duhet t\u00eb verifikojm\u00eb se gjith\u00e7ka \u00ebsht\u00eb n\u00eb rregull me klastri, dmth. ka numrin e nevojsh\u00ebm t\u00eb replikave, nuk ka vones\u00eb n\u00eb replikim.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Sfidhet e Patroni ose Si t\u00eb prishni klusterin tuaj PostgreSQL. Alexey Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/aca7047ff33d3efe14071b798b554091.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Dhe gjat\u00eb shqyrtimit t\u00eb k\u00ebtyre problemeve do t\u00eb formuloj rekomandime. Kam tentuar t\u00eb bashkoj ato n\u00eb dy slide. Ndoshta, t\u00eb gjitha historit\u00eb mund t\u00eb ishin bashkuar n\u00eb dy slide dhe vet\u00ebm ato t\u00eb tregonim.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Sfidhet e Patroni ose Si t\u00eb prishni klusterin tuaj PostgreSQL. Alexey Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/d4ad31b26d83c8846fe4097a11d70849.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kur p\u00ebrdorni Patroni, ju duhet patjet\u00ebr t\u00eb keni monitorim. Ju gjithmon\u00eb duhet t\u00eb dini kur ka ndodhur autofilimi, sepse n\u00ebse nuk e dini q\u00eb keni pasur autofilim, nuk e kontrolloni klastrin. Dhe kjo \u00ebsht\u00eb e keqe.<\/p>\n<p><\/p>\n<p>Pas \u00e7do autofilimi, gjithmon\u00eb duhet t\u00eb kontrollojm\u00eb manualisht klastrin. Duhet t\u00eb sigurohemi q\u00eb gjithmon\u00eb kemi numrin e sakt\u00eb t\u00eb replikave, nuk ka vones\u00eb n\u00eb replikim, dhe n\u00eb log nuk ka gabime q\u00eb lidhen me replikimin e transmetimit, me Patroni, me sistemin DCS.<\/p>\n<p><\/p>\n<p>Automatizimi mund t\u00eb funksionoj\u00eb me sukses, Patroni \u00ebsht\u00eb nj\u00eb mjet shum\u00eb i mir\u00eb. Ai mund t\u00eb funksionoj\u00eb, por kjo nuk do ta \u00e7oj\u00eb klastrin n\u00eb gjendjen e nevojshme. Dhe n\u00ebse ne nuk e zbulojm\u00eb k\u00ebt\u00eb, do t\u00eb kemi probleme.<\/p>\n<p><\/p>\n<p>Dhe Patroni nuk \u00ebsht\u00eb nj\u00eb plumb argjendi. Ne akoma duhet t\u00eb kemi nj\u00eb ide se si funksionon Postgres, si funksionon replikimi dhe se si Patroni bashk\u00ebpunon me Postgres, dhe si sigurohet nd\u00ebrveprimi midis nyjeve. Kjo \u00ebsht\u00eb e nevojshme p\u00ebr t\u00eb ditur si t\u00eb zgjidhim manualisht problemet q\u00eb dalin.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Sfidhet e Patroni ose Si t\u00eb prishni klusterin tuaj PostgreSQL. Alexey Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/ea4162df3561d2ea7001f2ef6788eaaa.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Si qas\u00ebm \u00e7\u00ebshtjes s\u00eb diagnostikimit? Ka ndodhur q\u00eb ne punojm\u00eb me klient\u00eb t\u00eb ndrysh\u00ebm dhe asnj\u00eb nuk ka nj\u00eb stek ELK, dhe duhet t\u00eb merremi me logjet duke hapur 6 konsola dhe 2 tab. N\u00eb nj\u00eb tab \u2013 jan\u00eb logjet e Patroni p\u00ebr \u00e7do nyje, n\u00eb tab tjet\u00ebr \u2013 jan\u00eb logjet e Consul ose Postgres kur \u00ebsht\u00eb e nevojshme. Diagnostikimi i k\u00ebsaj \u00ebsht\u00eb shum\u00eb i v\u00ebshtir\u00eb. <\/p>\n<p><\/p>\n<p>Cilat jan\u00eb qasjet q\u00eb kam zhvilluar? S\u00eb pari, gjithmon\u00eb shikoj kur ka ardhur autofilimi. Dhe p\u00ebr mua, kjo \u00ebsht\u00eb nj\u00eb ndarje e r\u00ebnd\u00ebsishme. Shikoj se \u00e7far\u00eb ka ndodhur para autofilimit, gjat\u00eb autofilimit dhe pas autofilimit. Autofilimi ka dy sh\u00ebnime: koha e fillimit dhe e p\u00ebrfundimit. <\/p>\n<p><\/p>\n<p>Pastaj un\u00eb shikoj ngjarjet n\u00eb logje p\u00ebrpara se t\u00eb ndodh\u00eb failoveri, pra k\u00ebrkoj arsyet se p\u00ebrse ndodhi failoveri. <\/p>\n<p><\/p>\n<p>Dhe kjo e jep nj\u00eb pasqyr\u00eb t\u00eb asaj q\u00eb ndodhi dhe \u00e7far\u00eb mund t\u00eb b\u00ebhet n\u00eb t\u00eb ardhmen p\u00ebr t\u00eb shmangur q\u00ebndrim t\u00eb till\u00eb (dhe si pasoj\u00eb t\u00eb mos ndodh\u00eb failoveri).<\/p>\n<p><\/p>\n<p>Dhe ku shikojm\u00eb zakonisht? Un\u00eb shikoj:<\/p>\n<p><\/p>\n<ul>\n<li>S\u00eb pari n\u00eb logjet e Patroni. <\/li>\n<li>M\u00eb pas shikoj logjet e Postgres, ose logjet e DCS n\u00eb var\u00ebsi t\u00eb asaj q\u00eb \u00ebsht\u00eb gjetur n\u00eb logjet e Patroni. <\/li>\n<li>Dhe ndonj\u00ebher\u00eb logjet e sistemit gjithashtu ofrojn\u00eb informacion mbi arsyen q\u00eb \u00e7oi n\u00eb failover. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Sfidhet e Patroni ose Si t\u00eb prishni klusterin tuaj PostgreSQL. Alexey Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/a53618e366020e1a550d852fc308c188.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Si e shoh Patroni? E shoh shum\u00eb mir\u00eb. N\u00eb mendimin tim, \u00ebsht\u00eb m\u00eb e mira q\u00eb ekziston sot. Un\u00eb njoh shum\u00eb produkte t\u00eb tjera. K\u00ebto jan\u00eb Stolon, Repmgr, Pg_auto_failover, PAF. 4 mjete. I kam provuar t\u00eb gjith\u00eb. Patroni m\u00eb p\u00eblqeu m\u00eb shum\u00eb. <\/p>\n<p><\/p>\n<p>N\u00ebse dikush m\u00eb pyet: \"A e rekomandoj Patroni?\". Un\u00eb do t\u00eb them po, sepse Patroni m\u00eb p\u00eblqen. Dhe, m\u00eb duket, kam m\u00ebsuar ta p\u00ebrgatis at\u00eb. <\/p>\n<p><\/p>\n<p>N\u00ebse ju intereson t\u00eb shihni \u00e7far\u00eb lloj problemesh ka me Patroni, p\u00ebrve\u00e7 problemeve q\u00eb kam p\u00ebrmendur, gjithmon\u00eb mund t\u00eb shkoni n\u00eb faqen <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/zalando\/patroni\/issues\/\">issues<\/a><\/noindex> n\u00eb GitHub. Aty jan\u00eb shum\u00eb histori t\u00eb ndryshme dhe diskutohen shum\u00eb probleme interesante. Dhe n\u00eb fund disa bbug do t\u00eb regjistrohen dhe do t\u00eb zgjidhen, pra \u00ebsht\u00eb nj\u00eb lexim interesant. <\/p>\n<p><\/p>\n<p>Aty ka histori t\u00eb interesant se si njer\u00ebzit godasin vet\u00ebn n\u00eb k\u00ebmb\u00eb. Shum\u00eb edukative. Lexon dhe kupton q\u00eb nuk duhet ta b\u00ebsh at\u00eb. E kam sh\u00ebnuar k\u00ebt\u00eb. <\/p>\n<p><\/p>\n<p>Dhe do t\u00eb doja t\u00eb falenderoj shum\u00eb kompanin\u00eb Zalando p\u00ebr zhvillimin e k\u00ebtij projekti, konkretisht Aleksand\u00ebr Kuku\u0161kinin dhe Aleksej Kljukin. Aleksej Kljukin \u00ebsht\u00eb nj\u00eb nga bashk\u00ebautor\u00ebt, ai tashm\u00eb nuk punon n\u00eb Zalando, por k\u00ebta jan\u00eb dy njer\u00ebz q\u00eb filluan t\u00eb punojn\u00eb me k\u00ebt\u00eb produkt. <\/p>\n<p><\/p>\n<p>Dhe un\u00eb mendoj se Patroni \u00ebsht\u00eb nj\u00eb gj\u00eb shum\u00eb e shk\u00eblqyer. Jam i k\u00ebnaqur q\u00eb ekziston, \u00ebsht\u00eb interesante me t\u00eb. Dhe falenderoj t\u00eb gjith\u00eb kontribuesit q\u00eb shkruajn\u00eb patch-\u00ebt n\u00eb Patroni. Shpresoj q\u00eb Patroni me kalimin e koh\u00ebs t\u00eb b\u00ebhet m\u00eb i pjekur, m\u00eb t\u00ebrheq\u00ebs dhe m\u00eb funksional. Ai tashm\u00eb \u00ebsht\u00eb funksional, por shpresoj q\u00eb t\u00eb b\u00ebhet akoma m\u00eb i mir\u00eb. Prandaj, n\u00ebse planifikoni ta p\u00ebrdorni Patroni, mos kini frik\u00eb. \u00cbsht\u00eb nj\u00eb zgjidhje e mir\u00eb, mund t\u00eb implementohet dhe p\u00ebrdoret. <\/p>\n<p><\/p>\n<p>K\u00ebtu \u00ebsht\u00eb gjith\u00e7ka. N\u00ebse keni pyetje, pyetni.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Sfidhet e Patroni ose Si t\u00eb prishni klusterin tuaj PostgreSQL. Alexey Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/85c2fef2455999b48413c9fc3b235ed6.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Pyetje<\/p>\n<p><\/p>\n<p><em>Faleminderit p\u00ebr paraqitjen! N\u00ebse pas nj\u00eb failover-i \u00ebsht\u00eb e nevojshme t\u00eb shikoni atje me v\u00ebmendje, p\u00ebrse na nevojitet nj\u00eb failover automatik?<\/em> <\/p>\n<p><\/p>\n<p>Sepse kjo \u00ebsht\u00eb nj\u00eb gj\u00eb e re. Ne kemi punuar me t\u00eb vet\u00ebm p\u00ebr nj\u00eb vit. M\u00eb mir\u00eb t\u00eb jemi t\u00eb sigurt. Duam t\u00eb hyjm\u00eb dhe t\u00eb shohim n\u00ebse gjith\u00e7ka ka funksionuar si\u00e7 duhet. Kjo \u00ebsht\u00eb nj\u00eb shkall\u00eb e mosbesimit t\u00eb rritur - m\u00eb mir\u00eb ta kontrollojm\u00eb dhe t\u00eb shohim. <\/p>\n<p><\/p>\n<p><em>P\u00ebr shembull, m\u00ebngjesin hyjm\u00eb dhe shohim, apo jo?<\/em><\/p>\n<p><\/p>\n<p>Jo m\u00ebngjesin, ne zakonisht b\u00ebjm\u00eb t\u00eb ditur p\u00ebr auto-fileover-in pothuajse menj\u00ebher\u00eb. Ne marrim njoftime, shohim q\u00eb ka ndodhur auto-fileover. Ne hyjm\u00eb dhe shohim pothuajse menj\u00ebher\u00eb. Por t\u00eb gjitha k\u00ebto kontrolle duhet t\u00eb jen\u00eb n\u00eb nivelin e monitorimit. N\u00ebse kontaktojm\u00eb Patroni p\u00ebrmes REST API, ka histori. P\u00ebrmes historis\u00eb mund t\u00eb shohim shenjat kohore kur ka ndodhur fileover-i. N\u00eb baz\u00eb t\u00eb k\u00ebsaj mund t\u00eb b\u00ebjm\u00eb monitorimin. Mund t\u00eb shohim historin\u00eb, sa ngjarje ka pasur. N\u00ebse na jan\u00eb shtuar ngjarje, do t\u00eb thot\u00eb se ka ndodhur auto-fileover. Mund t\u00eb kontrollojm\u00eb dhe t\u00eb shohim. Ose automatikisht n\u00eb monitorim kemi kontrolluar q\u00eb t\u00eb gjitha replikat jan\u00eb n\u00eb vend, nuk ka vonesa dhe gjith\u00e7ka \u00ebsht\u00eb n\u00eb rregull. <\/p>\n<p><\/p>\n<p><em>Faleminderit!<\/em><\/p>\n<p><\/p>\n<p><em>Faleminderit shum\u00eb p\u00ebr tregimin e shk\u00eblqyer! N\u00ebse ne e kemi zhvendosur klasterin DCS larg klasterit Postgres, a duhet ta mbajm\u00eb k\u00ebt\u00eb klaster gjithashtu periodikisht? Cilat jan\u00eb praktikat m\u00eb t\u00eb mira n\u00eb lidhje me ndihm\u00ebn e disa pjes\u00ebve t\u00eb klasterit DCS, q\u00eb duhet t\u00eb fikim, \u00e7far\u00eb duhet t\u00eb b\u00ebjm\u00eb, etj.? Si jeton e gjith\u00eb kjo p\u00ebrb\u00ebrje n\u00eb t\u00eb nj\u00ebjt\u00ebn koh\u00eb? Dhe si t'i realizojm\u00eb k\u00ebto gj\u00ebra?<\/em><\/p>\n<p><\/p>\n<p>P\u00ebr nj\u00eb kompani, ishte e nevojshme t\u00eb b\u00ebhej nj\u00eb matric\u00eb problemesh, \u00e7far\u00eb ndodh n\u00ebse ndonj\u00eb nga komponent\u00ebt ose disa komponent\u00eb d\u00ebshtojn\u00eb. Sipas k\u00ebsaj matrice, ne p\u00ebrshkojm\u00eb rregullisht t\u00eb gjith\u00eb komponent\u00ebt dhe nd\u00ebrtuam skenar\u00ebt n\u00eb rast t\u00eb d\u00ebshtimit t\u00eb k\u00ebtyre komponent\u00ebve. K\u00ebshtu p\u00ebr \u00e7do skenar d\u00ebshtimi mund t\u00eb ket\u00eb nj\u00eb plan veprimi p\u00ebr rikuperim. Dhe n\u00eb rastin e DCS, kjo \u00ebsht\u00eb si nj\u00eb pjes\u00eb e infrastruktur\u00ebs standarde. Dhe admini e administron k\u00ebt\u00eb, dhe ne tashm\u00eb mb\u00ebshtetemi tek admin\u00ebt q\u00eb e administrin at\u00eb dhe aft\u00ebsit\u00eb e tij p\u00ebr ta riparuar k\u00ebt\u00eb n\u00eb rast t\u00eb nj\u00eb aksidenti. N\u00ebse DCS nuk ekziston, at\u00ebher\u00eb ne e vendosim at\u00eb, por n\u00eb t\u00eb nj\u00ebjt\u00ebn koh\u00eb nuk e ndjekim shum\u00eb, sepse nuk jemi p\u00ebrgjegj\u00ebs p\u00ebr infrastruktur\u00ebn, por ofrojm\u00eb rekomandime se si dhe \u00e7far\u00eb t\u00eb monitorohet. <\/p>\n<p><\/p>\n<p><em>Pra, a e kuptova sakt\u00eb q\u00eb duhet t\u00eb fikim Patroni, t\u00eb fikim fileover-in, t\u00eb fikim gjith\u00e7ka p\u00ebrpara se t\u00eb b\u00ebjm\u00eb di\u00e7ka me hostet?<\/em><\/p>\n<p><\/p>\n<p>Kjo varet nga numri i nyjeve q\u00eb kemi n\u00eb klasterin DCS. N\u00ebse ka shum\u00eb nyje dhe ne \u00e7aktivizojm\u00eb vet\u00ebm nj\u00eb nyje (replik\u00eb), at\u00ebher\u00eb klasteri ruan kuorumin. Dhe Patroni mbetet funksional. Dhe asgj\u00eb nuk aktivizohet. N\u00ebse kemi ndonj\u00eb operacion t\u00eb komplikuar q\u00eb p\u00ebrfshin m\u00eb shum\u00eb nyje, mungesa e t\u00eb cilave mund t\u00eb prish\u00eb kuorumin, at\u00ebher\u00eb \u2013 po, ndoshta ka kuptim ta vendosim Patronin n\u00eb pauz\u00eb. Ai ka komand\u00ebn p\u00ebrkat\u00ebse \u2013 patronictl pause, patronictl resume. Ne thjesht e vendosim n\u00eb pauz\u00eb, dhe autofailover nuk aktivizohet p\u00ebr k\u00ebt\u00eb koh\u00eb. Ne b\u00ebjm\u00eb mir\u00ebmbajtjen n\u00eb klasterin DCS, pastaj e heqim pauz\u00ebn dhe vazhdojm\u00eb jet\u00ebn.<\/p>\n<p><\/p>\n<p><em>Faleminderit shum\u00eb!<\/em><\/p>\n<p><\/p>\n<p><em>Faleminderit shum\u00eb p\u00ebr paraqitjen! Si e sheh ekipi i produktit humbjen e t\u00eb dh\u00ebnave?<\/em> <\/p>\n<p><\/p>\n<p>Ekipet e produkteve nuk e ndiejn\u00eb, por lider\u00ebt e ekipeve jan\u00eb t\u00eb shqet\u00ebsuar. <\/p>\n<p><\/p>\n<p><em>\u00c7far\u00eb garancish ka aty?<\/em><\/p>\n<p><\/p>\n<p>Me garancit\u00eb \u00ebsht\u00eb shum\u00eb e v\u00ebshtir\u00eb. Ka nj\u00eb paraqitje nga Alexander Kukushkin \"Si t\u00eb llogarisim RPO dhe RTO\", dmth. koha e rikuperimit dhe sa t\u00eb dh\u00ebna mund t\u00eb humbasim. Mendoj se duhet t\u00eb gjejm\u00eb k\u00ebto slajde dhe t'i studiojm\u00eb. Sa m\u00eb kujtohet, atje ka hapa konkret\u00eb p\u00ebr llogaritjen e k\u00ebtyre gj\u00ebrave. Sa transaksione mund t\u00eb humbasim, sa t\u00eb dh\u00ebna mund t\u00eb humbasim. Si nj\u00eb opsion mund t\u00eb p\u00ebrdorim replikimin sinkron n\u00eb nivelin e Patroni, por kjo \u00ebsht\u00eb nj\u00eb gjithnj\u00eb e dyshimt\u00eb: ose kemi besueshm\u00ebri t\u00eb dh\u00ebnash, ose humbasim n\u00eb shpejt\u00ebsi. Ka replikim sinkron, por ai gjithashtu nuk garanton mbrojtje 100% nga humbja e t\u00eb dh\u00ebnave.<\/p>\n<p><\/p>\n<p><em>Alexei, faleminderit p\u00ebr paraqitjen e shk\u00eblqyer! A keni p\u00ebrvoj\u00eb n\u00eb p\u00ebrdorimin e Patroni p\u00ebr mbrojtjen e nivelit zero? Dometh\u00ebn\u00eb, n\u00eb bashk\u00ebpunim me q\u00ebndrim sinkron? Ky \u00ebsht\u00eb pyetje e par\u00eb. Dhe pyetja e dyt\u00eb. Keni p\u00ebrdorur zgjidhje t\u00eb ndryshme. Ne kemi p\u00ebrdorur Repmgr, por pa autofailover dhe tani po planifikojm\u00eb t\u00eb lidhim autofailover. Dhe po shqyrtojm\u00eb Patronin si nj\u00eb zgjidhje alternative. \u00c7far\u00eb mund t\u00eb thoni si avantazhe krahasuar me Repmgr?<\/em><\/p>\n<p><\/p>\n<p>Pyetja e par\u00eb ishte p\u00ebr replikat sinkrone. Askush nga ne nuk e p\u00ebrdor replikimin sinkron, sepse t\u00eb gjith\u00ebve u frik\u00ebsohen (Tani disa klient\u00eb e p\u00ebrdorin, nuk kan\u00eb v\u00ebrejtur probleme me performanc\u00ebn \u2014 <em>Sh\u00ebnim nga referuesi<\/em>). Por ne p\u00ebr ne kemi zhvilluar nj\u00eb rregull, q\u00eb n\u00eb klasterin e replikimit t\u00eb sinkronizuar t\u00eb ket\u00eb t\u00eb pakt\u00ebn tre nyje, sepse, n\u00ebse kemi dy nyje dhe n\u00ebse masteri ose replikimi d\u00ebshtojn\u00eb, at\u00ebher\u00eb Patroni e kalon k\u00ebt\u00eb nyje n\u00eb modin Standalone, q\u00eb aplikacioni t\u00eb vazhdoj\u00eb t\u00eb punoj\u00eb. N\u00eb k\u00ebt\u00eb rast ka rreziqe p\u00ebr humbjen e t\u00eb dh\u00ebnave.<\/p>\n<p><\/p>\n<p>Sa i p\u00ebrket pyetjes s\u00eb dyt\u00eb, ne kemi p\u00ebrdorur Repmgr dhe akoma e p\u00ebrdorim tek disa klient\u00eb p\u00ebr arsye historike. \u00c7far\u00eb mund t\u00eb thuhet? N\u00eb Patroni auto-failover vjen direkt n\u00eb kuti, kurse n\u00eb Repmgr auto-failover \u00ebsht\u00eb nj\u00eb ve\u00e7ori shtes\u00eb, q\u00eb duhet aktivizuar. Duhet t\u00eb nisim daemon-in e Repmgr n\u00eb \u00e7do nyje dhe at\u00ebher\u00eb mund t\u00eb konfigurojm\u00eb auto-failover. <\/p>\n<p><\/p>\n<p>Repmgr kontrollon \u2013 a jan\u00eb t\u00eb gjalla nyjet Postgres. Proceset e Repmgr kontrollojn\u00eb ekzistenc\u00ebn e nj\u00ebri-tjetrit, kjo nuk \u00ebsht\u00eb nj\u00eb qasje shum\u00eb efektive pasi mund t\u00eb ket\u00eb raste t\u00eb komplikuara t\u00eb izolimit rrjetor, n\u00eb t\u00eb cilat nj\u00eb kluster i madh Repmgr mund t\u00eb shp\u00ebrb\u00ebhet n\u00eb disa t\u00eb vogla dhe t\u00eb vazhdoj\u00eb pun\u00ebn. Nuk kam ndjekur Repmgr p\u00ebr nj\u00eb koh\u00eb t\u00eb gjat\u00eb, ndoshta e kan\u00eb zgjidhur k\u00ebt\u00eb... apo ndoshta jo. Nd\u00ebrsa, nxjerrja e informacionit mbi gjendjen e klustrit n\u00eb DCS, si\u00e7 b\u00ebn Stolon dhe Patroni, \u00ebsht\u00eb nj\u00eb variant m\u00eb i q\u00ebndruesh\u00ebm. <\/p>\n<p><\/p>\n<p><em>Aleksej, kam nj\u00eb pyetje, ndoshta e thjesht\u00eb. Ju n\u00eb nj\u00eb nga shembujt e par\u00eb DCS e transferuat nga makina lokale n\u00eb nj\u00eb nyje t\u00eb larg\u00ebt. E kuptojm\u00eb q\u00eb rrjeti \u2013 \u00ebsht\u00eb nj\u00eb gj\u00eb q\u00eb ka karakteristikat e tij, ai vet\u00eb jeton. \u00c7far\u00eb do t\u00eb ndodh\u00eb, n\u00ebse p\u00ebr ndonj\u00eb arsye klusteri DCS b\u00ebhet i padisponuesh\u00ebm? Nuk do t\u00eb flas p\u00ebr arsyet, mund t\u00eb jen\u00eb shum\u00eb: nga duar t\u00eb gabuara t\u00eb rrjetar\u00ebve deri n\u00eb probleme reale.<\/em> <\/p>\n<p><\/p>\n<p>Nuk e kam th\u00ebn\u00eb k\u00ebt\u00eb me z\u00eb t\u00eb lart\u00eb, por klusteri DCS gjithashtu duhet t\u00eb jet\u00eb i q\u00ebndruesh\u00ebm ndaj d\u00ebshtimeve, dmth. nj\u00eb num\u00ebr t\u00eb \u00e7uditsh\u00ebm nyjesh, q\u00eb t\u00eb mund t\u00eb mblidhet kuorumi. \u00c7far\u00eb ndodh, n\u00ebse klusteri DCS b\u00ebhet i padisponuesh\u00ebm, ose nuk mund t\u00eb mblidhet kuorumi, dmth. ndonj\u00eb ndarje rrjetore ose d\u00ebshtimi i nyjeve? N\u00eb k\u00ebt\u00eb rast, klusteri Patroni kalon n\u00eb modin read-only. Klusteri Patroni nuk mund t\u00eb p\u00ebrcaktoj\u00eb gjendjen e klustrit dhe \u00e7far\u00eb t\u00eb b\u00ebj\u00eb. Ai nuk mund t\u00eb lidhet me DCS-n\u00eb dhe ruaj\u00eb aty gjendjen e re t\u00eb klustrit, prandaj t\u00eb gjith\u00eb klustri kalon n\u00eb read-only. Dhe pret ose nd\u00ebrhyrjen manuale nga operatori ose kur DCS-n\u00eb t\u00eb rikuperohet.<\/p>\n<p><\/p>\n<p><em>Th\u00ebn\u00eb n\u00eb m\u00ebnyr\u00eb t\u00eb thjesht\u00eb, DCS p\u00ebr ne b\u00ebhet nj\u00eb sh\u00ebrbim po aq i r\u00ebnd\u00ebsish\u00ebm sa vet\u00eb baza?<\/em><\/p>\n<p><\/p>\n<p>Po, po. N\u00eb shum\u00eb kompani moderne, Sh\u00ebrbimi i Zbulimit \u00ebsht\u00eb nj\u00eb pjes\u00eb e pandashme e infrastruktur\u00ebs. Ai implementohet madje p\u00ebrpara se t\u00eb ket\u00eb ndonj\u00eb baz\u00eb t\u00eb dh\u00ebnash n\u00eb infrastruktur\u00eb. T\u00eb themi, kemi nisur infrastruktur\u00ebn, kemi ngritur n\u00eb qendr\u00ebn e t\u00eb dh\u00ebnave, dhe menj\u00ebher\u00eb kemi Sh\u00ebrbimin e Zbulimit. N\u00ebse \u00ebsht\u00eb Consul, mund t\u00eb nd\u00ebrtohet edhe DNS mbi t\u00eb. N\u00ebse \u00ebsht\u00eb Etcd, mund t\u00eb jet\u00eb pjes\u00eb e nj\u00eb klasteri Kubernetes, ku do t\u00eb zhvillohet gjith\u00e7ka tjet\u00ebr. M\u00eb duket se Sh\u00ebrbimi i Zbulimit \u00ebsht\u00eb tashm\u00eb nj\u00eb pjes\u00eb e pandashme e infrastrukturave moderne. Dhe p\u00ebr t\u00eb mendojn\u00eb shum\u00eb m\u00eb p\u00ebrpara sesa p\u00ebr bazat e t\u00eb dh\u00ebnave. <\/p>\n<p><\/p>\n<p><em>Faleminderit!<\/em><\/p>\n<p>Burimi: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/512768\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0446\u0435\u043b\u044c Patroni \u2014 \u044d\u0442\u043e \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u0435 High Availability \u0434\u043b\u044f PostgreSQL. \u041d\u043e Patroni \u2014 \u044d\u0442\u043e \u043b\u0438\u0448\u044c template, \u0430 \u043d\u0435 \u0433\u043e\u0442\u043e\u0432\u044b\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 (\u0447\u0442\u043e, \u0432 \u043e\u0431\u0449\u0435\u043c, \u0438 \u0441\u043a\u0430\u0437\u0430\u043d\u043e \u0432 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438). \u041d\u0430 \u043f\u0435\u0440\u0432\u044b\u0439 \u0432\u0437\u0433\u043b\u044f\u0434, \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0432 Patroni \u0432 \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u0439 \u043b\u0430\u0431\u0435, \u043c\u043e\u0436\u043d\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c, \u043a\u0430\u043a\u043e\u0439 \u044d\u0442\u043e \u043f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u044b\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0438 \u043a\u0430\u043a \u043e\u043d \u043b\u0435\u0433\u043a\u043e \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u043d\u0430\u0448\u0438 \u043f\u043e\u043f\u044b\u0442\u043a\u0438 \u0440\u0430\u0437\u0432\u0430\u043b\u0438\u0442\u044c \u043a\u043b\u0430\u0441\u0442\u0435\u0440. \u041e\u0434\u043d\u0430\u043a\u043e \u043d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435 \u0432 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":90104,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-90103","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=\"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\/patroni-failure-stories-or-how-to-crash-your-postgresql-cluster-aleksej-lesovskij\" \/>\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\udd47Patroni Failure Stories or How to crash your PostgreSQL cluster. \u0410\u043b\u0435\u043a\u0441\u0435\u0439 \u041b\u0435\u0441\u043e\u0432\u0441\u043a\u0438\u0439 | ProHoster\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/patroni-failure-stories-or-how-to-crash-your-postgresql-cluster-aleksej-lesovskij\" \/>\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-07-29T11:42:32+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-07-29T11:42:32+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\udd47Historia e D\u00ebshtimeve t\u00eb Patronit ose Si t\u00eb rr\u00ebzojm\u00eb klasterin tuaj PostgreSQL. Aleksey Lesovskiy | ProHoster","description":"","canonical_url":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/patroni-failure-stories-or-how-to-crash-your-postgresql-cluster-aleksej-lesovskij","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\udd47Patroni Failure Stories or How to crash your PostgreSQL cluster. \u0410\u043b\u0435\u043a\u0441\u0435\u0439 \u041b\u0435\u0441\u043e\u0432\u0441\u043a\u0438\u0439 | ProHoster","og:url":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/patroni-failure-stories-or-how-to-crash-your-postgresql-cluster-aleksej-lesovskij","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-07-29T11:42:32+00:00","article:modified_time":"2020-07-29T11:42:32+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"90103","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:58:48","updated":"2026-02-09 16:50:35","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\/90103","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=90103"}],"version-history":[{"count":1,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts\/90103\/revisions"}],"predecessor-version":[{"id":158759,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts\/90103\/revisions\/158759"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/media\/90104"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/media?parent=90103"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/categories?post=90103"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/tags?post=90103"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}