{"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\/hu\/blog\/administrirovanie\/patroni-failure-stories-or-how-to-crash-your-postgresql-cluster-aleksej-lesovskij","title":{"rendered":"Patroni Hiba T\u00f6rt\u00e9netek vagy Hogyan \u00fcsse le PostgreSQL klaszter\u00e9t. Alexei Leszovszkij","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Patroni Hiba T\u00f6rt\u00e9netek vagy Hogyan \u00fcsse le PostgreSQL klaszter\u00e9t. Alexei Leszovszkij\" src=\"\/wp-content\/uploads\/2020\/07\/6404cba13214f499d1f347cca0aacbe7.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>A Patroni f\u0151 c\u00e9lja a PostgreSQL magas rendelkez\u00e9sre \u00e1ll\u00e1s\u00e1nak biztos\u00edt\u00e1sa. De a Patroni csup\u00e1n egy sablon, nem k\u00e9sz eszk\u00f6z (ahogy azt a dokument\u00e1ci\u00f3 is mondja). Els\u0151 pillant\u00e1sra, ha a Patronit egy tesztlaborban be\u00e1ll\u00edtjuk, l\u00e1thatjuk, hogy ez egy remek eszk\u00f6z, \u00e9s mennyire k\u00f6nnyed\u00e9n kezeli a klaszter\u00fcnk felboml\u00e1s\u00e1ra tett k\u00eds\u00e9rleteinket. Azonban a gyakorlatban, a termel\u00e9si k\u00f6rnyezetben, nem mindig minden olyan sz\u00e9p \u00e9s eleg\u00e1ns, mint a tesztlaborban.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p><img decoding=\"async\" alt=\"Patroni Hiba T\u00f6rt\u00e9netek vagy Hogyan \u00fcsse le PostgreSQL klaszter\u00e9t. Alexei Leszovszkij\" src=\"\/wp-content\/uploads\/2020\/07\/ff445e6d76a2ad46a232b705e104446f.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Mes\u00e9lek egy kicsit magamr\u00f3l. Rendszergazdak\u00e9nt kezdtem. Dolgoztam webfejleszt\u00e9sben. 2014 \u00f3ta a Data Egret-n\u00e9l dolgozom. A c\u00e9g a Postgres ter\u00fclet\u00e9n ny\u00fajt tan\u00e1csad\u00e1st. Kiz\u00e1r\u00f3lag Postgresszel foglalkozunk, \u00e9s minden nap dolgozunk Postgresszel, \u00edgy k\u00fcl\u00f6nf\u00e9le tapasztalataink vannak az \u00fczemeltet\u00e9ssel kapcsolatban. <\/p>\n<p><\/p>\n<p>2018 v\u00e9g\u00e9n lassan elkezdt\u00fck haszn\u00e1lni a Patronit. \u00c9s felhalmoz\u00f3dott egy bizonyos tapasztalat. Valahogy diagnosztiz\u00e1ltuk, finomhangoltuk, form\u00e1ltuk a legjobb gyakorlati eredm\u00e9nyeinket. Err\u0151l a besz\u00e1mol\u00f3ban fogok besz\u00e9lni.<\/p>\n<p><\/p>\n<p>A Postgres mellett szeretem a Linuxot. Szeretek benne turk\u00e1lni \u00e9s felfedezni, szeretek kernelt \u00e9p\u00edteni. \u00c9rdekel a virtualiz\u00e1ci\u00f3, a kont\u00e9nerek, a Docker, a Kubernetes. Mindez \u00e9rdekel, mert a r\u00e9gi adminisztr\u00e1tori szok\u00e1sok hat\u00e1ssal vannak r\u00e1m. Szeretek foglalkozni a monitoroz\u00e1ssal. \u00c9s szeretem a Postgresszel kapcsolatos adminisztrat\u00edv feladatokat, mint p\u00e9ld\u00e1ul a replik\u00e1ci\u00f3 \u00e9s a biztons\u00e1gi m\u00e1solat k\u00e9sz\u00edt\u00e9se. Szabadid\u0151mben Go nyelven \u00edrok. Nem vagyok szoftverfejleszt\u0151, csak saj\u00e1t magamnak \u00edrok Go-ban. Ez \u00f6r\u00f6met okoz sz\u00e1momra. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni Hiba T\u00f6rt\u00e9netek vagy Hogyan \u00fcsse le PostgreSQL klaszter\u00e9t. Alexei Leszovszkij\" src=\"\/wp-content\/uploads\/2020\/07\/02cfd9293af5a8410c91e39afe2c75e6.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<ul>\n<li>Azt hiszem, sokan tudj\u00e1tok, hogy a Postgresben nincsenek alap\u00e9rtelmezett magas rendelkez\u00e9sre \u00e1ll\u00e1s\u00fa (HA) megold\u00e1sok. A magas rendelkez\u00e9sre \u00e1ll\u00e1shoz valamit telep\u00edteni, be\u00e1ll\u00edtani, er\u0151fesz\u00edt\u00e9seket kell tenni. <\/li>\n<li>Sz\u00e1mos eszk\u00f6z l\u00e9tezik, \u00e9s a Patroni ezek egyike, amely meglehet\u0151sen j\u00f3l megoldja a magas rendelkez\u00e9sre \u00e1ll\u00e1s k\u00e9rd\u00e9s\u00e9t. De ha mindezt egy tesztlaborban telep\u00edtj\u00fck \u00e9s elind\u00edtjuk, l\u00e1thatjuk, hogy minden m\u0171k\u00f6dik, reproduk\u00e1lhatunk probl\u00e9m\u00e1kat, \u00e9s megn\u00e9zhetj\u00fck, hogyan kezeli ezeket a Patroni. \u00c9s l\u00e1tni fogjuk, hogy mindez remek\u00fcl m\u0171k\u00f6dik. <\/li>\n<li>De a gyakorlatban k\u00fcl\u00f6nb\u00f6z\u0151 probl\u00e9m\u00e1kkal szembes\u00fclt\u00fcnk. Ezekr\u0151l a probl\u00e9m\u00e1kr\u00f3l fogok besz\u00e9lni.<\/li>\n<li>Elmondom, hogyan diagnosztiz\u00e1ltuk ezeket, mit \u00e1ll\u00edtottunk be \u2013 seg\u00edtett-e nek\u00fcnk ez vagy sem. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni Hiba T\u00f6rt\u00e9netek vagy Hogyan \u00fcsse le PostgreSQL klaszter\u00e9t. Alexei Leszovszkij\" src=\"\/wp-content\/uploads\/2020\/07\/7126b45b40dd08521e80a3c150382bec.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<ul>\n<li>Nem fogom elmondani, hogyan kell telep\u00edteni a Patronit, mert ezt k\u00f6nnyen lehet guglizni az interneten, lehet n\u00e9zni a konfigur\u00e1ci\u00f3s f\u00e1jlokat, hogy meg\u00e9rts\u00fck, hogyan indul el, hogyan \u00e1ll\u00edthat\u00f3 be. Ki lehet ismerni a s\u00e9m\u00e1kat, architekt\u00far\u00e1kat, inform\u00e1ci\u00f3t tal\u00e1lva r\u00f3luk az interneten. <\/li>\n<li>Nem fogok m\u00e1sok tapasztalatair\u00f3l besz\u00e9lni. Csak azokr\u00f3l a probl\u00e9m\u00e1kr\u00f3l fogok besz\u00e9lni, amelyekkel kifejezetten mi szembes\u00fclt\u00fcnk. <\/li>\n<li>\u00c9s nem fogok a Patronin \u00e9s a PostgreSQL-en k\u00edv\u00fcli probl\u00e9m\u00e1kr\u00f3l besz\u00e9lni. Ha p\u00e9ld\u00e1ul olyan probl\u00e9m\u00e1k mer\u00fclnek fel, amelyek a terhel\u00e9seloszt\u00e1ssal kapcsolatosak, amikor a klaszter\u00fcnk sz\u00e9tesett, err\u0151l nem fogok besz\u00e9lni. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni Hiba T\u00f6rt\u00e9netek vagy Hogyan \u00fcsse le PostgreSQL klaszter\u00e9t. Alexei Leszovszkij\" src=\"\/wp-content\/uploads\/2020\/07\/3f8d179e7c78ce83e8842ef5c72fe30d.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u00c9s egy kis nyilatkozat azel\u0151tt, hogy elkezden\u00e9m az el\u0151ad\u00e1sunkat. <\/p>\n<p><\/p>\n<p>Mindezek a probl\u00e9m\u00e1k, amelyekkel szembes\u00fclt\u00fcnk, az els\u0151 6-7-8 h\u00f3napban jelentkeztek a haszn\u00e1lat sor\u00e1n. Id\u0151vel eljutottunk a bels\u0151 legjobb gyakorlati megold\u00e1sainkhoz, \u00e9s a probl\u00e9m\u00e1ink elt\u0171ntek. \u00cdgy az el\u0151ad\u00e1s f\u00e9l \u00e9vvel ezel\u0151tt ker\u00fclt bejelent\u00e9sre, amikor m\u00e9g frissek voltak az eml\u00e9kek \u00e9s j\u00f3l eml\u00e9keztem mindenre. <\/p>\n<p><\/p>\n<p>Az el\u0151ad\u00e1s el\u0151k\u00e9sz\u00edt\u00e9se sor\u00e1n m\u00e1r n\u00e9ztem r\u00e9gi posztmortemeket, megvizsg\u00e1ltam a napl\u00f3kat. \u00c9s el\u0151fordulhat, hogy egyes r\u00e9szletek elfelejt\u0151dtek, vagy bizonyos inform\u00e1ci\u00f3s r\u00e9szletek nem lettek teljesen felt\u00e1rva a probl\u00e9m\u00e1k elemz\u00e9se sor\u00e1n, ez\u00e9rt egyes pontokban \u00fagy t\u0171nhet, hogy a probl\u00e9m\u00e1k nem teljesen lettek \u00e1tbesz\u00e9lve, vagy hi\u00e1nyos az inform\u00e1ci\u00f3. Ez\u00e9rt eln\u00e9z\u00e9st k\u00e9rek emiatt. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni Hiba T\u00f6rt\u00e9netek vagy Hogyan \u00fcsse le PostgreSQL klaszter\u00e9t. Alexei Leszovszkij\" src=\"\/wp-content\/uploads\/2020\/07\/30d414284a41fcbc3bf417c9da28ca52.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Mi az a Patroni?<\/p>\n<p><\/p>\n<ul>\n<li>Ez egy sablon a HA kialak\u00edt\u00e1s\u00e1hoz. \u00cdgy van megfogalmazva a dokument\u00e1ci\u00f3ban. \u00c9s a v\u00e9lem\u00e9nyem szerint ez egy nagyon helyes pontos\u00edt\u00e1s. A Patroni nem egy ez\u00fcst l\u00f6ved\u00e9k, amely megoldja az \u00f6sszes probl\u00e9m\u00e1j\u00e1t, teh\u00e1t er\u0151fesz\u00edt\u00e9seket kell tenni, hogy elkezdjen m\u0171k\u00f6dni \u00e9s hasznot hozzon. <\/li>\n<li>Ez egy \u00fcgyn\u00f6ki szolg\u00e1ltat\u00e1s, amelyet minden adatb\u00e1zissal rendelkez\u0151 szolg\u00e1ltat\u00e1sra telep\u00edtenek, \u00e9s amely egyfajta init-rendszer a PostgreSQL-j\u00e9hez. Ind\u00edtja a PostgreSQL-t, le\u00e1ll\u00edtja, \u00fajraind\u00edtja, m\u00f3dos\u00edtja a konfigur\u00e1ci\u00f3t \u00e9s megv\u00e1ltoztatja a klaszter topol\u00f3gi\u00e1j\u00e1t. <\/li>\n<li>Ez\u00e9rt a klaszter \u00e1llapot\u00e1nak, aktu\u00e1lis megjelen\u00edt\u00e9s\u00e9nek t\u00e1rol\u00e1s\u00e1hoz sz\u00fcks\u00e9g van egy t\u00e1rol\u00f3ra. \u00c9s ebb\u0151l a szempontb\u00f3l a Patroni a k\u00fcls\u0151 rendszerben t\u00f6rt\u00e9n\u0151 \u00e1llapotmeg\u0151rz\u00e9s fel\u00e9 indult el. Ez egy konfigur\u00e1ci\u00f3s t\u00e1rol\u00f3 rendszer. Ez lehet Etcd, Consul, ZooKeeper, vagy ak\u00e1r a Kubernetes Etcd-je, teh\u00e1t ezek k\u00f6z\u00fcl valamelyik lehet\u0151s\u00e9g. <\/li>\n<li>A Patroni egyik jellemz\u0151je, hogy az automatikus failover azonnal rendelkez\u00e9sre \u00e1ll, miut\u00e1n megfelel\u0151en konfigur\u00e1ltuk. Ha \u00f6sszehasonl\u00edtjuk a Repmgr-t, ott a failover funkci\u00f3 benne van a csomagban. A Repmgr-rel \u00e1tv\u00e1lt\u00e1st kapunk, de ha automatikus failover-t szeretn\u00e9nk, azt k\u00fcl\u00f6n kell be\u00e1ll\u00edtanunk. A Patroni m\u00e1r eleve tartalmaz automatikus failover-t.<\/li>\n<li>\u00c9s sok m\u00e1s dolog is van. P\u00e9ld\u00e1ul a konfigur\u00e1ci\u00f3k karbantart\u00e1sa, \u00faj replik\u00e1k be\u00e1ll\u00edt\u00e1sa, biztons\u00e1gi ment\u00e9s stb. De ez m\u00e1r nem a t\u00e9ma r\u00e9sze, err\u0151l nem fogok besz\u00e9lni. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni Hiba T\u00f6rt\u00e9netek vagy Hogyan \u00fcsse le PostgreSQL klaszter\u00e9t. Alexei Leszovszkij\" src=\"\/wp-content\/uploads\/2020\/07\/fed0f1ce931df99ca76ae1116f8098cc.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u00d6sszefoglalva, a Patroni f\u0151 feladata, hogy j\u00f3l \u00e9s megb\u00edzhat\u00f3an v\u00e9gezze el az automatikus failover-t, hogy a klaszter\u00fcnk m\u0171k\u00f6d\u0151k\u00e9pes maradjon, \u00e9s az alkalmaz\u00e1s ne \u00e9rz\u00e9kelje a klaszter topol\u00f3giai v\u00e1ltoz\u00e1sait. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni Hiba T\u00f6rt\u00e9netek vagy Hogyan \u00fcsse le PostgreSQL klaszter\u00e9t. Alexei Leszovszkij\" src=\"\/wp-content\/uploads\/2020\/07\/fac52620957efa47ced330e7cc8084e0.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>De amikor elkezdj\u00fck haszn\u00e1lni a Patroni-t, a rendszer\u00fcnk kiss\u00e9 bonyolultabb\u00e1 v\u00e1lik. M\u00edg kor\u00e1bban csak a Postgres-szel dolgoztunk, a Patroni haszn\u00e1lat\u00e1val megkapjuk mag\u00e1t a Patroni-t, \u00e9s egy DCS-t, amely t\u00e1rolja az \u00e1llapotot. Mindezeknek valahogy m\u0171k\u00f6dni\u00fck kell. Teh\u00e1t mi rosszul m\u0171k\u00f6dhet?<\/p>\n<p><\/p>\n<p>A k\u00f6vetkez\u0151k hib\u00e1sodhatnak meg:<\/p>\n<p><\/p>\n<ul>\n<li>A Postgres meghib\u00e1sodhat. Ez lehet a mester vagy a replika, b\u00e1rmelyik\u00fck cserbenhagyhat. <\/li>\n<li>Maga a Patroni is meghib\u00e1sodhat. <\/li>\n<li>A DCS, ahol az \u00e1llapotot t\u00e1roljuk, is meghib\u00e1sodhat.<\/li>\n<li>\u00c9s a h\u00e1l\u00f3zat is meghib\u00e1sodhat. <\/li>\n<\/ul>\n<p><\/p>\n<p>Ezeket a szempontokat fogom r\u00e9szletezni az el\u0151ad\u00e1somban. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni Hiba T\u00f6rt\u00e9netek vagy Hogyan \u00fcsse le PostgreSQL klaszter\u00e9t. Alexei Leszovszkij\" src=\"\/wp-content\/uploads\/2020\/07\/1aeaf46d37bf1935b514b0581e0dbd0b.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Az eseteket a bonyolults\u00e1guk szerint fogom t\u00e1rgyalni, nemcsak abb\u00f3l a szempontb\u00f3l, hogy mennyi \u00f6sszetev\u0151t \u00e9rintenek, hanem abb\u00f3l a szempontb\u00f3l is, hogy szem\u00e9ly szerint \u00e9n mennyire \u00e9reztem neh\u00e9znek az egyes eseteket, \u00e9s \u00e9ppen ellenkez\u0151leg, volt-e olyan eset, ami k\u00f6nny\u0171 volt \u00e9s k\u00f6nnyen elemezhet\u0151. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni Hiba T\u00f6rt\u00e9netek vagy Hogyan \u00fcsse le PostgreSQL klaszter\u00e9t. Alexei Leszovszkij\" src=\"\/wp-content\/uploads\/2020\/07\/65b0c98bf2284610e955ced5eb998f39.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Az els\u0151 eset a legegyszer\u0171bb. Ez az a helyzet, amikor egy adatb\u00e1zis klasztert vett\u00fcnk, \u00e9s ugyanazon a klaszteren telep\u00edtett\u00fck a DCS t\u00e1rol\u00f3nkat. Ez a leggyakoribb hiba. Ez az architekt\u00far\u00e1k \u00e9p\u00edt\u00e9s\u00e9nek hib\u00e1ja, vagyis k\u00fcl\u00f6nb\u00f6z\u0151 \u00f6sszetev\u0151k \u00f6sszekapcsol\u00e1sa egy helyen. <\/p>\n<p><\/p>\n<p>Teh\u00e1t, ha t\u00f6rt\u00e9nt egy failover, n\u00e9zz\u00fck meg, mi t\u00f6rt\u00e9nt. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni Hiba T\u00f6rt\u00e9netek vagy Hogyan \u00fcsse le PostgreSQL klaszter\u00e9t. Alexei Leszovszkij\" src=\"\/wp-content\/uploads\/2020\/07\/244b69d623fe2205c2d9ed2aa4620067.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Itt az \u00e9rdekel minket, mikor t\u00f6rt\u00e9nt a failover. Vagyis azt a pillanatot figyelj\u00fck, amikor az \u00e1llapotv\u00e1ltoz\u00e1s zajlott. <\/p>\n<p><\/p>\n<p>De a failover nem mindig egy pillanat alatt t\u00f6rt\u00e9nik, vagyis nem tart egy egys\u00e9gnyi id\u0151t, elh\u00faz\u00f3dhat. Hossz\u00fa ideig eltarthat.<\/p>\n<p><\/p>\n<p>Ez\u00e9rt van kezd\u00e9si \u00e9s befejez\u00e9si id\u0151pontja, teh\u00e1t ez egy hossz\u00fa t\u00e1v\u00fa esem\u00e9ny. Az esem\u00e9nyeket h\u00e1rom id\u0151szakra osztjuk: van id\u0151nk a failover el\u0151tt, a failover alatt \u00e9s a failover ut\u00e1n. Vagyis minden esem\u00e9nyt ezen az id\u0151vonalon vizsg\u00e1lunk. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni Hiba T\u00f6rt\u00e9netek vagy Hogyan \u00fcsse le PostgreSQL klaszter\u00e9t. Alexei Leszovszkij\" src=\"\/wp-content\/uploads\/2020\/07\/a0ed61afe55d1a157147e0d80b17e5d1.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Az els\u0151 l\u00e9p\u00e9s, amikor bek\u00f6vetkezik a failover, az, hogy megkeress\u00fck az okot, mi t\u00f6rt\u00e9nt, ami a failoverhez vezetett. <\/p>\n<p><\/p>\n<p>Ha megn\u00e9zz\u00fck a napl\u00f3kat, akkor tipikus Patroni napl\u00f3kat l\u00e1tunk. Ezekben \u00e9rtes\u00edt minket, hogy a szerver mesterr\u00e9 v\u00e1lt, \u00e9s a mester szerepe \u00e1tker\u00fclt erre a csom\u00f3ra. Ez ki van emelve. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni Hiba T\u00f6rt\u00e9netek vagy Hogyan \u00fcsse le PostgreSQL klaszter\u00e9t. Alexei Leszovszkij\" src=\"\/wp-content\/uploads\/2020\/07\/9998c69f7d0d4358b277f4e0e7b4350f.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Tov\u00e1bb\u00e1 meg kell \u00e9rten\u00fcnk, mi\u00e9rt t\u00f6rt\u00e9nt a failover, vagyis milyen esem\u00e9nyek zajlottak, amelyek miatt a mester szerepe \u00e1tker\u00fclt az egyik csom\u00f3r\u00f3l a m\u00e1sikra. \u00c9s ebben az esetben minden egyszer\u0171. Van egy kommunik\u00e1ci\u00f3s hiba a t\u00e1rol\u00f3rendszerrel. A mester r\u00e1j\u00f6tt, hogy nem tud egy\u00fcttm\u0171k\u00f6dni a DCS-sel, teh\u00e1t valamilyen probl\u00e9ma mer\u00fclt fel a kommunik\u00e1ci\u00f3val. Azt mondja, hogy nem lehet t\u00f6bb\u00e9 mester, \u00e9s lemond a hatalm\u00e1r\u00f3l. Ez a \"demoted self\" sor pontosan err\u0151l sz\u00f3l. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni Hiba T\u00f6rt\u00e9netek vagy Hogyan \u00fcsse le PostgreSQL klaszter\u00e9t. Alexei Leszovszkij\" src=\"\/wp-content\/uploads\/2020\/07\/4a8eca27689546b4b0fc3c666a3c37c4.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ha megn\u00e9zz\u00fck a failover el\u0151tti esem\u00e9nyeket, l\u00e1thatjuk azokat az okokat, amelyek probl\u00e9m\u00e1t okoztak a mester tov\u00e1bbi m\u0171k\u00f6d\u00e9s\u00e9ben. <\/p>\n<p><\/p>\n<p>Ha megn\u00e9zz\u00fck a Patroni napl\u00f3kat, rengeteg k\u00fcl\u00f6nf\u00e9le hib\u00e1t, id\u0151t\u00fall\u00e9p\u00e9st \u00e9szlel\u00fcnk, vagyis a Patroni \u00fcgyn\u00f6k nem tud egy\u00fcttm\u0171k\u00f6dni a DCS-sel. Ebben az esetben ez a Consul \u00fcgyn\u00f6k, amellyel a 8500-as porton kommunik\u00e1lunk. <\/p>\n<p><\/p>\n<p>A probl\u00e9ma itt az, hogy a Patroni \u00e9s az adatb\u00e1zis ugyanazon a hoszton fut. Ezen a csom\u00f3n Consul kiszolg\u00e1l\u00f3k is futottak. A szerveren l\u00e9v\u0151 terhel\u00e9s l\u00e9trehoz\u00e1s\u00e1val probl\u00e9m\u00e1kat okoztunk a <a class=\"wpil_keyword_link\" href=\"https:\/\/prohoster.info\/hu\/server\/\"   title=\"szerverek\" data-wpil-keyword-link=\"linked\"  data-wpil-monitor-id=\"1515\">szerverek<\/a> Consulnak. Nem tudtak norm\u00e1lisan kommunik\u00e1lni. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni Hiba T\u00f6rt\u00e9netek vagy Hogyan \u00fcsse le PostgreSQL klaszter\u00e9t. Alexei Leszovszkij\" src=\"\/wp-content\/uploads\/2020\/07\/0d8dba6641809560e6b32825d481e30b.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Egy id\u0151 ut\u00e1n, amikor a terhel\u00e9s cs\u00f6kkent, a Patroni \u00fajra tudott kommunik\u00e1lni az \u00fcgyn\u00f6k\u00f6kkel. A norm\u00e1lis m\u0171k\u00f6d\u00e9s helyre\u00e1llt. Ugyanaz a Pgdb-2 szerver ism\u00e9t mester lett. Vagyis volt egy kis \u00e1tl\u00e9p\u00e9s, ami miatt a csom\u00f3 lemondott a mester jogk\u00f6r\u00e9r\u0151l, majd visszavette azt, teh\u00e1t minden \u00fagy t\u00e9rt vissza, ahogyan volt. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni Hiba T\u00f6rt\u00e9netek vagy Hogyan \u00fcsse le PostgreSQL klaszter\u00e9t. Alexei Leszovszkij\" src=\"\/wp-content\/uploads\/2020\/07\/131b93e0bd83099e1b99b53742419e13.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ez \u00e9rtelmezhet\u0151 hamis riaszt\u00e1sk\u00e9nt, vagy \u00fagy is fel lehet fogni, hogy a Patroni mindent helyesen tett. Vagyis r\u00e1j\u00f6tt, hogy nem tudja fenntartani a klaszter \u00e1llapot\u00e1t, \u00e9s lemondott a hatalm\u00e1r\u00f3l.<\/p>\n<p><\/p>\n<p>\u00c9s itt a probl\u00e9ma abb\u00f3l fakad, hogy a Consul szerverek azon a hardveren tal\u00e1lhat\u00f3k, amin az adatb\u00e1zisok is futnak. Ennek k\u00f6vetkezt\u00e9ben b\u00e1rmilyen terhel\u00e9s: legyen az a lemezekre vagy a processzorokra vonatkoz\u00f3 terhel\u00e9s, szint\u00e9n hat\u00e1ssal van a Consul klaszterre val\u00f3 interakci\u00f3ra.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni Hiba T\u00f6rt\u00e9netek vagy Hogyan \u00fcsse le PostgreSQL klaszter\u00e9t. Alexei Leszovszkij\" src=\"\/wp-content\/uploads\/2020\/07\/142c7cf839c8da078451f7ba9d5499e5.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u00dagy d\u00f6nt\u00f6tt\u00fcnk, hogy ez nem \u00e9lhet egy\u00fctt, ez\u00e9rt k\u00fcl\u00f6n klasztert hoztunk l\u00e9tre a Consul sz\u00e1m\u00e1ra. A Patroni m\u00e1r k\u00fcl\u00f6n Consul-lal m\u0171k\u00f6d\u00f6tt, vagyis volt k\u00fcl\u00f6n PostgreSQL klaszter \u00e9s k\u00fcl\u00f6n Consul klaszter. Ez egy alapvet\u0151 \u00fatmutat\u00f3, hogyan kell ezeket a dolgokat sz\u00e9tszedni \u00e9s fenntartani, hogy ne \u00e9ljenek egy\u00fctt. <\/p>\n<p><\/p>\n<p>Alternat\u00edv megold\u00e1sk\u00e9nt lehet\u0151s\u00e9g van a ttl, loop_wait, retry_timeout param\u00e9terek \u00e1ll\u00edtgat\u00e1s\u00e1ra, azaz megpr\u00f3b\u00e1lni a terhel\u00e9si cs\u00facsokat ezek n\u00f6vel\u00e9s\u00e9vel \u00e1tv\u00e9szelni. De ez nem a legmegfelel\u0151bb megold\u00e1s, mert a terhel\u00e9s hossz\u00fa t\u00e1v\u00fa is lehet. Esetleg t\u00fall\u00e9phet\u00fcnk ezeknek a param\u00e9tereknek a korl\u00e1tain, \u00e9s ez nem biztos, hogy seg\u00edt. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni Hiba T\u00f6rt\u00e9netek vagy Hogyan \u00fcsse le PostgreSQL klaszter\u00e9t. Alexei Leszovszkij\" src=\"\/wp-content\/uploads\/2020\/07\/c51f35dcd88b1c792acec231c0c6c66c.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Az els\u0151 probl\u00e9ma, ahogy l\u00e1tj\u00e1tok, egyszer\u0171. \u00d6sszevonva a DCS-t az adatb\u00e1zissal, probl\u00e9m\u00e1t kaptunk. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni Hiba T\u00f6rt\u00e9netek vagy Hogyan \u00fcsse le PostgreSQL klaszter\u00e9t. Alexei Leszovszkij\" src=\"\/wp-content\/uploads\/2020\/07\/cc2a98d9790441577fb4080406cbc53f.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>A m\u00e1sodik probl\u00e9ma hasonl\u00f3 az els\u0151h\u00f6z. Az a hasonl\u00f3s\u00e1ga, hogy ism\u00e9t probl\u00e9m\u00e1k mer\u00fclnek fel a DCS rendszerrel val\u00f3 interakci\u00f3 sor\u00e1n.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni Hiba T\u00f6rt\u00e9netek vagy Hogyan \u00fcsse le PostgreSQL klaszter\u00e9t. Alexei Leszovszkij\" src=\"\/wp-content\/uploads\/2020\/07\/e5c01b105adca48cc620085db8dd2d2b.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ha megn\u00e9zz\u00fck a napl\u00f3kat, l\u00e1tni fogjuk, hogy \u00fajra kommunik\u00e1ci\u00f3s hiba l\u00e9pett fel. A Patroni azt mondja, hogy nem tud kapcsolatba l\u00e9pni a DCS-sel, ez\u00e9rt a jelenlegi mester \u00e1tv\u00e1lt replik\u00e1l\u00f3 \u00fczemm\u00f3dba.<\/p>\n<p><\/p>\n<p>A r\u00e9gi mester replik\u00e1v\u00e1 v\u00e1lik, itt a Patroni \u00fagy m\u0171k\u00f6dik, ahogy kell. Elind\u00edtja a pg_rewind-ot, hogy visszatekerje a tranzakci\u00f3s napl\u00f3t, majd csatlakozik az \u00faj mesterhez, \u00e9s felz\u00e1rk\u00f3zik az \u00faj mesterhez. Itt a Patroni \u00fagy m\u0171k\u00f6dik, ahogy elv\u00e1rhat\u00f3 t\u0151le. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni Hiba T\u00f6rt\u00e9netek vagy Hogyan \u00fcsse le PostgreSQL klaszter\u00e9t. Alexei Leszovszkij\" src=\"\/wp-content\/uploads\/2020\/07\/29255f4790abb15b64dbf9ee0b41c7fc.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Itt meg kell tal\u00e1lnunk azt a helyet, ami megel\u0151zte a f\u00e1jlle\u00edr\u00f3 hib\u00e1j\u00e1t, azaz azokat a hib\u00e1kat, amelyek oka volt a f\u00e1jlle\u00edr\u00f3 hiba bek\u00f6vetkez\u00e9s\u00e9nek. Ebben a vonatkoz\u00e1sban a Patroni napl\u00f3ival viszonylag k\u00f6nny\u0171 dolgozni. Egy meghat\u00e1rozott id\u0151k\u00f6z\u00f6nk\u00e9nt \u00edrja ugyanazokat az \u00fczeneteket. Ha elkezdj\u00fck gyorsan g\u00f6rgetni ezeket a napl\u00f3kat, akkor a napl\u00f3k v\u00e1ltoz\u00e1sa azt mutatja, hogy valamilyen probl\u00e9ma kezd\u0151d\u00f6tt. Gyorsan visszat\u00e9r\u00fcnk arra a pontra, \u00e9s megn\u00e9zz\u00fck, mi t\u00f6rt\u00e9nik. <\/p>\n<p><\/p>\n<p>Norm\u00e1l esetben a napl\u00f3k k\u00f6r\u00fclbel\u00fcl \u00edgy n\u00e9znek ki. Ellen\u0151rz\u00e9sre ker\u00fcl a z\u00e1rol\u00e1s tulajdonosa. \u00c9s ha a tulajdonos, mondjuk, megv\u00e1ltozott, akkor olyan esem\u00e9nyek k\u00f6vetkezhetnek be, amelyekre a Patroninak reag\u00e1lnia kell. De ebben az esetben minden rendben van. Megkeress\u00fck azt a helyet, ahol a hib\u00e1k kezd\u0151dtek. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni Hiba T\u00f6rt\u00e9netek vagy Hogyan \u00fcsse le PostgreSQL klaszter\u00e9t. Alexei Leszovszkij\" src=\"\/wp-content\/uploads\/2020\/07\/f48ebd22a405f5b2900621451c68f543.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ha a hiba\u00fczenetek megjelen\u00e9s\u00e9hez vezet\u0151 helyre g\u00f6rget\u00fcnk, azt l\u00e1tjuk, hogy automatikus failover t\u00f6rt\u00e9nt. Mivel a hib\u00e1ink a DCS-sel kapcsolatos interakci\u00f3kkal f\u00fcggtek \u00f6ssze, \u00e9s mi Consul-t haszn\u00e1ltunk, a Consul napl\u00f3it is ellen\u0151rizz\u00fck, hogy mi t\u00f6rt\u00e9nt ott. <\/p>\n<p><\/p>\n<p>A failover id\u0151pontj\u00e1t \u00e9s a Consul napl\u00f3k id\u0151pontj\u00e1t \u00f6sszehasonl\u00edtva azt l\u00e1tjuk, hogy a Consul klaszter\u00fcnk szomsz\u00e9dai elkezdtek k\u00e9telkedni a t\u00f6bbi Consul klaszter tagj\u00e1nak l\u00e9tez\u00e9s\u00e9ben.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni Hiba T\u00f6rt\u00e9netek vagy Hogyan \u00fcsse le PostgreSQL klaszter\u00e9t. Alexei Leszovszkij\" src=\"\/wp-content\/uploads\/2020\/07\/63b02ac5b4f5a34a2822f1eee2b1f2f8.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ha megn\u00e9zz\u00fck m\u00e1s Consul \u00fcgyn\u00f6k\u00f6k napl\u00f3it, ott is l\u00e1tszik, hogy valamilyen h\u00e1l\u00f3zati \u00f6sszeoml\u00e1s zajlik. Minden Consul klaszter tag k\u00e9telkedik egym\u00e1s l\u00e9tez\u00e9s\u00e9ben, ami a failover kiv\u00e1lt\u00f3 oka lett. <\/p>\n<p><\/p>\n<p>Ha megn\u00e9zz\u00fck, mi t\u00f6rt\u00e9nt a hib\u00e1k el\u0151tt, l\u00e1thatjuk, hogy k\u00fcl\u00f6nf\u00e9le hib\u00e1k, p\u00e9ld\u00e1ul hat\u00e1rid\u0151 (deadline), RPC hiba mer\u00fcltek fel, ami vil\u00e1gosan mutatja, hogy valamilyen probl\u00e9ma van a Consul klaszter tagjai k\u00f6z\u00f6tti interakci\u00f3ban. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni Hiba T\u00f6rt\u00e9netek vagy Hogyan \u00fcsse le PostgreSQL klaszter\u00e9t. Alexei Leszovszkij\" src=\"\/wp-content\/uploads\/2020\/07\/b15c912f2afb49d9d85e7bb9361ce449.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>A legegyszer\u0171bb v\u00e1lasz az, hogy jav\u00edtjuk a h\u00e1l\u00f3zatot. De sz\u00e1momra, \u00e1llva a trib\u00fcn\u00f6n, k\u00f6nny\u0171 err\u0151l besz\u00e9lni. A k\u00f6r\u00fclm\u00e9nyek \u00fagy alakulnak, hogy nem mindig a megrendel\u0151 engedheti meg mag\u00e1nak a h\u00e1l\u00f3zat jav\u00edt\u00e1s\u00e1t. El\u0151fordulhat, hogy adatk\u00f6zpontban \u00e9l, \u00e9s nem rendelkezik a h\u00e1l\u00f3zat vagy berendez\u00e9sek jav\u00edt\u00e1s\u00e1hoz sz\u00fcks\u00e9ges lehet\u0151s\u00e9gekkel. Ez\u00e9rt sz\u00fcks\u00e9g van m\u00e1s megold\u00e1sokra. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni Hiba T\u00f6rt\u00e9netek vagy Hogyan \u00fcsse le PostgreSQL klaszter\u00e9t. Alexei Leszovszkij\" src=\"\/wp-content\/uploads\/2020\/07\/1dbdb66233acc3bc321a30a1c5fe14f9.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Vannak lehet\u0151s\u00e9gek:<\/p>\n<p><\/p>\n<ul>\n<li>A legegyszer\u0171bb megold\u00e1s, amelyet a dokument\u00e1ci\u00f3ban is \u00edrtak, az, hogy letiltjuk a Consul ellen\u0151rz\u00e9seit, azaz egyszer\u0171en egy \u00fcres t\u00f6mb\u00f6t adunk \u00e1t. A Consul \u00fcgyn\u00f6knek azt mondjuk, hogy ne haszn\u00e1ljon semmif\u00e9le ellen\u0151rz\u00e9st. Ezeknek az ellen\u0151rz\u00e9seknek a kihagy\u00e1s\u00e1val figyelmen k\u00edv\u00fcl hagyhatjuk ezeket a h\u00e1l\u00f3zati viharokat, \u00e9s nem ind\u00edtunk failovert. <\/li>\n<li>Egy m\u00e1sik lehet\u0151s\u00e9g a raft_multiplier \u00fajraellen\u0151rz\u00e9se. Ez a Consul szerver saj\u00e1t param\u00e9tere. Alap\u00e9rtelmez\u00e9s szerint 5 \u00e9rt\u00e9kre van \u00e1ll\u00edtva. Ez az \u00e9rt\u00e9k a dokument\u00e1ci\u00f3 szerint a staging k\u00f6rnyezetekre aj\u00e1nlott. Val\u00f3j\u00e1ban ez befoly\u00e1solja az \u00fczenetek csere gyakoris\u00e1g\u00e1t a Consul h\u00e1l\u00f3zat tagjai k\u00f6z\u00f6tt. E param\u00e9ter hat\u00e1ssal van a szolg\u00e1ltat\u00f3 k\u00f6z\u00f6tti kommunik\u00e1ci\u00f3 sebess\u00e9g\u00e9re a Consul klaszter tagjaival. Termel\u00e9si k\u00f6rnyezet eset\u00e9n aj\u00e1nlott cs\u00f6kkenteni ezt, hogy a csom\u00f3pontok gyakrabban cser\u00e9ljenek \u00fczeneteket. <\/li>\n<li>Egy m\u00e1sik megold\u00e1s, amit elkezdt\u00fcnk alkalmazni, az a Consul folyamatok priorit\u00e1s\u00e1nak n\u00f6vel\u00e9se a t\u00f6bbi folyamat k\u00f6z\u00f6tt az oper\u00e1ci\u00f3s rendszer folyamattervez\u0151je sz\u00e1m\u00e1ra. Van egy \"nice\" nev\u0171 param\u00e9ter, amely pontosan meghat\u00e1rozza a folyamatok priorit\u00e1s\u00e1t, amelyet az oper\u00e1ci\u00f3s rendszer tervez\u0151je figyelembe vesz a tervez\u00e9s sor\u00e1n. Mi cs\u00f6kkentett\u00fck a Consul-\u00fcgyn\u00f6k\u00f6k nice \u00e9rt\u00e9k\u00e9t, teh\u00e1t n\u00f6velt\u00fck a priorit\u00e1st, hogy az oper\u00e1ci\u00f3s rendszer t\u00f6bb id\u0151t biztos\u00edtson a Consul folyamatok sz\u00e1m\u00e1ra a munka v\u00e9gz\u00e9s\u00e9re \u00e9s a k\u00f3d v\u00e9grehajt\u00e1s\u00e1ra. Eset\u00fcnkben ez megoldotta a probl\u00e9m\u00e1nkat. <\/li>\n<li>Egy m\u00e1sik lehet\u0151s\u00e9g, hogy ne haszn\u00e1ljuk a Consult. Van egy ismer\u0151s\u00f6m, aki nagy t\u00e1mogat\u00f3ja az Etcd-nek. Rendszeresen vitatkozunk arr\u00f3l, hogy mi a jobb, az Etcd vagy a Consul. De abban a szempontb\u00f3l, hogy mi a jobb, \u00e1ltal\u00e1ban abban az \u00e1ll\u00e1spontban osztozunk, hogy a Consulnak van egy \u00fcgyn\u00f6ke, amelynek minden egyes csom\u00f3ponton futnia kell az adatb\u00e1zissal. Ez\u00e9rt a Patroni \u00e9s a Consul klaszter k\u00f6z\u00f6tti interakci\u00f3 ezen az \u00fcgyn\u00f6k\u00f6n kereszt\u00fcl t\u00f6rt\u00e9nik. Ez az \u00fcgyn\u00f6k v\u00e1lik a sz\u0171k keresztmetszett\u00e9. Ha valami t\u00f6rt\u00e9nik az \u00fcgyn\u00f6kkel, a Patroni m\u00e1r nem tud kapcsolatba l\u00e9pni a Consul klaszterrel. Ez probl\u00e9m\u00e1t jelent. Az Etcd-nek ezzel szemben nincs \u00fcgyn\u00f6ke. A Patroni k\u00f6zvetlen\u00fcl tud dolgozni az Etcd szerverek list\u00e1j\u00e1val, \u00e9s m\u00e1r kapcsolatba l\u00e9pni vel\u00fck. Ez\u00e9rt, ha az \u00d6n c\u00e9g\u00e9n\u00e9l az Etcd-t haszn\u00e1lja, akkor ez val\u00f3sz\u00edn\u0171leg jobb v\u00e1laszt\u00e1s, mint a Consul. De n\u00e1lunk az \u00fcgyfelek \u00e1ltal v\u00e1lasztott \u00e9s haszn\u00e1lt megold\u00e1sok korl\u00e1toznak minket. A legt\u00f6bb \u00fcgyfel\u00fcnkn\u00e9l a Consul van. <\/li>\n<li>Az utols\u00f3 pont a param\u00e9terek \u00e9rt\u00e9keinek fel\u00fclvizsg\u00e1lata. N\u00f6velhetj\u00fck ezeket az \u00e9rt\u00e9keket abban a rem\u00e9nyben, hogy a r\u00f6vid t\u00e1v\u00fa h\u00e1l\u00f3zati probl\u00e9m\u00e1ink r\u00f6videk lesznek, \u00e9s nem esnek az ezen param\u00e9terek intervallum\u00e1ba. \u00cdgy cs\u00f6kkenthetj\u00fck a Patroni agresszivit\u00e1s\u00e1t az automatikus failover v\u00e9grehajt\u00e1sakor, ha valamilyen h\u00e1l\u00f3zati probl\u00e9ma mer\u00fcl fel.<\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni Hiba T\u00f6rt\u00e9netek vagy Hogyan \u00fcsse le PostgreSQL klaszter\u00e9t. Alexei Leszovszkij\" src=\"\/wp-content\/uploads\/2020\/07\/f0043050da20f6368dabf66ec9a4eade.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Azt hiszem, sokan, akik haszn\u00e1lj\u00e1k a Patronit, ismerik ezt a parancsot. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni Hiba T\u00f6rt\u00e9netek vagy Hogyan \u00fcsse le PostgreSQL klaszter\u00e9t. Alexei Leszovszkij\" src=\"\/wp-content\/uploads\/2020\/07\/9f78f59dab166e47ac78436802156d04.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ez a parancs megmutatja a klaszter aktu\u00e1lis \u00e1llapot\u00e1t. Els\u0151 pillant\u00e1sra ez a k\u00e9p norm\u00e1lisnak t\u0171nhet. Van egy mester, van egy replik\u00e1nk, nincs replik\u00e1ci\u00f3s k\u00e9s\u00e9s. De ez a k\u00e9p pontosan addig norm\u00e1lis, am\u00edg nem tudjuk, hogy ennek a klaszternek h\u00e1rom csom\u00f3pontnak kell lennie, nem kett\u0151nek. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni Hiba T\u00f6rt\u00e9netek vagy Hogyan \u00fcsse le PostgreSQL klaszter\u00e9t. Alexei Leszovszkij\" src=\"\/wp-content\/uploads\/2020\/07\/a39c891f8620ba210b6bce0727e0fa8b.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ez\u00e9rt automatikus \u00e1tv\u00e1lt\u00e1s t\u00f6rt\u00e9nt. Az automatikus \u00e1tv\u00e1lt\u00e1s ut\u00e1n pedig a replik\u00e1nk elt\u0171nt. Meg kell \u00e1llap\u00edtanunk, mi\u00e9rt t\u0171nt el, \u00e9s vissza kell hoznunk. Ism\u00e9t megn\u00e9zz\u00fck a napl\u00f3kat, hogy mi t\u00f6rt\u00e9nt az automatikus \u00e1tv\u00e1lt\u00e1s sor\u00e1n.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni Hiba T\u00f6rt\u00e9netek vagy Hogyan \u00fcsse le PostgreSQL klaszter\u00e9t. Alexei Leszovszkij\" src=\"\/wp-content\/uploads\/2020\/07\/e6e67d46cb20c8d7e58c7505157f68e1.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ebben az esetben a m\u00e1sodik replik\u00e1b\u00f3l lett a mester. Itt minden rendben van. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni Hiba T\u00f6rt\u00e9netek vagy Hogyan \u00fcsse le PostgreSQL klaszter\u00e9t. Alexei Leszovszkij\" src=\"\/wp-content\/uploads\/2020\/07\/b86ccea68b0c6013a23bbd2804e48320.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>M\u00e1r a replik\u00e1val kell foglalkoznunk, amelyik kiesett, \u00e9s amelyik nem r\u00e9sze a klaszternek. Megnyitjuk a Patroni napl\u00f3kat, \u00e9s megn\u00e9zz\u00fck, hogy a klaszterhez kapcsol\u00f3d\u00e1s sor\u00e1n probl\u00e9ma l\u00e9pett fel a pg_rewind szakasz\u00e1ban. A klaszterhez val\u00f3 csatlakoz\u00e1shoz vissza kell tekern\u00fcnk a tranzakci\u00f3s napl\u00f3t, a sz\u00fcks\u00e9ges tranzakci\u00f3s napl\u00f3t a mestert\u0151l k\u00e9rni, \u00e9s az alapj\u00e1n utol\u00e9rni a mestert. <\/p>\n<p><\/p>\n<p>Ebben az esetben nem \u00e1ll rendelkez\u00e9sre tranzakci\u00f3s napl\u00f3, \u00e9s a replik\u00e1t nem lehet elind\u00edtani. Ez\u00e9rt a Postgres le\u00e1ll, hib\u00e1val. \u00c9s ez\u00e9rt nincs jelen a klaszterben. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni Hiba T\u00f6rt\u00e9netek vagy Hogyan \u00fcsse le PostgreSQL klaszter\u00e9t. Alexei Leszovszkij\" src=\"\/wp-content\/uploads\/2020\/07\/dadbd44b766674b719d85781ef7f0caa.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Meg kell \u00e9rten\u00fcnk, mi\u00e9rt nincs jelen a klaszterben, \u00e9s mi\u00e9rt nem voltak napl\u00f3k. Megy\u00fcnk az \u00faj mesterhez, \u00e9s megn\u00e9zz\u00fck, mit l\u00e1tunk a napl\u00f3kban. Kider\u00fcl, hogy am\u00edg a pg_rewind-ot v\u00e9gezt\u00e9k, checkpoint t\u00f6rt\u00e9nt. \u00c9s a r\u00e9gi tranzakci\u00f3s napl\u00f3k egy r\u00e9sze egyszer\u0171en \u00e1t lett nevezve. Amikor a r\u00e9gi mester megpr\u00f3b\u00e1lt csatlakozni az \u00faj mesterhez, \u00e9s k\u00e9rni ezeket a napl\u00f3kat, azok m\u00e1r \u00e1t voltak nevezve, egyszer\u0171en nem voltak ott.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni Hiba T\u00f6rt\u00e9netek vagy Hogyan \u00fcsse le PostgreSQL klaszter\u00e9t. Alexei Leszovszkij\" src=\"\/wp-content\/uploads\/2020\/07\/f2d5c37324f9436b2bdad1290612d86f.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u00d6sszehasonl\u00edtottam az esem\u00e9nyek id\u0151b\u00e9lyegeit. \u00c9s a k\u00fcl\u00f6nbs\u00e9g mind\u00f6ssze 150 milliszekundum, azaz a checkpoint 369 milliszekundum alatt befejez\u0151d\u00f6tt, a WAL-szegmensek \u00e1tnevez\u00e9sre ker\u00fcltek. \u00c9s mind\u00f6ssze 517 milliszekundummal k\u00e9s\u0151bb, 150 milliszekundum m\u00falva elindult a rewind a r\u00e9gi replik\u00e1n. Azaz mind\u00f6ssze 150 milliszekundum elegend\u0151 volt ahhoz, hogy a replika ne tudjon csatlakozni \u00e9s m\u0171k\u00f6dni. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni Hiba T\u00f6rt\u00e9netek vagy Hogyan \u00fcsse le PostgreSQL klaszter\u00e9t. Alexei Leszovszkij\" src=\"\/wp-content\/uploads\/2020\/07\/99dd80deb8466bfc3aff568456e07102.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Milyen lehet\u0151s\u00e9gek vannak?<\/p>\n<p><\/p>\n<p>Kezdetben replik\u00e1ci\u00f3s slotokat haszn\u00e1ltunk. J\u00f3nak t\u0171nt. B\u00e1r az els\u0151 \u00fczemel\u00e9si szakaszban a slotokat kikapcsoltuk. \u00dagy t\u0171nt, ha a slotok sok WAL-szegmenst halmoznak fel, akkor a mestert le tudjuk \u00e1ll\u00edtani. Az \u00f6sszeomlik. Egy ideig szenvedt\u00fcnk slotok n\u00e9lk\u00fcl. Majd r\u00e1j\u00f6tt\u00fcnk, hogy a slotok sz\u00fcks\u00e9gesek, \u00edgy vissza\u00e1ll\u00edtottuk \u0151ket. <\/p>\n<p><\/p>\n<p>De van egy probl\u00e9ma, hogy amikor a mester \u00e1tmegy egy replik\u00e1ra, t\u00f6rli a slotokat, \u00e9s ezzel egy\u00fctt a WAL-szegmenseket is. Annak \u00e9rdek\u00e9ben, hogy elker\u00fclj\u00fck ezt a probl\u00e9m\u00e1t, \u00fagy d\u00f6nt\u00f6tt\u00fcnk, hogy megemelj\u00fck a wal_keep_segments param\u00e9tert. Alap\u00e9rtelmez\u00e9s szerint 8 szegmens. Ezt 1000-re emelt\u00fck, \u00e9s megn\u00e9zt\u00fck, mennyi szabad hely\u00fcnk van. \u00cdgy 16 gigab\u00e1jt eltartal\u00e9kot kaptunk a wal_keep_segments miatt. Teh\u00e1t a v\u00e1lt\u00e1skor mindig van 16 gigab\u00e1jtnyi tranzakci\u00f3s napl\u00f3nk az \u00f6sszes csom\u00f3ponton.<\/p>\n<p><\/p>\n<p>R\u00e1ad\u00e1sul ez aktu\u00e1lis a hosszabb karbantart\u00e1si feladatokhoz is. Tegy\u00fck fel, hogy friss\u00edten\u00fcnk kell az egyik replik\u00e1t. Ki kell kapcsolnunk. Friss\u00edten\u00fcnk kell a szoftvert, lehet, hogy az oper\u00e1ci\u00f3s rendszert, meg m\u00e9g valamit. \u00c9s amikor kikapcsoljuk a replik\u00e1t, az ehhez a replik\u00e1hoz tartoz\u00f3 slot is t\u00f6rl\u0151dik. Ha kis wal_keep_segments-t haszn\u00e1lunk, akkor a replik\u00e1n hosszabb t\u00e1v\u00fa hi\u00e1nyz\u00e1skor a tranzakci\u00f3s napl\u00f3k el fognak veszni. Ha fel\u00e1ll\u00edtjuk a replik\u00e1t, k\u00e9rni fogja azokat a tranzakci\u00f3s napl\u00f3kat, ahol meg\u00e1llt, de a mestern\u00e9l lehet, hogy nem lesznek ott. \u00c9s a replika sem tud majd csatlakozni. Ez\u00e9rt nagy tartal\u00e9kot tartunk a napl\u00f3kb\u00f3l.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni Hiba T\u00f6rt\u00e9netek vagy Hogyan \u00fcsse le PostgreSQL klaszter\u00e9t. Alexei Leszovszkij\" src=\"\/wp-content\/uploads\/2020\/07\/dad55c828128ce92f649a99cc53ce54b.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni Hiba T\u00f6rt\u00e9netek vagy Hogyan \u00fcsse le PostgreSQL klaszter\u00e9t. Alexei Leszovszkij\" src=\"\/wp-content\/uploads\/2020\/07\/63e70f0b098567f3a6d4fd66a0c293bb.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Van egy production adatb\u00e1zisunk. Ott m\u00e1r m\u0171k\u00f6dnek projektek. <\/p>\n<p><\/p>\n<p>F\u00e1jlhiba t\u00f6rt\u00e9nt. Bel\u00e9pt\u00fcnk \u00e9s megn\u00e9zt\u00fck \u2013 minden rendben, a replik\u00e1k a hely\u00fck\u00f6n, nincs replik\u00e1ci\u00f3s k\u00e9s\u00e9s. A napl\u00f3kban sem volt hiba, minden a legnagyobb rendben. <\/p>\n<p><\/p>\n<p>A term\u00e9kcsapat azt mondja, hogy bizonyos adatoknak l\u00e9tezni\u00fck kellene, de mi az egyik forr\u00e1son l\u00e1tjuk ezeket, a datab\u00e1zisban viszont nem. Meg kell \u00e9rten\u00fcnk, mi t\u00f6rt\u00e9nt vel\u00fck. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni Hiba T\u00f6rt\u00e9netek vagy Hogyan \u00fcsse le PostgreSQL klaszter\u00e9t. Alexei Leszovszkij\" src=\"\/wp-content\/uploads\/2020\/07\/568ca9aa31680d5e0c9d4ed9693b14e6.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Egy\u00e9rtelm\u0171, hogy a pg_rewind fel\u00fcl\u00edrta \u0151ket. Ezt azonnal meg\u00e9rtett\u00fck, de megn\u00e9zt\u00fck, mi t\u00f6rt\u00e9nt. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni Hiba T\u00f6rt\u00e9netek vagy Hogyan \u00fcsse le PostgreSQL klaszter\u00e9t. Alexei Leszovszkij\" src=\"\/wp-content\/uploads\/2020\/07\/a8fee389201d96e81761cd276c5265c3.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>A napl\u00f3kban mindig megtal\u00e1lhatjuk, mikor t\u00f6rt\u00e9nt a f\u00e1jlhiba, ki lett a mester, \u00e9s meg tudjuk hat\u00e1rozni, ki volt a r\u00e9gi mester, \u00e9s mikor akart replika lenni, teh\u00e1t ezekre a napl\u00f3kra van sz\u00fcks\u00e9g\u00fcnk, hogy kider\u00edts\u00fck, mennyi tranzakci\u00f3s napl\u00f3 veszett el.<\/p>\n<p><\/p>\n<p>A r\u00e9gi mester\u00fcnk \u00fajraindult. Az automatikus ind\u00edt\u00e1sban a Patroni volt be\u00e1ll\u00edtva. Elindult a Patroni, amely ezt k\u00f6vet\u0151en elind\u00edtotta a PostgreSQL-t. Pontosabban, a PostgreSQL ind\u00edt\u00e1sa el\u0151tt \u00e9s miel\u0151tt az replik\u00e1v\u00e1 v\u00e1lna, a Patroni elind\u00edtotta a pg_rewind folyamatot. Ennek k\u00f6vetkezt\u00e9ben t\u00f6r\u00f6lte a tranzakci\u00f3s napl\u00f3k egy r\u00e9sz\u00e9t, let\u00f6lt\u00f6tte az \u00fajat, \u00e9s csatlakozott. Itt a Patroni kiv\u00e1l\u00f3an teljes\u00edtett, ahogy az elv\u00e1rt. A klaszter\u00fcnk helyre\u00e1llt. H\u00e1rom csom\u00f3pontunk volt, a failover ut\u00e1n is h\u00e1rom csom\u00f3pont \u2013 minden szuper. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni Hiba T\u00f6rt\u00e9netek vagy Hogyan \u00fcsse le PostgreSQL klaszter\u00e9t. Alexei Leszovszkij\" src=\"\/wp-content\/uploads\/2020\/07\/b747a24f53e20ed098c2dc0afc79bead.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Elvesz\u00edtett\u00fcnk egy r\u00e9sz adatot. Meg kell \u00e9rten\u00fcnk, hogy pontosan mennyi adatot vesz\u00edtett\u00fcnk. Keress\u00fck azt az id\u0151pontot, amikor a rewind t\u00f6rt\u00e9nt. Ezt a napl\u00f3bejegyz\u00e9sek alapj\u00e1n tudjuk meg\u00e1llap\u00edtani. Elindult a rewind, valamit v\u00e9grehajtott, majd lez\u00e1rult.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni Hiba T\u00f6rt\u00e9netek vagy Hogyan \u00fcsse le PostgreSQL klaszter\u00e9t. Alexei Leszovszkij\" src=\"\/wp-content\/uploads\/2020\/07\/5b7bacffb52e3ccd529a3a734c441295.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Meg kell tal\u00e1lnunk azt a poz\u00edci\u00f3t a tranzakci\u00f3s napl\u00f3ban, ahol az \u00f6reg mester meg\u00e1llt. Ebb\u0151l az esetb\u0151l ez a bejegyz\u00e9s az. Sz\u00fcks\u00e9g\u00fcnk van egy m\u00e1sodik bejegyz\u00e9sre is, azaz arra a t\u00e1vols\u00e1gra, amely az \u00f6reg mester \u00e9s az \u00faj mester k\u00f6z\u00f6tt van. <\/p>\n<p><\/p>\n<p>Haszn\u00e1ljuk a megszokott pg_wal_lsn_diff-et, \u00e9s \u00f6sszehasonl\u00edtjuk ezt a k\u00e9t bejegyz\u00e9st. Ebben az esetben 17 megab\u00e1jtot kapunk. Hogy ez sok vagy kev\u00e9s, azt mindenki saj\u00e1t maga d\u00f6ntheti el. Mert valakinek a 17 megab\u00e1jt kev\u00e9s, m\u00e1soknak viszont t\u00fal sok \u00e9s elfogadhatatlan. Itt m\u00e1r mindenki k\u00fcl\u00f6n-k\u00fcl\u00f6n hat\u00e1rozza meg az \u00fczleti ig\u00e9nyek alapj\u00e1n. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni Hiba T\u00f6rt\u00e9netek vagy Hogyan \u00fcsse le PostgreSQL klaszter\u00e9t. Alexei Leszovszkij\" src=\"\/wp-content\/uploads\/2020\/07\/55335fce85961e159459c38300a0ad12.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>De mit \u00e1llap\u00edtottunk meg magunknak? <\/p>\n<p><\/p>\n<p>El\u0151sz\u00f6r is, el kell d\u00f6nten\u00fcnk, hogy mindig sz\u00fcks\u00e9g\u00fcnk van-e a Patroni automatikus ind\u00edt\u00e1s\u00e1ra a rendszer \u00fajraind\u00edt\u00e1sa ut\u00e1n? Gyakran az t\u00f6rt\u00e9nik, hogy be kell l\u00e9pn\u00fcnk a r\u00e9gi mesterre, megn\u00e9zni, mennyire jutott el\u0151re. Lehet, hogy ellen\u0151rizn\u00fcnk kell a tranzakci\u00f3s napl\u00f3 szegmenseit, hogy l\u00e1ssuk, mi t\u00f6rt\u00e9nt, \u00e9s meg\u00e9rteni, hogy elvesz\u00edthetj\u00fck-e ezeket az adatokat, vagy sz\u00fcks\u00e9g\u00fcnk van-e a r\u00e9gi mester standalon \u00fczemm\u00f3d\u00fa ind\u00edt\u00e1s\u00e1ra, hogy visszanyerj\u00fck ezeket az adatokat. <\/p>\n<p><\/p>\n<p>Csak ezut\u00e1n kell d\u00f6nten\u00fcnk arr\u00f3l, hogy ezeket az adatokat eldobhatjuk-e, vagy vissza tudjuk-e \u00e1ll\u00edtani, \u00e9s ezt az el\u00e1gaz\u00e1st replikak\u00e9nt csatlakoztatni tudjuk a klaszter\u00fcnkh\u00f6z.<\/p>\n<p><\/p>\n<p>Ezen k\u00edv\u00fcl l\u00e9tezik a \u201emaximum_lag_on_failover\u201d param\u00e9ter. Alap\u00e9rtelmez\u00e9s szerint, ha nem t\u00e9vedek, ennek az \u00e9rt\u00e9ke 1 megab\u00e1jt. <\/p>\n<p><\/p>\n<p>Hogyan m\u0171k\u00f6dik? Ha a replik\u00e1nk 1 megab\u00e1jt adatot k\u00e9slekedik a replik\u00e1ci\u00f3s h\u00e1tr\u00e1ny miatt, akkor ez a replika nem vesz r\u00e9szt a v\u00e1laszt\u00e1sokban. Ha v\u00e1ratlanul f\u00e1jlal\u00e1s t\u00f6rt\u00e9nik, a Patroni megn\u00e9zi, hogy mely replik\u00e1k k\u00e9slekednek. Ha nagy mennyis\u00e9g\u0171 tranzakci\u00f3s napl\u00f3t k\u00e9slekednek, nem tudnak mesterr\u00e9 v\u00e1lni. Ez egy nagyon j\u00f3 v\u00e9delmi funkci\u00f3, amely megakad\u00e1lyozza, hogy sok adatot vesz\u00edts\u00fcnk. <\/p>\n<p><\/p>\n<p>De itt van egy probl\u00e9ma, hogy a replik\u00e1ci\u00f3s k\u00e9s\u00e9s a Patroni klaszterben \u00e9s a DCS-ben meghat\u00e1rozott id\u0151k\u00f6z\u00f6nk\u00e9nt friss\u00fcl. Azt hiszem, a ttl alap\u00e9rtelmezett \u00e9rt\u00e9ke 30 m\u00e1sodperc.<\/p>\n<p><\/p>\n<p>El\u0151fordulhat olyan helyzet, amikor a DCS-replik\u00e1k replik\u00e1l\u00e1si k\u00e9sleltet\u00e9se egy, de val\u00f3j\u00e1ban teljesen m\u00e1s k\u00e9sleltet\u00e9s is el\u0151fordulhat, vagy ak\u00e1r meg sem jelentkezik, teh\u00e1t ez nem val\u00f3s idej\u0171. \u00c9s nem mindig t\u00fckr\u00f6zi a val\u00f3s\u00e1got. Nem \u00e9rdemes erre bonyolult logik\u00e1t \u00e9p\u00edteni. <\/p>\n<p><\/p>\n<p>A vesztes\u00e9gek kock\u00e1zata mindig fenn\u00e1ll. A legrosszabb esetben egy k\u00e9plet, m\u00edg a k\u00f6zepes esetben egy m\u00e1sik k\u00e9plet \u00e9rv\u00e9nyes. Teh\u00e1t amikor a Patroni bevezet\u00e9s\u00e9t tervezz\u00fck \u00e9s \u00e9rt\u00e9kelj\u00fck, hogy mennyi adatot vesz\u00edthet\u00fcnk el, figyelembe kell venn\u00fcnk ezeket a k\u00e9pleteket, \u00e9s nagyj\u00e1b\u00f3l elk\u00e9pzeln\u00fcnk, mennyi adatot veszthet\u00fcnk. <\/p>\n<p><\/p>\n<p>J\u00f3 h\u00edr is van. Amikor a r\u00e9gi mester el\u0151re l\u00e9p, el\u0151re l\u00e9phet bizonyos h\u00e1tt\u00e9rfolyamatok miatt. Teh\u00e1t volt valamilyen autov\u00e1kuum, ami adatokat \u00edrt, \u00e9s ezeket elmentette a tranzakci\u00f3s napl\u00f3ba. Ezeket az adatokat k\u00f6nnyed\u00e9n figyelmen k\u00edv\u00fcl hagyhatjuk, \u00e9s el is vesz\u00edthetj\u00fck. Ebben nincs semmi probl\u00e9ma. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni Hiba T\u00f6rt\u00e9netek vagy Hogyan \u00fcsse le PostgreSQL klaszter\u00e9t. Alexei Leszovszkij\" src=\"\/wp-content\/uploads\/2020\/07\/a86e8971ab4ef41b89af9cf0bdf519ba.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u00cdgy n\u00e9znek ki a napl\u00f3k, ha be van \u00e1ll\u00edtva a maximum_lag_on_failover \u00e9s bek\u00f6vetkezik a failover, \u00e9s \u00faj mestert kell v\u00e1lasztani. A replik\u00e1tor k\u00e9ptelennek \u00edt\u00e9li meg mag\u00e1t, hogy r\u00e9szt vegyen a v\u00e1laszt\u00e1sokban, \u00e9s visszal\u00e9p a vezet\u0151 poz\u00edci\u00f3\u00e9rt folytatott versenyb\u0151l. V\u00e1rakozik, am\u00edg \u00faj mestert v\u00e1lasztanak, hogy azt\u00e1n csatlakozni tudjon hozz\u00e1. Ez egy tov\u00e1bbi l\u00e9p\u00e9s az adatok elveszt\u00e9s\u00e9nek megel\u0151z\u00e9s\u00e9re.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni Hiba T\u00f6rt\u00e9netek vagy Hogyan \u00fcsse le PostgreSQL klaszter\u00e9t. Alexei Leszovszkij\" src=\"\/wp-content\/uploads\/2020\/07\/f760788e5951facdd08b2069037830fa.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni Hiba T\u00f6rt\u00e9netek vagy Hogyan \u00fcsse le PostgreSQL klaszter\u00e9t. Alexei Leszovszkij\" src=\"\/wp-content\/uploads\/2020\/07\/c32f26e7526e1873f3bfd7d3693fcc72.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Itt a term\u00e9kcsapat azt \u00edrta, hogy a term\u00e9k\u00fck probl\u00e9m\u00e1kat tapasztal Postgres haszn\u00e1lata k\u00f6zben. Ugyanakkor a mesterhez nem lehet csatlakozni, mert SSH-n kereszt\u00fcl nem el\u00e9rhet\u0151. Az automatikus failover sem k\u00f6vetkezik be. <\/p>\n<p><\/p>\n<p>Ez a host k\u00e9nyszer\u00edtett \u00fajraind\u00edt\u00e1st kapott. Az \u00fajraind\u00edt\u00e1s miatt automatikus failover k\u00f6vetkezett be, b\u00e1r \u00fagy \u00e9rtem, hogy lett volna lehet\u0151s\u00e9g manu\u00e1lis automatikus failoverre is. Az \u00fajraind\u00edt\u00e1s ut\u00e1n megn\u00e9zz\u00fck, mi volt a jelenlegi mestern\u00e9l. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni Hiba T\u00f6rt\u00e9netek vagy Hogyan \u00fcsse le PostgreSQL klaszter\u00e9t. Alexei Leszovszkij\" src=\"\/wp-content\/uploads\/2020\/07\/95efb82e0647a396a21683cd53a69547.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ek\u00f6zben el\u0151re tudtuk, hogy probl\u00e9m\u00e1ink voltak a lemezekkel, teh\u00e1t m\u00e1r a megfigyel\u00e9sb\u0151l tudtuk, hogy hol kell kutatni \u00e9s mit kell keresni. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni Hiba T\u00f6rt\u00e9netek vagy Hogyan \u00fcsse le PostgreSQL klaszter\u00e9t. Alexei Leszovszkij\" src=\"\/wp-content\/uploads\/2020\/07\/367aaab607d833d96a573ddbbbced502.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Bel\u00e9pt\u00fcnk a postgres napl\u00f3ba, \u00e9s elkezdt\u00fck n\u00e9zni, mi t\u00f6rt\u00e9nik. L\u00e1ttuk a tranzakci\u00f3kat, amelyek egy-k\u00e9t-h\u00e1rom m\u00e1sodpercig tartottak, ami teljesen norm\u00e1lisnak sz\u00e1m\u00edt. L\u00e1ttuk, hogy az autov\u00e1kuum nagyon lassan \u00e9s szokatlanul indult. \u00c9szrevett\u00fck a ideiglenes f\u00e1jlokat a lemezen. Teh\u00e1t ezek mind a lemezekkel kapcsolatos probl\u00e9m\u00e1k jelei. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni Hiba T\u00f6rt\u00e9netek vagy Hogyan \u00fcsse le PostgreSQL klaszter\u00e9t. Alexei Leszovszkij\" src=\"\/wp-content\/uploads\/2020\/07\/7e0cfce7a81901ef9ef736c3fefc8dce.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Megn\u00e9zt\u00fck a rendszer dmesg-j\u00e9t (a mag\u00fczenetek napl\u00f3ja). \u00c9s l\u00e1ttuk, hogy van egy probl\u00e9m\u00e1nk az egyik lemezzel. A lemezes alrendszer szoftveres Raid volt. Megn\u00e9zt\u00fck a \/proc\/mdstat f\u00e1jlt, \u00e9s l\u00e1ttuk, hogy hi\u00e1nyzik egy lemez. Vagyis itt egy 8 lemezes Raid van, \u00e9s az egyik hi\u00e1nyzik. Ha alaposan megn\u00e9zz\u00fck a di\u00e1t, l\u00e1thatjuk, hogy a kimenetben a sde hi\u00e1nyzik. Sz\u00f3val, mondhatni, egy lemez kiesett. Ez disk probl\u00e9m\u00e1kat okozott, \u00e9s az alkalmaz\u00e1sok is probl\u00e9m\u00e1kat tapasztaltak a Postgres klaszterrel val\u00f3 m\u0171k\u00f6d\u00e9s sor\u00e1n.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni Hiba T\u00f6rt\u00e9netek vagy Hogyan \u00fcsse le PostgreSQL klaszter\u00e9t. Alexei Leszovszkij\" src=\"\/wp-content\/uploads\/2020\/07\/4b09b3aa761cb504fa79173ef280faac.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ebben az esetben a Patroni nem seg\u00edtene nek\u00fcnk, mert a Patroninak nincs feladata a szerver \u00e1llapot\u00e1nak vagy a lemez \u00e1llapot\u00e1nak figyel\u00e9s\u00e9re. Ezeket a helyzeteket k\u00fcls\u0151 monitoringgal kell nyomnunk. A k\u00fcls\u0151 monitoringhoz gyorsan hozz\u00e1adtuk a lemezek monitoroz\u00e1s\u00e1t. <\/p>\n<p><\/p>\n<p>Volt egy \u00f6tlet\u00fcnk \u2013 vajon seg\u00edthetne-e a fencing, vagy egy szoftveres watchdog? Gondoltuk, hogy val\u00f3sz\u00edn\u0171leg nem seg\u00edtene nek\u00fcnk ebben az esetben, mert a probl\u00e9m\u00e1k idej\u00e9n a Patroni folytatta az interakci\u00f3t a DCS klaszter\u00e9vel, \u00e9s nem \u00e9szlelt semmilyen probl\u00e9m\u00e1t. Vagyis a DCS \u00e9s a Patroni szempontj\u00e1b\u00f3l a klaszter j\u00f3l m\u0171k\u00f6d\u00f6tt, b\u00e1r val\u00f3j\u00e1ban lemezprobl\u00e9m\u00e1k voltak, a haszn\u00e1lhat\u00f3s\u00e1ggal kapcsolatos neh\u00e9zs\u00e9gek. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni Hiba T\u00f6rt\u00e9netek vagy Hogyan \u00fcsse le PostgreSQL klaszter\u00e9t. Alexei Leszovszkij\" src=\"\/wp-content\/uploads\/2020\/07\/15fdac78535355d4eb889efcc27efc46.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Szerintem ez az egyik legfurcs\u00e1bb probl\u00e9ma, amit nagyon sok\u00e1ig kutattam, rengeteg napl\u00f3t \u00e1tn\u00e9ztem \u00e9s \u00e1tforgattam, \u00e9s kluster-szimul\u00e1nsnak neveztem el. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni Hiba T\u00f6rt\u00e9netek vagy Hogyan \u00fcsse le PostgreSQL klaszter\u00e9t. Alexei Leszovszkij\" src=\"\/wp-content\/uploads\/2020\/07\/b5259774931c290eda6673deb14b6c48.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>A probl\u00e9ma az volt, hogy a r\u00e9gi mester nem tudott norm\u00e1lis replik\u00e1v\u00e1 v\u00e1lni, vagyis a Patroni elind\u00edtotta, \u00e9s a Patroni jelezte, hogy ez a csom\u00f3pont replikak\u00e9nt van jelen, de ugyanakkor nem volt norm\u00e1lis replika. Most l\u00e1tni fogja, mi\u00e9rt. Ez megmaradt bennem a probl\u00e9ma elemz\u00e9se sor\u00e1n. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni Hiba T\u00f6rt\u00e9netek vagy Hogyan \u00fcsse le PostgreSQL klaszter\u00e9t. Alexei Leszovszkij\" src=\"\/wp-content\/uploads\/2020\/07\/c35a5d102a46764bbf96e5a75ee88171.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Mivel kezd\u0151d\u00f6tt minden? Ahogy a kor\u00e1bbi probl\u00e9m\u00e1n\u00e1l, lemezlassul\u00e1sokkal. M\u00e1sodpercenk\u00e9nt egy-k\u00e9t elk\u00f6telez\u0151d\u00e9s\u00fcnk volt. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni Hiba T\u00f6rt\u00e9netek vagy Hogyan \u00fcsse le PostgreSQL klaszter\u00e9t. Alexei Leszovszkij\" src=\"\/wp-content\/uploads\/2020\/07\/435c1b350a89f288e0e10ca9d5a2ec6e.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kapcsolati megszak\u00edt\u00e1sok voltak, vagyis a kliensek szakadoztak. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni Hiba T\u00f6rt\u00e9netek vagy Hogyan \u00fcsse le PostgreSQL klaszter\u00e9t. Alexei Leszovszkij\" src=\"\/wp-content\/uploads\/2020\/07\/920cb1f3f3b40578e15e6ff711e85c50.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>K\u00fcl\u00f6nb\u00f6z\u0151 s\u00falyoss\u00e1g\u00fa z\u00e1rak voltak. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni Hiba T\u00f6rt\u00e9netek vagy Hogyan \u00fcsse le PostgreSQL klaszter\u00e9t. Alexei Leszovszkij\" src=\"\/wp-content\/uploads\/2020\/07\/285d6292d89b928a85e95602ee57d38a.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ennek megfelel\u0151en a lemezes alrendszer nem volt t\u00fal reag\u00e1l\u00f3k\u00e9pes. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni Hiba T\u00f6rt\u00e9netek vagy Hogyan \u00fcsse le PostgreSQL klaszter\u00e9t. Alexei Leszovszkij\" src=\"\/wp-content\/uploads\/2020\/07\/ebe71d49360e7f604ecd6a3c8276cb73.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u00c9s a sz\u00e1momra legrejt\u00e9lyesebb az az azonnali le\u00e1ll\u00edt\u00e1si k\u00e9r\u00e9s, ami meg\u00e9rkezett. A Postgresnek h\u00e1rom le\u00e1ll\u00edt\u00e1si m\u00f3dja van:<\/p>\n<p><\/p>\n<ul>\n<li>Ez a graceful, amikor v\u00e1runk, hogy minden kliens \u00f6n\u00e1ll\u00f3an lecsatlakozzon. <\/li>\n<li>Van fast, amikor arra k\u00e9nyszer\u00edtj\u00fck a klienseket, hogy csatlakozzanak le, mert le\u00e1llni k\u00e9sz\u00fcl\u00fcnk. <\/li>\n<li>Immediate. Ebben az esetben az immediate nem is t\u00e1j\u00e9koztatja az \u00fcgyfeleket, hogy le kell \u00e1llniuk, egyszer\u0171en figyelmeztet\u00e9s n\u00e9lk\u00fcl kikapcsol. Az \u00f6sszes \u00fcgyf\u00e9l sz\u00e1m\u00e1ra az oper\u00e1ci\u00f3s rendszer RST \u00fczenetet k\u00fcld (TCP-\u00fczenetet, amely szerint a kapcsolat megszakadt, \u00e9s az \u00fcgyf\u00e9lnek m\u00e1r nincs mit keresnie). <\/li>\n<\/ul>\n<p><\/p>\n<p>Ki k\u00fcldte ezt a jelet? A Postgres h\u00e1tt\u00e9rfolyamatai nem k\u00fcldenek egym\u00e1snak ilyen jeleket, teh\u00e1t ez kill-9. Egym\u00e1snak nem k\u00fcldenek ilyet, csak reag\u00e1lnak r\u00e1, teh\u00e1t ez a Postgres s\u00fcrg\u0151ss\u00e9gi \u00fajraind\u00edt\u00e1sa. Ki k\u00fcldte, nem tudom. <\/p>\n<p><\/p>\n<p>Megn\u00e9ztem a 'last' parancsot, \u00e9s l\u00e1ttam egy embert, aki szint\u00e9n bejelentkezett erre a szerverre vel\u00fcnk, de sz\u00e9gyelltem megk\u00e9rdezni. Lehet, hogy ez kill -9 volt. A napl\u00f3kban l\u00e1tn\u00e1m a kill -9-et, mert a Postgres \u00edrja, hogy fogadta a kill -9-et, de ezt nem l\u00e1ttam a napl\u00f3kban. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni Hiba T\u00f6rt\u00e9netek vagy Hogyan \u00fcsse le PostgreSQL klaszter\u00e9t. Alexei Leszovszkij\" src=\"\/wp-content\/uploads\/2020\/07\/fe8e844649cea3384ebfde86e36eba44.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Tov\u00e1bb vizsg\u00e1lva \u00e9szrevettem, hogy a Patroni el\u00e9g hossz\u00fa ideig nem \u00edrt a napl\u00f3ba - 54 m\u00e1sodpercig. Ha \u00f6sszehasonl\u00edtjuk a k\u00e9t id\u0151b\u00e9lyeget, itt k\u00f6r\u00fclbel\u00fcl 54 m\u00e1sodpercig nem voltak \u00fczenetek. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni Hiba T\u00f6rt\u00e9netek vagy Hogyan \u00fcsse le PostgreSQL klaszter\u00e9t. Alexei Leszovszkij\" src=\"\/wp-content\/uploads\/2020\/07\/ffb1c4db3d7de591d77d56ed2fcc4f2a.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ez id\u0151 alatt automatikus \u00e1tkapcsol\u00e1s t\u00f6rt\u00e9nt. A Patroni itt ism\u00e9t j\u00f3l m\u0171k\u00f6d\u00f6tt. A r\u00e9gi mester nem volt el\u00e9rhet\u0151, valami t\u00f6rt\u00e9nt vele. Elkezd\u0151dtek az \u00faj mester v\u00e1laszt\u00e1sai. Itt minden j\u00f3l m\u0171k\u00f6d\u00f6tt. A pgsql01 lett az \u00faj vezet\u0151. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni Hiba T\u00f6rt\u00e9netek vagy Hogyan \u00fcsse le PostgreSQL klaszter\u00e9t. Alexei Leszovszkij\" src=\"\/wp-content\/uploads\/2020\/07\/6b2457653e9f77af44cd64b4aff021a0.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Van egy replik\u00e1nk, amelyb\u0151l mester lett. \u00c9s van egy m\u00e1sodik replik\u00e1nk. A m\u00e1sodik replik\u00e1val \u00e9ppen probl\u00e9m\u00e1k voltak. Pr\u00f3b\u00e1lt \u00fajrakonfigur\u00e1l\u00f3dni. Amennyire meg\u00e9rtem, pr\u00f3b\u00e1lta megv\u00e1ltoztatni a recovery.conf-ot, \u00fajraind\u00edtani a Postgres-t \u00e9s csatlakozni az \u00faj mesterhez. Minden 10 m\u00e1sodpercben \u00edrja az \u00fczeneteket, hogy pr\u00f3b\u00e1lkozik, de nem siker\u00fcl neki. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni Hiba T\u00f6rt\u00e9netek vagy Hogyan \u00fcsse le PostgreSQL klaszter\u00e9t. Alexei Leszovszkij\" src=\"\/wp-content\/uploads\/2020\/07\/381818f189e19c3e1154074b4652f837.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ezek alatt a pr\u00f3b\u00e1lkoz\u00e1sok alatt a r\u00e9gi mesterhez meg\u00e9rkezik az immediate-shutdown jel. A mester \u00fajraindul. \u00c9s a helyre\u00e1ll\u00edt\u00e1s is le\u00e1ll, mert a r\u00e9gi mester \u00fajraindul. Teh\u00e1t a replik\u00e1nak nem lehet csatlakozni hozz\u00e1, mert kikapcsol\u00e1si m\u00f3dban van. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni Hiba T\u00f6rt\u00e9netek vagy Hogyan \u00fcsse le PostgreSQL klaszter\u00e9t. Alexei Leszovszkij\" src=\"\/wp-content\/uploads\/2020\/07\/d8a8cde925fa8fe601d44ab908ae69dc.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Egy pillanatban elindult, de a replik\u00e1ci\u00f3 nem indult el. <\/p>\n<p><\/p>\n<p>Van egy egyetlen hipot\u00e9zisem, hogy a recovery.conf-ban a r\u00e9gi mester c\u00edme volt. \u00c9s amikor megjelent az \u00faj mester, a m\u00e1sodik replika m\u00e9g mindig a r\u00e9gi mesterhez pr\u00f3b\u00e1lt csatlakozni. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni Hiba T\u00f6rt\u00e9netek vagy Hogyan \u00fcsse le PostgreSQL klaszter\u00e9t. Alexei Leszovszkij\" src=\"\/wp-content\/uploads\/2020\/07\/425ea3af1f1e186f4760e1fb1f5419fa.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Amikor a Patroni elindult a m\u00e1sodik replik\u00e1n, a csom\u00f3pont elindult, de nem tudott csatlakozni a replik\u00e1ci\u00f3n kereszt\u00fcl. \u00c9s replik\u00e1ci\u00f3s k\u00e9s\u00e9s keletkezett, ami k\u00f6r\u00fclbel\u00fcl \u00edgy n\u00e9zett ki. Teh\u00e1t mindh\u00e1rom csom\u00f3pont a hely\u00e9n volt, de a m\u00e1sodik csom\u00f3pont lemaradt. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni Hiba T\u00f6rt\u00e9netek vagy Hogyan \u00fcsse le PostgreSQL klaszter\u00e9t. Alexei Leszovszkij\" src=\"\/wp-content\/uploads\/2020\/07\/f564eacd9944666c9a3f5bea634ede6b.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ha megn\u00e9zz\u00fck a napl\u00f3kat, amelyek \u00edr\u00f3dtak, l\u00e1thatjuk, hogy a replik\u00e1ci\u00f3 nem tud elindulni, mert a tranzakci\u00f3s napl\u00f3k elt\u00e9rnek. Azok a tranzakci\u00f3s napl\u00f3k, amelyeket a mester aj\u00e1nl, amelyek a recovery.conf-ban szerepelnek, egyszer\u0171en nem felelnek meg a jelenlegi csom\u00f3pontunknak. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni Hiba T\u00f6rt\u00e9netek vagy Hogyan \u00fcsse le PostgreSQL klaszter\u00e9t. Alexei Leszovszkij\" src=\"\/wp-content\/uploads\/2020\/07\/6b09947d157c9ef0a190da2df2cb5892.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u00c9s itt hib\u00e1t k\u00f6vettem el. Meg kellett volna n\u00e9znem, mi van a recovery.conf-ban, hogy ellen\u0151rizzem a hipot\u00e9zisem, hogy nem a megfelel\u0151 mesterhez csatlakozunk. De akkor csak most kezdtem meg\u00e9rteni ezt, \u00e9s ez nem jutott eszembe, vagy \u00e9szrevettem, hogy a replik\u00e1ci\u00f3 elmarad, \u00e9s azt \u00e1t kell t\u00f6ltenem, teh\u00e1t valahogy hanyagul v\u00e9geztem el. Ez az \u00e9n hib\u00e1m volt. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni Hiba T\u00f6rt\u00e9netek vagy Hogyan \u00fcsse le PostgreSQL klaszter\u00e9t. Alexei Leszovszkij\" src=\"\/wp-content\/uploads\/2020\/07\/159f2256fd81428fd0d82a255528887d.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>30 perc m\u00falva m\u00e1r itt volt az admin, teh\u00e1t \u00fajraind\u00edtottam a Patroni-t a replik\u00e1n. M\u00e1r lemondtam r\u00f3la, azt hittem, \u00e1t kell t\u00f6ltenem. \u00c9s arra gondoltam \u2013 \u00fajraind\u00edtom a Patroni-t, lehet, hogy t\u00f6rt\u00e9nik valami j\u00f3. A recovery elindult. \u00c9s az adatb\u00e1zis meg is ny\u00edlt, k\u00e9szen \u00e1llt a kapcsolatok fogad\u00e1s\u00e1ra. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni Hiba T\u00f6rt\u00e9netek vagy Hogyan \u00fcsse le PostgreSQL klaszter\u00e9t. Alexei Leszovszkij\" src=\"\/wp-content\/uploads\/2020\/07\/aeac98750386c8389d39e006a229cc85.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>A replik\u00e1ci\u00f3 elindult. De egy perccel k\u00e9s\u0151bb le\u00e1llt egy hib\u00e1val, miszerint nem megfelel\u0151k a tranzakci\u00f3s napl\u00f3k. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni Hiba T\u00f6rt\u00e9netek vagy Hogyan \u00fcsse le PostgreSQL klaszter\u00e9t. Alexei Leszovszkij\" src=\"\/wp-content\/uploads\/2020\/07\/17eaba000a79c80c29d1bc3902de05e6.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Arra gondoltam, hogy \u00fajra pr\u00f3b\u00e1lom \u00fajraind\u00edtani. Ism\u00e9t \u00fajraind\u00edtottam a Patroni-t, \u00e9s nem a Postgres-t ind\u00edtottam \u00fajra, hanem kifejezetten a Patroni-t, abban a rem\u00e9nyben, hogy var\u00e1zslatos m\u00f3don elind\u00edtja az adatb\u00e1zist. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni Hiba T\u00f6rt\u00e9netek vagy Hogyan \u00fcsse le PostgreSQL klaszter\u00e9t. Alexei Leszovszkij\" src=\"\/wp-content\/uploads\/2020\/07\/a85b38e033c45ad73da317f41e0ef24a.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>A replik\u00e1ci\u00f3 ism\u00e9t elindult, de a tranzakci\u00f3s napl\u00f3bejegyz\u00e9sek elt\u00e9rtek, nem azok voltak, amelyek a kor\u00e1bbi pr\u00f3b\u00e1lkoz\u00e1skor voltak. A replik\u00e1ci\u00f3 ism\u00e9t le\u00e1llt. \u00c9s az \u00fczenet egy kicsit m\u00e1s volt. Sz\u00e1momra nem volt nagyon inform\u00e1l\u00f3. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni Hiba T\u00f6rt\u00e9netek vagy Hogyan \u00fcsse le PostgreSQL klaszter\u00e9t. Alexei Leszovszkij\" src=\"\/wp-content\/uploads\/2020\/07\/fd90d708230bd54af685786c7e361ee1.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u00c9s akkor az jutott eszembe \u2013 mi lenne, ha \u00fajraind\u00edtan\u00e1m a Postgres-t, \u00e9s k\u00f6zben a jelenlegi mestern\u00e9l csin\u00e1ln\u00e9k egy checkpoint-ot, hogy kicsit el\u0151bbre toljam a tranzakci\u00f3s napl\u00f3 pontot, hogy a recovery egy m\u00e1sik pontb\u00f3l kezd\u0151dj\u00f6n? Plusz m\u00e9g voltak WAL tartal\u00e9kaink is. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni Hiba T\u00f6rt\u00e9netek vagy Hogyan \u00fcsse le PostgreSQL klaszter\u00e9t. Alexei Leszovszkij\" src=\"\/wp-content\/uploads\/2020\/07\/19e67f95d1a74141a013947c9aa39e38.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u00dajraind\u00edtottam a Patroni-t, csin\u00e1ltam p\u00e1r checkpoint-ot a mestern\u00e9l, p\u00e1r restart-pontot a replik\u00e1n, amikor az megny\u00edlt. \u00c9s ez seg\u00edtett. Hossz\u00fa ideig gondolkodtam, hogy mi\u00e9rt seg\u00edtett ez \u00e9s hogyan m\u0171k\u00f6d\u00f6tt. \u00c9s a replik\u00e1ci\u00f3 elindult. A replik\u00e1ci\u00f3 t\u00f6bb\u00e9 nem szakadt meg. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni Hiba T\u00f6rt\u00e9netek vagy Hogyan \u00fcsse le PostgreSQL klaszter\u00e9t. Alexei Leszovszkij\" src=\"\/wp-content\/uploads\/2020\/07\/418ca59a681be84f51ed374a73a759c9.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ez a probl\u00e9ma sz\u00e1momra az egyik legrejt\u00e9lyesebb, amin m\u00e9g mindig t\u00f6prengek, hogy val\u00f3j\u00e1ban mi t\u00f6rt\u00e9nt. <\/p>\n<p><\/p>\n<p>Milyen k\u00f6vetkeztet\u00e9seket lehet levonni? A Patroni m\u0171k\u00f6dhet a tervek szerint, \u00e9s hib\u00e1k n\u00e9lk\u00fcl. De ez nem 100%-os garancia, hogy minden rendben van. A replika elindulhat, de lehet, hogy f\u00e9lig m\u0171k\u00f6d\u0151 \u00e1llapotban van, \u00e9s az alkalmaz\u00e1s nem m\u0171k\u00f6dhet ilyen replika eset\u00e9n, mert ott r\u00e9gi adatok lesznek. <\/p>\n<p><\/p>\n<p>A f\u00e1jl\u00e1tad\u00e1s ut\u00e1n mindig ellen\u0151rizn\u00fcnk kell, hogy rendben van a klaszter, vagyis van-e a sz\u00fcks\u00e9ges sz\u00e1m\u00fa replika \u00e9s nincs-e replik\u00e1ci\u00f3s k\u00e9sleltet\u00e9s.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni Hiba T\u00f6rt\u00e9netek vagy Hogyan \u00fcsse le PostgreSQL klaszter\u00e9t. Alexei Leszovszkij\" src=\"\/wp-content\/uploads\/2020\/07\/aca7047ff33d3efe14071b798b554091.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ezeknek a probl\u00e9m\u00e1knak a megvizsg\u00e1l\u00e1sa sor\u00e1n aj\u00e1nl\u00e1sokat fogalmaztam meg. Megpr\u00f3b\u00e1ltam \u0151ket k\u00e9t di\u00e1ra \u00f6sszegy\u0171jteni. Val\u00f3sz\u00edn\u0171leg minden t\u00f6rt\u00e9netet \u00f6ssze lehetett volna foglalni k\u00e9t di\u00e1ra, \u00e9s csak azokat mes\u00e9lni.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni Hiba T\u00f6rt\u00e9netek vagy Hogyan \u00fcsse le PostgreSQL klaszter\u00e9t. Alexei Leszovszkij\" src=\"\/wp-content\/uploads\/2020\/07\/d4ad31b26d83c8846fe4097a11d70849.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Amikor a Patronit haszn\u00e1lja, mindenk\u00e9ppen meg kell val\u00f3s\u00edtani a monitoringot. Mindig tudnia kell, mikor t\u00f6rt\u00e9nt aut\u00f3f\u00e1jl\u00e1tad\u00e1s, mert ha nem tudja, hogy volt aut\u00f3f\u00e1jl\u00e1tad\u00e1s, akkor nem ellen\u0151rzi a klasztert. \u00c9s ez rossz.<\/p>\n<p><\/p>\n<p>Minden f\u00e1jl\u00e1tad\u00e1s ut\u00e1n mindig k\u00e9zzel kell ellen\u0151rizn\u00fcnk a klasztert. Biztos\u00edtanunk kell, hogy mindig aktu\u00e1lis sz\u00e1m\u00fa replika legyen, nincs replik\u00e1ci\u00f3s k\u00e9sleltet\u00e9s, \u00e9s a napl\u00f3kban nincsenek olyan hib\u00e1k, amelyek az adatfolyam replik\u00e1ci\u00f3val, a Patronival vagy a DCS rendszerrel kapcsolatosak.<\/p>\n<p><\/p>\n<p>Az automatika sikeresen m\u0171k\u00f6dhet, a Patroni egy nagyon j\u00f3 eszk\u00f6z. M\u0171k\u00f6dhet, de ez nem fogja a klasztert a k\u00edv\u00e1nt \u00e1llapotba juttatni. \u00c9s ha err\u0151l nem szerz\u00fcnk tudom\u00e1st, akkor probl\u00e9m\u00e1ink lesznek.<\/p>\n<p><\/p>\n<p>A Patroni nem ez\u00fcst goly\u00f3. Tov\u00e1bbra is tudnunk kell, hogyan m\u0171k\u00f6dik a Postgres, hogyan m\u0171k\u00f6dik a replik\u00e1ci\u00f3, \u00e9s hogy a Patroni hogyan m\u0171k\u00f6dik a Postgresszal, valamint hogyan biztos\u00edtj\u00e1k a csom\u00f3pontok k\u00f6z\u00f6tti interakci\u00f3t. Erre sz\u00fcks\u00e9g van ahhoz, hogy k\u00e9pesek legy\u00fcnk k\u00e9zzel kijav\u00edtani a felmer\u00fcl\u0151 probl\u00e9m\u00e1kat.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni Hiba T\u00f6rt\u00e9netek vagy Hogyan \u00fcsse le PostgreSQL klaszter\u00e9t. Alexei Leszovszkij\" src=\"\/wp-content\/uploads\/2020\/07\/ea4162df3561d2ea7001f2ef6788eaaa.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Hogyan k\u00f6zel\u00edtem meg a diagnosztikai k\u00e9rd\u00e9st? \u00dagy alakult, hogy k\u00fcl\u00f6nb\u00f6z\u0151 \u00fcgyfelekkel dolgozunk, \u00e9s senkinek sincs ELK stackje, \u00e9s a napl\u00f3kat 6 konzol \u00e9s 2 f\u00fcl megnyit\u00e1s\u00e1val kell \u00e1ttekintenem. Az egyik lapon a Patroni napl\u00f3i vannak minden csom\u00f3pontra, a m\u00e1sik lapon pedig a Consul vagy a Postgres napl\u00f3i sz\u00fcks\u00e9g szerint. Ezt diagnosztiz\u00e1lni nagyon neh\u00e9z. <\/p>\n<p><\/p>\n<p>Milyen megk\u00f6zel\u00edt\u00e9seket dolgoztam ki? El\u0151sz\u00f6r is mindig megn\u00e9zem, mikor t\u00f6rt\u00e9nt a f\u00e1jl\u00e1tad\u00e1s. Sz\u00e1momra ez egyfajta v\u00edzv\u00e1laszt\u00f3. Megn\u00e9zem, mi t\u00f6rt\u00e9nt a f\u00e1jl\u00e1tad\u00e1s el\u0151tt, alatt \u00e9s ut\u00e1n. A f\u00e1jl\u00e1tad\u00e1snak k\u00e9t id\u0151pontja van: a kezd\u0151 \u00e9s a befejez\u0151 id\u0151. <\/p>\n<p><\/p>\n<p>A napl\u00f3ban a f\u00e1jlverzi\u00f3 el\u0151tt n\u00e9zem az esem\u00e9nyeket, vagyis keresem az okokat, hogy mi\u00e9rt t\u00f6rt\u00e9nt a f\u00e1jlverzi\u00f3. <\/p>\n<p><\/p>\n<p>Ez pedig betekint\u00e9st ad abba, hogy mi t\u00f6rt\u00e9nt, \u00e9s hogy mit tehet\u00fcnk a j\u00f6v\u0151ben az\u00e9rt, hogy ilyen k\u00f6r\u00fclm\u00e9nyek ne forduljanak el\u0151 (\u00e9s k\u00f6vetkez\u00e9sk\u00e9ppen ne t\u00f6rt\u00e9njen f\u00e1jlverzi\u00f3).<\/p>\n<p><\/p>\n<p>\u00c9s hova n\u00e9z\u00fcnk \u00e1ltal\u00e1ban? \u00c9n ezt n\u00e9zem:<\/p>\n<p><\/p>\n<ul>\n<li>El\u0151sz\u00f6r is a Patroni napl\u00f3kat. <\/li>\n<li>Azt\u00e1n megn\u00e9zem a Postgres napl\u00f3kat, vagy a DCS napl\u00f3kat att\u00f3l f\u00fcgg\u0151en, hogy mi volt a Patroni napl\u00f3kban. <\/li>\n<li>A rendszernapl\u00f3k n\u00e9ha szint\u00e9n adnak betekint\u00e9st abba, hogy mi okozta a f\u00e1jlverzi\u00f3t. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni Hiba T\u00f6rt\u00e9netek vagy Hogyan \u00fcsse le PostgreSQL klaszter\u00e9t. Alexei Leszovszkij\" src=\"\/wp-content\/uploads\/2020\/07\/a53618e366020e1a550d852fc308c188.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Mit gondolok a Patronir\u00f3l? Nagyon j\u00f3l gondolkodom a Patronir\u00f3l. Szerintem ez a legjobb dolog, ami ma l\u00e9tezik. Sok m\u00e1s term\u00e9ket ismerek. Ez a Stolon, Repmgr, Pg_auto_failover, PAF. 4 eszk\u00f6z. Mindet kipr\u00f3b\u00e1ltam. A Patroni tetszett a legjobban. <\/p>\n<p><\/p>\n<p>Ha megk\u00e9rdezn\u00e9nek: \"Aj\u00e1nlom-e a Patronit?\", azt mondan\u00e1m, hogy igen, mivel a Patroni a kedvencem. \u00c9s \u00fagy \u00e9rzem, megtanultam kezelni. <\/p>\n<p><\/p>\n<p>Ha \u00e9rdeklik az egy\u00e9b probl\u00e9m\u00e1k a Patronival kapcsolatban, a m\u00e1r eml\u00edtett probl\u00e9m\u00e1kon k\u00edv\u00fcl, mindig elmehet a <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/zalando\/patroni\/issues\/\">probl\u00e9m\u00e1k<\/a><\/noindex> GitHub oldal\u00e1ra. Ott sok k\u00fcl\u00f6nb\u00f6z\u0151 t\u00f6rt\u00e9netet tal\u00e1l, \u00e9s sok \u00e9rdekes probl\u00e9m\u00e1t vitatnak meg. V\u00e9g\u00fcl p\u00e1r hib\u00e1t r\u00f6gz\u00edtettek \u00e9s megoldottak, teh\u00e1t \u00e9rdekes olvasm\u00e1ny. <\/p>\n<p><\/p>\n<p>Ott \u00e9rdekes t\u00f6rt\u00e9netek vannak arr\u00f3l, hogyan l\u0151hetnek magukra az emberek. Nagyon tanuls\u00e1gos. Olvasod \u00e9s meg\u00e9rted, hogy ezt nem szabad csin\u00e1lni. Pipa be. <\/p>\n<p><\/p>\n<p>Szeretn\u00e9m megk\u00f6sz\u00f6nni a Zalando c\u00e9gnek, hogy fejlesztik ezt a projektet, k\u00fcl\u00f6n\u00f6sen Alexandr Kuku\u0161kinak \u00e9s Aleksey Klyukinnek. Aleksey Klyukin \u2013 \u0151 az egyik t\u00e1rsszerz\u0151, m\u00e1r nem dolgozik a Zalandon\u00e1l, de \u0151k ketten kezdt\u00e9k el ezt a term\u00e9ket. <\/p>\n<p><\/p>\n<p>\u00dagy v\u00e9lem, hogy a Patroni egy nagyon klassz dolog. \u00d6r\u00fcl\u00f6k, hogy l\u00e9tezik, \u00e9rdekes vele dolgozni. Nagy k\u00f6sz\u00f6net minden k\u00f6zrem\u0171k\u00f6d\u0151nek, akik jav\u00edt\u00e1sokat \u00edrnak a Patronihoz. Rem\u00e9lem, hogy a Patroni id\u0151vel egyre \u00e9rettebb\u00e9, klasszabb\u00e1 \u00e9s m\u0171k\u00f6d\u0151k\u00e9pesebb\u00e9 v\u00e1lik. Jelenleg is m\u0171k\u00f6d\u0151k\u00e9pes, de rem\u00e9lem, hogy m\u00e9g jobb lesz. Teh\u00e1t ha tervezed a Patroni haszn\u00e1lat\u00e1t, ne f\u00e9lj. Ez egy j\u00f3 megold\u00e1s, implement\u00e1lhat\u00f3 \u00e9s haszn\u00e1lhat\u00f3. <\/p>\n<p><\/p>\n<p>Ezzel v\u00e9ge. Ha vannak k\u00e9rd\u00e9seid, tedd fel \u0151ket.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni Hiba T\u00f6rt\u00e9netek vagy Hogyan \u00fcsse le PostgreSQL klaszter\u00e9t. Alexei Leszovszkij\" src=\"\/wp-content\/uploads\/2020\/07\/85c2fef2455999b48413c9fc3b235ed6.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>K\u00e9rd\u00e9sek<\/p>\n<p><\/p>\n<p><em>K\u00f6sz\u00f6n\u00f6m a bemutat\u00f3t! Ha a f\u00e1jlverzi\u00f3 ut\u00e1n m\u00e9g mindig nagyon figyelmesen kell n\u00e9zn\u00fcnk, akkor mi\u00e9rt van sz\u00fcks\u00e9g\u00fcnk automatikus f\u00e1jlverzi\u00f3ra?<\/em> <\/p>\n<p><\/p>\n<p>Mert, hogy ez egy \u00faj dolog. Csak egy \u00e9ve dolgozunk vele. Jobb el\u0151vigy\u00e1zatosnak lenni. Szeretn\u00e9nk bej\u00f6nni \u00e9s megn\u00e9zni, hogy minden val\u00f3ban \u00fagy m\u0171k\u00f6dik, ahogy kell. Ez egy feln\u0151tt szint\u0171 bizalmatlans\u00e1g \u2013 jobb \u00fajraellen\u0151rizni \u00e9s megn\u00e9zni. <\/p>\n<p><\/p>\n<p><em>P\u00e9ld\u00e1ul reggel bej\u00f6tt\u00fcnk \u00e9s megn\u00e9zt\u00fck, ugye?<\/em><\/p>\n<p><\/p>\n<p>Nem reggel, \u00e1ltal\u00e1ban az auto-failoverr\u0151l szinte azonnal \u00e9rtes\u00fcl\u00fcnk. \u00c9rtes\u00edt\u00e9seket kapunk, l\u00e1tjuk, hogy bek\u00f6vetkezett az auto-failover. Szinte azonnal bel\u00e9p\u00fcnk \u00e9s megn\u00e9zz\u00fck. De az \u00f6sszes ellen\u0151rz\u00e9st a monitoroz\u00e1s szintj\u00e9re kell emelni. Ha a Patroni-t REST API-n kereszt\u00fcl h\u00edvjuk, van history. A history alapj\u00e1n megn\u00e9zhetj\u00fck az id\u0151b\u00e9lyegeket, mikor t\u00f6rt\u00e9nt a failover. Ebb\u0151l lehet monitoroz\u00e1st v\u00e9gezni. A history-t n\u00e9zve azt is megn\u00e9zhetj\u00fck, h\u00e1ny esem\u00e9ny t\u00f6rt\u00e9nt. Ha t\u00f6bb esem\u00e9ny\u00fcnk lett, az azt jelenti, hogy auto-failover t\u00f6rt\u00e9nt. Akkor \u00e9rdemes megn\u00e9zni. Vagy a monitoroz\u00e1sunk automatikusan ellen\u0151rizte, hogy minden replik\u00e1nk rendben van, nincs k\u00e9sleked\u00e9s, \u00e9s minden j\u00f3l m\u0171k\u00f6dik. <\/p>\n<p><\/p>\n<p><em>K\u00f6sz\u00f6n\u00f6m!<\/em><\/p>\n<p><\/p>\n<p><em>Nagyon k\u00f6sz\u00f6n\u00f6m a nagyszer\u0171 besz\u00e1mol\u00f3t! Ha a DCS klasztert elmozd\u00edtjuk a Postgres klasztert\u0151l, akkor ezt a klasztert is id\u0151nk\u00e9nt karban kell tartani? Milyen bev\u00e1lt gyakorlatok vannak abban, hogy a DCS klaszter egyes r\u00e9szeit ki kell kapcsolni, mit kell tenni vel\u00fck stb.? Hogyan m\u0171k\u00f6dik k\u00f6zben az eg\u00e9sz strukt\u00fara? \u00c9s ezeket a dolgokat hogyan lehet megcsin\u00e1lni?<\/em><\/p>\n<p><\/p>\n<p>Egy c\u00e9gn\u00e9l sz\u00fcks\u00e9g volt egy probl\u00e9mamatrix k\u00e9sz\u00edt\u00e9s\u00e9re, hogy mi t\u00f6rt\u00e9nik, ha valamelyik vagy t\u00f6bb komponens meghib\u00e1sodik. Ezen a m\u00e1trixon kereszt\u00fcl sorban v\u00e9gigmegy\u00fcnk az \u00f6sszes komponensen \u00e9s forgat\u00f3k\u00f6nyveket k\u00e9sz\u00edt\u00fcnk ezek le\u00e1ll\u00e1sa eset\u00e9re. Ennek megfelel\u0151en minden le\u00e1ll\u00e1si forgat\u00f3k\u00f6nyvh\u00f6z lehet egy cselekv\u00e9si terv a helyre\u00e1ll\u00edt\u00e1sra. A DCS eset\u00e9ben ez a szabv\u00e1nyos infrastrukt\u00fara r\u00e9szek\u00e9nt m\u0171k\u00f6dik. Az adminisztr\u00e1tor adminisztr\u00e1lja, \u00e9s mi m\u00e1r az \u0151 k\u00e9pess\u00e9geire t\u00e1maszkodunk, hogy kijav\u00edtsa ezt v\u00e9szhelyzet eset\u00e9n. Ha a DCS egy\u00e1ltal\u00e1n nem l\u00e9tezik, akkor mi telep\u00edtj\u00fck, de k\u00fcl\u00f6n\u00f6sebben nem figyel\u00fcnk r\u00e1, mert nem vagyunk felel\u0151sek az infrastrukt\u00far\u00e1\u00e9rt, de aj\u00e1nl\u00e1sokat adunk arra, hogyan \u00e9s mit kell monitorozni. <\/p>\n<p><\/p>\n<p><em>Teh\u00e1t j\u00f3l \u00e9rtettem, hogy a Patroni-t ki kell kapcsolni, a failovert ki kell kapcsolni, mindent ki kell kapcsolni, miel\u0151tt b\u00e1rmit csin\u00e1ln\u00e1nk a hostokkal?<\/em><\/p>\n<p><\/p>\n<p>Ez att\u00f3l f\u00fcgg, h\u00e1ny csom\u00f3pont van a DCS klaszterben. Ha sok csom\u00f3pont van, \u00e9s ha csak egy csom\u00f3pontot (replik\u00e1t) \u00e1ll\u00edtunk le, akkor a klaszter meg\u0151rzi a kv\u00f3rumot. \u00cdgy a Patroni m\u0171k\u00f6d\u0151k\u00e9pes marad, \u00e9s semmi nem aktiv\u00e1l\u00f3dik. Ha bonyolultabb m\u0171veleteink vannak, amelyek t\u00f6bb csom\u00f3pontot \u00e9rintenek, \u00e9s azoknak hi\u00e1nya a kv\u00f3rum \u00f6sszeoml\u00e1s\u00e1t okozhatja, akkor igen, tal\u00e1n \u00e9rdemes lenne a Patronit sz\u00fcneteltetni. Van egy megfelel\u0151 parancs \u2013 patronictl pause, patronictl resume. Csak sz\u00fcneteltetj\u00fck, \u00e9s a failover nem aktiv\u00e1l\u00f3dik ez id\u0151 alatt. Karbantart\u00e1st v\u00e9gz\u00fcnk a DCS klaszteren, majd feloldjuk a sz\u00fcnetet, \u00e9s folytatjuk az \u00e9let\u00fcnket.<\/p>\n<p><\/p>\n<p><em>K\u00f6sz\u00f6n\u00f6m sz\u00e9pen!<\/em><\/p>\n<p><\/p>\n<p><em>Nagy k\u00f6sz\u00f6net a bemutat\u00f3\u00e9rt! Hogyan viszonyul a term\u00e9kcsapat ahhoz, hogy adatok veszhetnek el?<\/em> <\/p>\n<p><\/p>\n<p>A term\u00e9kcsapatokat nem \u00e9rdekli, de a csapatvezet\u0151k agg\u00f3dnak. <\/p>\n<p><\/p>\n<p><em>Milyen garanci\u00e1k vannak?<\/em><\/p>\n<p><\/p>\n<p>A garanci\u00e1kkal nagyon neh\u00e9z. Van egy el\u0151ad\u00e1s Alekszandr Kukuskin \u201eHogyan sz\u00e1m\u00edtsuk ki az RPO-t \u00e9s az RTO-t\u201d, teh\u00e1t a helyre\u00e1ll\u00edt\u00e1si id\u0151t \u00e9s azt, hogy mennyi adatot vesz\u00edthet\u00fcnk el. Azt hiszem, meg kell tal\u00e1lni ezeket a di\u00e1kat \u00e9s tanulm\u00e1nyozni \u0151ket. Amennyire eml\u00e9kszem, konkr\u00e9t l\u00e9p\u00e9sek vannak arra, hogyan kell ezeket a dolgokat kisz\u00e1m\u00edtani. Mennyi tranzakci\u00f3t vesz\u00edthet\u00fcnk el, mennyi adatot vesz\u00edthet\u00fcnk el. Alternat\u00edvak\u00e9nt szinkron replik\u00e1ci\u00f3t is haszn\u00e1lhatunk a Patroni szintj\u00e9n, de ez k\u00e9ts\u00e9ges: vagy megb\u00edzhat\u00f3s\u00e1got nyer\u00fcnk, vagy sebess\u00e9get vesz\u00edt\u00fcnk. Van szinkron replik\u00e1ci\u00f3, de ez sem garant\u00e1lja a 100%-os adatv\u00e9delmet.<\/p>\n<p><\/p>\n<p><em>Aleksey, k\u00f6sz\u00f6n\u00f6m a kiv\u00e1l\u00f3 bemutat\u00f3t! Van tapasztalatotok a Patroni haszn\u00e1lat\u00e1r\u00f3l a nulladik szint\u0171 v\u00e9delemhez? Azaz szinkron standby-val egy\u00fcttesen? Ez az els\u0151 k\u00e9rd\u00e9s. A m\u00e1sodik k\u00e9rd\u00e9s. K\u00fcl\u00f6nb\u00f6z\u0151 megold\u00e1sokat haszn\u00e1ltatok. Mi a Repmgr-t haszn\u00e1ltuk, de automatikus failover n\u00e9lk\u00fcl, \u00e9s most tervez\u00fcnk automatikus failover-t alkalmazni. A Patronit alternat\u00edv megold\u00e1sk\u00e9nt fontolgatjuk. Mit mondhattok a Repmgr-rel val\u00f3 \u00f6sszehasonl\u00edt\u00e1s el\u0151nyeir\u0151l?<\/em><\/p>\n<p><\/p>\n<p>Az els\u0151 k\u00e9rd\u00e9s a szinkron replik\u00e1kr\u00f3l sz\u00f3lt. N\u00e1lunk senki sem haszn\u00e1l szinkron replik\u00e1ci\u00f3t, mert mindenki f\u00e9l t\u0151le (M\u00e1r t\u00f6bb \u00fcgyf\u00e9l haszn\u00e1lja, teljes\u00edtm\u00e9nyprobl\u00e9m\u00e1t alapvet\u0151en nem tapasztaltunk \u2013 <em>A bemutat\u00f3 megjegyz\u00e9se<\/em>). De mi egy szab\u00e1lyt alkottunk, hogy a szinkron replik\u00e1ci\u00f3s klaszterben legal\u00e1bb h\u00e1rom csom\u00f3pontnak kell lennie, mert ha csak k\u00e9t csom\u00f3pont van, \u00e9s a mester vagy a replik\u00e1ci\u00f3 meghib\u00e1sodik, akkor a Patroni az adott csom\u00f3pontot Standalone \u00fczemm\u00f3dba \u00e1ll\u00edtja, hogy az alkalmaz\u00e1s tov\u00e1bbra is m\u0171k\u00f6dhessen. Ebben az esetben van adatveszt\u00e9s kock\u00e1zata.<\/p>\n<p><\/p>\n<p>A m\u00e1sodik k\u00e9rd\u00e9ssel kapcsolatban azt kell mondanom, hogy a Repmgr-t haszn\u00e1ltuk, \u00e9s m\u00e9g mindig haszn\u00e1ljuk n\u00e9h\u00e1ny \u00fcgyf\u00e9ln\u00e9l t\u00f6rt\u00e9neti okokb\u00f3l. Mit is mondhatn\u00e9k? A Patroni-ban az automatikus \u00e1tkapcsol\u00e1s alap\u00e9rtelmezett funkci\u00f3, m\u00edg a Repmgr-ben az automatikus \u00e1tkapcsol\u00e1s egy tov\u00e1bbi funkci\u00f3, amelyet be kell kapcsolni. A Repmgr daemont minden csom\u00f3ponton el kell ind\u00edtani, \u00e9s \u00edgy be\u00e1ll\u00edthatjuk az automatikus \u00e1tkapcsol\u00e1st. <\/p>\n<p><\/p>\n<p>A Repmgr ellen\u0151rzi, hogy \u00e9lnek-e a Postgres csom\u00f3pontok. A Repmgr folyamatok ellen\u0151rzik egym\u00e1s l\u00e9tez\u00e9s\u00e9t, ami nem a leghat\u00e9konyabb megold\u00e1s, mivel bonyolult h\u00e1l\u00f3zati izol\u00e1ci\u00f3s esetek fordulhatnak el\u0151, amelyek sor\u00e1n egy nagy Repmgr klaszter t\u00f6bb kisebb\u00e9 bonthat\u00f3 \u00e9s folytathatja a m\u0171k\u00f6d\u00e9st. R\u00e9g\u00f3ta nem k\u00f6vetem a Repmgr-t, lehet, hogy ezt m\u00e1r jav\u00edtott\u00e1k... vagy tal\u00e1n nem. Viszont az inform\u00e1ci\u00f3k \u00e1llapot\u00e1nak DCS-be t\u00f6rt\u00e9n\u0151 kihelyez\u00e9se, ahogy azt a Stolon \u00e9s a Patroni is teszi, a leg\u00e9letk\u00e9pesebb megold\u00e1s. <\/p>\n<p><\/p>\n<p><em>Alexey, van egy k\u00e9rd\u00e9sem, lehet, hogy kicsit amat\u0151r. Az egyik els\u0151 p\u00e9ld\u00e1ban a DCS-t egy helyi g\u00e9pr\u0151l egy t\u00e1voli csom\u00f3pontra helyezt\u00e9tek. Az \u00e9rthet\u0151, hogy a h\u00e1l\u00f3zatnak megvannak a saj\u00e1t jellemz\u0151i, saj\u00e1t \u00e9lete van. \u00c9s mi t\u00f6rt\u00e9nik, ha valamilyen okb\u00f3l a DCS klaszter el\u00e9rhetetlenn\u00e9 v\u00e1lik? Nem r\u00e9szletezem az okokat, lehet sokf\u00e9le: a h\u00e1l\u00f3zati szakemberek hib\u00e1it\u00f3l kezdve a val\u00f3s probl\u00e9m\u00e1kig.<\/em> <\/p>\n<p><\/p>\n<p>Nem mondtam ki hangosan, de a DCS klaszternek is hibamentesnek kell lennie, teh\u00e1t p\u00e1ratlan sz\u00e1m\u00fa csom\u00f3pontb\u00f3l kell \u00e1llnia, hogy a kv\u00f3rum \u00f6ssze tudjon j\u00f6nni. Mi t\u00f6rt\u00e9nik, ha a DCS klaszter el\u00e9rhetetlenn\u00e9 v\u00e1lik, vagy nem tud \u00f6ssze\u00e1llni a kv\u00f3rum, teh\u00e1t valami h\u00e1l\u00f3zati sz\u00e9tv\u00e1l\u00e1s vagy csom\u00f3pont hib\u00e1ja l\u00e9p fel? Ebben az esetben a Patroni klaszter read only \u00fczemm\u00f3dba v\u00e1lt. A Patroni klaszter nem tudja meghat\u00e1rozni a klaszter \u00e1llapot\u00e1t \u00e9s mit tegyen. Nem tud kapcsolatba l\u00e9pni a DCS-sel, \u00e9s menteni az \u00faj klaszter \u00e1llapot\u00e1t, ez\u00e9rt az eg\u00e9sz klaszter read only \u00fczemm\u00f3dba v\u00e1lt. \u00c9s v\u00e1rja, vagy a kezel\u0151 manu\u00e1lis beavatkoz\u00e1s\u00e1t, vagy hogy a DCS helyre\u00e1lljon.<\/p>\n<p><\/p>\n<p><em>Nagyj\u00e1b\u00f3l v\u00e9ve a DCS nek\u00fcnk ugyanolyan fontos szolg\u00e1ltat\u00e1ss\u00e1 v\u00e1lik, mint mag\u00e1nak az adatb\u00e1zisnak?<\/em><\/p>\n<p><\/p>\n<p>Igen-igen. A modern v\u00e1llalatokban a Service Discovery alapvet\u0151 r\u00e9sze az infrastrukt\u00far\u00e1nak. Az m\u00e9g a database megjelen\u00e9se el\u0151tt bevezet\u00e9sre ker\u00fcl. Mondhatjuk, hogy elind\u00edtottuk az infrastrukt\u00far\u00e1t, fel\u00e1lltunk egy adatk\u00f6zpontban, \u00e9s m\u00e1ris van Service Discovery-nk. Ha ez a Consul, akkor azon DNS is fel\u00e9p\u00edthet\u0151. Ha ez az Etcd, akkor a Kubernetes klaszter egy r\u00e9sze lehet, amelyben m\u00e1r mindent m\u00e1s egy\u00e9b ki\u00e9p\u00edt\u00fcnk. \u00dagy \u00e9rzem, hogy a Service Discovery m\u00e1r nem v\u00e1laszthat\u00f3 el a modern infrastrukt\u00far\u00e1kt\u00f3l. Err\u0151l sokkal kor\u00e1bban kezdenek el gondolkodni, mint az adatb\u00e1zisokr\u00f3l. <\/p>\n<p><\/p>\n<p><em>K\u00f6sz\u00f6n\u00f6m!<\/em><\/p>\n<p>Forr\u00e1s: <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.3 - 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\/hu\/blog\/administrirovanie\/patroni-failure-stories-or-how-to-crash-your-postgresql-cluster-aleksej-lesovskij\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"hu_HU\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\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\/hu\/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\udd47Patroni Hiba T\u00f6rt\u00e9netek vagy Hogyan hozd \u00f6ssze a PostgreSQL klasztered. Alexey Lesovskiy | ProHoster","description":"","canonical_url":"https:\/\/prohoster.info\/hu\/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":"hu_HU","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\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\/hu\/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\/hu\/wp-json\/wp\/v2\/posts\/90103","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/comments?post=90103"}],"version-history":[{"count":1,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts\/90103\/revisions"}],"predecessor-version":[{"id":158759,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts\/90103\/revisions\/158759"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/media\/90104"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/media?parent=90103"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/categories?post=90103"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/tags?post=90103"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}