{"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\/et\/blog\/administrirovanie\/patroni-failure-stories-or-how-to-crash-your-postgresql-cluster-aleksej-lesovskij","title":{"rendered":"Patroni rikke lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Patroni rikke lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/6404cba13214f499d1f347cca0aacbe7.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Patroni peamine eesm\u00e4rk on tagada PostgreSQL-i k\u00f5rge saadavus. Kuid Patroni on vaid mall, mitte valmis t\u00f6\u00f6riist (nagu on ka dokumendis m\u00e4rgitud). Esmapilgul, testlaboratooriumis Patroni seadistades, v\u00f5ime n\u00e4ha, kui imeline see t\u00f6\u00f6riist on ja kui lihtsalt ta meie katseid klastrit purustada k\u00e4sitleb. Kuid praktikas tootmiskeskkonnas ei pruugi k\u00f5ik alati nii kenasti ja elegantselt kulgeda kui testlaboratooriumis.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p><img decoding=\"async\" alt=\"Patroni rikke lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/ff445e6d76a2ad46a232b705e104446f.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>R\u00e4\u00e4gin natuke endast. Alustasin s\u00fcsteemiadministraatorina. Olen t\u00f6\u00f6tanud veebiarenduses. Alates 2014. aastast t\u00f6\u00f6tan Data Egreti juures. Firma tegeleb PostgreSQL-i konsultatsiooniga. Me hooldame just PostgreSQL-i ja t\u00f6\u00f6tame iga p\u00e4ev PostgreSQL-iga, seega on meil erinev kogemus, mis on seotud kasutamisega. <\/p>\n<p><\/p>\n<p>Ja 2018. aasta l\u00f5pus hakkasime tasahilju Patronit kasutama. Oleme kogunud teatud kogemuse. Oleme seda kuidagi diagnoosinud, h\u00e4\u00e4lestanud, j\u00f5udnud oma parimate praktikate juurde. Ja sellest ettekandest r\u00e4\u00e4gin ma.<\/p>\n<p><\/p>\n<p>Peale PostgreSQL-i armastan ma Linuxit. Mulle meeldib seal nokitseda ja uurida, armastan kernide koostamist. Armastan virtualiseerimist, konteinerite, Dockerit, Kuberneteset. See k\u00f5ik huvitab mind, sest see peegeldab vana administraatori harjumusi. Mulle meeldib uurida monitooringute kohta. Ja armastan PostgreSQL-iga seotud administraatoriasju, st replikatsiooni, varundamist. Vabal ajal kirjutan Go-s. Ma ei ole tarkvarainsener, lihtsalt kirjutan Go-s enda jaoks. Ja see toob mulle r\u00f5\u00f5mu. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni rikke lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/02cfd9293af5a8410c91e39afe2c75e6.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<ul>\n<li>Arvan, et paljud teist teavad, et PostgreSQL-is ei ole HA-d (k\u00f5rge saadavus) karbist v\u00e4lja. Et saavutada HA, tuleb midagi installida, seadistada, pingutada ja saavutada see. <\/li>\n<li>On mitu t\u00f6\u00f6riista ja Patroni on \u00fcks neist, mis lahendab HA-d v\u00e4ga h\u00e4sti ja t\u00f5husalt. Kuid kui me k\u00f5ik selle testlaboris \u00fcles seame ja k\u00e4ivitame, saame n\u00e4ha, et see t\u00f6\u00f6tab. Saame tekitada teatud probleeme ja vaadata, kuidas Patroni nendega tegeleb. Ja n\u00e4eme, et k\u00f5ik t\u00f6\u00f6tab suurep\u00e4raselt. <\/li>\n<li>Kuid praktikas oleme kokku puutunud erinevate probleemidega. Nendest probleemidest r\u00e4\u00e4gin ma.<\/li>\n<li>R\u00e4\u00e4gin, kuidas me seda diagnoosisime, mida me reguleerisime \u2013 kas see aitas meid v\u00f5i mitte. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni rikke lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/7126b45b40dd08521e80a3c150382bec.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<ul>\n<li>Ma ei hakka r\u00e4\u00e4kima, kuidas Patronit seadistada, sest seda saab internetist leida, samuti saab vaadata konfiguratsioonifaile, et m\u00f5ista, kuidas see k\u00f5ik t\u00f6\u00f6le pannakse ja seadistatakse. Saate tutvuda skeemidega, arhitektuuridega, leides selle kohta teavet internetist. <\/li>\n<li>Ma ei hakka r\u00e4\u00e4kima teiste kogemustest. R\u00e4\u00e4gin ainult probleemidest, millega meie ise silmitsi seisisime. <\/li>\n<li>Ja ma ei hakka r\u00e4\u00e4kima probleemidest, mis j\u00e4\u00e4vad v\u00e4ljapoole Patronit ja PostgreSQL-i. Kui n\u00e4iteks probleemid, mis on seotud koormuse jaotamisega, kui meie klaster lagunes, siis ma sellest r\u00e4\u00e4kima ei hakka. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni rikke lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/3f8d179e7c78ce83e8842ef5c72fe30d.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ja v\u00e4ike ettekuulutus enne meie ettekande alustamist. <\/p>\n<p><\/p>\n<p>K\u00f5ik need probleemid, millega me silmitsi seisisime, ilmusid meil esimestel 6-7-8 kuudel kasutamise ajal. Aja jooksul j\u00f5udsime oma sisemiste parimate praktikate juurde. Ja probleemid lahendusid. Seet\u00f5ttu esitati ettekande teema kuskil pool aastat tagasi, kui see k\u00f5ik oli meil veel selgelt meeles ja ma m\u00e4letasin seda h\u00e4sti. <\/p>\n<p><\/p>\n<p>Ettekande ettevalmistamise k\u00e4igus vaatasin ma juba vanu postmortem'e, lugesin logisid. Ja osa detaile v\u00f5is olla ununenud, v\u00f5i osa detaile ei pruukinud probleemide arutamisel piisavalt uuritud olla, mist\u00f5ttu v\u00f5ib m\u00f5nes aspektis tunduda, et probleemid on k\u00e4sitletud mittet\u00e4ielikult v\u00f5i et teabe puudus on olemas. Seet\u00f5ttu palun andestage mulle selle hetke p\u00e4rast. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni rikke lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/30d414284a41fcbc3bf417c9da28ca52.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Mis on Patroni?<\/p>\n<p><\/p>\n<ul>\n<li>See on Mall HA loomiseks. Nii on dokumentatsioonis kirjutatud. Minu arvates on see v\u00e4ga \u00f5ige t\u00e4psustus. Patroni ei ole h\u00f5bedane kuul, mis lahendab k\u00f5ik teie probleemid, st tuleb pingutada, et see hakkaks toimima ja kasu tooma. <\/li>\n<li>See on agentteenus, mis installitakse igasse teenusesse, kus on andmebaas, ja mis on omamoodi init-s\u00fcsteem teie Postgresi jaoks. See k\u00e4ivitab Postgresi, peatab, taask\u00e4ivitab, muudab konfiguratsiooni ja muudab teie kasti topoloogiat. <\/li>\n<li>Seega, et salvestada klastriseisundit, selle praegust esitamist, nagu see v\u00e4lja n\u00e4eb, on vaja mingisugust salvestusruumi. Ja sellega seoses on Patroni valinud l\u00e4henemise, mille kohaselt hoiab staatust v\u00e4lises s\u00fcsteemis. See on jaotatud konfiguratsioonihalduse s\u00fcsteem. Need v\u00f5ivad olla Etcd, Consul, ZooKeeper v\u00f5i Kubernetes'i Etcd, st m\u00f5ni neist variantidest. <\/li>\n<li>\u00dcks Patroni erip\u00e4radest on see, et saate automaatse failivahetuse otse karbist, kui see on seadistatud. Kui v\u00f5rrelda Repmgr-i, siis seal kuulub failivahetus komplekti. Repmgr-i puhul saame switchover, kuid kui soovime automaatset failivahetust, siis tuleb see eraldi seadistada. Patronis on automaatne failivahetus juba olemas otse karbist.<\/li>\n<li>Ja palju on veel teisi asju. N\u00e4iteks konfiguratsioonide haldamine, uute koopiate seadmine, varundamine jne. Kuid see j\u00e4\u00e4b ettekande piiridest v\u00e4lja, sellest ma r\u00e4\u00e4kima ei hakka. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni rikke lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/fed0f1ce931df99ca76ae1116f8098cc.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ja v\u00e4ike kokkuv\u00f5te \u2013 Patroni peamine \u00fclesanne on teha automaatne failivahetus h\u00e4sti ja usaldusv\u00e4\u00e4rselt, et meie klaster j\u00e4\u00e4ks toimivaks ja rakendus ei m\u00e4rkaks klastritopoloogia muutusi. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni rikke lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/fac52620957efa47ced330e7cc8084e0.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Aga kui hakkame Patronit kasutama, muutub meie s\u00fcsteem veidi keerulisemaks. Kui varem oli meil Postgres, siis Patroni kasutades saame ise Patroni, saame DCS-i, kus salvestatakse olek. Ja k\u00f5ik see peab kuidagi t\u00f6\u00f6tama. Nii et mis v\u00f5ib katki minna?<\/p>\n<p><\/p>\n<p>V\u00f5ib minna katki:<\/p>\n<p><\/p>\n<ul>\n<li>V\u00f5ib minna katki Postgres. See v\u00f5ib olla peamine v\u00f5i koopia, \u00fcks neist v\u00f5ib eba\u00f5nnestuda. <\/li>\n<li>V\u00f5ib minna katki ka ise Patroni. <\/li>\n<li>V\u00f5ib minna katki DCS, kus salvestatakse olek.<\/li>\n<li>Ja v\u00f5ib minna katki v\u00f5rk. <\/li>\n<\/ul>\n<p><\/p>\n<p>K\u00f5iki neid punkte k\u00e4sitlen ettekandes. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni rikke lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/1aeaf46d37bf1935b514b0581e0dbd0b.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>K\u00e4sitlen juhtumeid nende keerukuse j\u00e4rgi, mitte selliselt, et juhtum h\u00f5lmab palju komponente. Vaid subjektiivsete tunnete j\u00e4rgi, et see juhtum oli minu jaoks keeruline, seda oli raske anal\u00fc\u00fcsida... ja vastupidi, m\u00f5ni juhtum oli lihtne ja seda oli kergem anal\u00fc\u00fcsida. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni rikke lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/65b0c98bf2284610e955ced5eb998f39.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ja esimene juhtum on k\u00f5ige lihtsam. See on juhtum, kui v\u00f5tsime andmebaasi klastrisse ja k\u00e4ivitasime samas klastris DCS-i salvestuse. See on k\u00f5ige levinum viga. See on arhitektuuri konstrueerimise viga, st erinevate komponentide \u00fchendamine \u00fchte kohta. <\/p>\n<p><\/p>\n<p>Nii, failivahetus toimus, l\u00e4hme uurima, mis juhtus. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni rikke lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/244b69d623fe2205c2d9ed2aa4620067.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ja siin meid huvitab, millal failivahetus toimus. St meid huvitatakse see hetk, mil klastris toimus oleku muutus. <\/p>\n<p><\/p>\n<p>Aga failivahetus ei toimu alati hetkega, st see ei v\u00f5ta mingit kindlat aega, see v\u00f5ib venida. See v\u00f5ib kesta pikalt.<\/p>\n<p><\/p>\n<p>Seet\u00f5ttu on tal algus- ja l\u00f5puajad, st tegu on pikaajalise s\u00fcndmusega. Jagame k\u00f5ik s\u00fcndmused kolmeks ajavahemikuks: meil on aeg enne failimist, failimise ajal ja p\u00e4rast failimist. Ootame, et vaatame k\u00f5iki s\u00fcndmusi selle ajakava raames. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni rikke lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/a0ed61afe55d1a157147e0d80b17e5d1.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ja esimesena, kui failimine toimus, otsime p\u00f5hjust, mis juhtus, mis viis failimiseni. <\/p>\n<p><\/p>\n<p>Kui vaatame logisid, siis need on klassikalised Patroni logid. Need teavitavad meid, et serverist on saanud master ja masteri roll on l\u00e4inud sellele s\u00f5lmele. Siin on see esile t\u00f5stetud. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni rikke lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/9998c69f7d0d4358b277f4e0e7b4350f.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Edasi peame m\u00f5istma, miks failimine juhtus, st millised s\u00fcndmused viisid masteri rolli \u00fcleminekuni \u00fchest s\u00f5lmest teise. Antud juhul on k\u00f5ik lihtne. Meil on hoidlaga suhtlemisel t\u00f5rge. Master m\u00f5istis, et ei saa t\u00f6\u00f6tada DCS-iga, st ilmnes probleem suhtlemisel. Ja ta \u00fctleb, et ei saa enam master olla ja loobub oma volitustest. See rida \"demoted self\" \u00fctleb just sellest. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni rikke lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/4a8eca27689546b4b0fc3c666a3c37c4.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kui vaatame s\u00fcndmusi, mis eelnesid failimisele, n\u00e4eme seal neid p\u00f5hjuseid, mis tekitasid probleeme masteri edasises t\u00f6\u00f6s. <\/p>\n<p><\/p>\n<p>Kui vaatame Patroni logisid, siis n\u00e4eme, et meil on palju erinevaid vigu, ajapiiranguid, st Patroni agent ei saa t\u00f6\u00f6tada DCS-iga. Antud juhul on see Consul agent, kellega suheldakse pordi 8500 kaudu. <\/p>\n<p><\/p>\n<p>Probleem seisneb selles, et Patroni ja andmebaas on k\u00e4ivitatud samal hostil. Ja samal s\u00f5lmel olid k\u00e4ivitatud Consul-serverid. Koormuse tekitamine serveris l\u00f5i probleeme ka <a class=\"wpil_keyword_link\" href=\"https:\/\/prohoster.info\/et\/server\/\"   title=\"serverid\" data-wpil-keyword-link=\"linked\"  data-wpil-monitor-id=\"1515\">serverid<\/a> Consuliga. Nad ei suutnud normaalselt suhelda. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni rikke lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/0d8dba6641809560e6b32825d481e30b.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>M\u00f5ne aja p\u00e4rast, kui koormus taandus, suutis meie Patroni taas agentidega suhelda. Normaalsed t\u00f6\u00f6d j\u00e4tkusid. Ja sama server Pgdb-2 sai j\u00e4lle masteriks. St toimus v\u00e4ike flip, mille t\u00f5ttu s\u00f5lm loobus masteri volitustest ja v\u00f5ttis need hiljem taas \u00fcle, st k\u00f5ik naasis oma endisse olekusse. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni rikke lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/131b93e0bd83099e1b99b53742419e13.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Seda v\u00f5ib k\u00e4sitleda kui vale alarmi, v\u00f5i v\u00f5ime vaadata, et Patroni tegi k\u00f5ik \u00f5igesti. St ta m\u00f5istis, et ei saa toetada klastriseisundit ja loobus oma volitustest.<\/p>\n<p><\/p>\n<p>Siin tekkis probleem seet\u00f5ttu, et Consul-serverid asuvad samas riistvaras, kus ka andmebaasid. Seet\u00f5ttu m\u00f5jutab iga koormus \u2013 olgu see siis ketaste v\u00f5i protsessorite koormus \u2013 ka suhtlemist Consul klastriga.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni rikke lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/142c7cf839c8da078451f7ba9d5499e5.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ja me otsustasime, et need ei peaks koos olema, seega eraldasime Consulile eraldi klastri. Patroni t\u00f6\u00f6tas juba eraldi Consul&#8217;iga, st oli eraldi Postgresi klaster ja eraldi Consuli klaster. See on p\u00f5hijuhend, kuidas k\u00f5ik need asjad laiali viia ja hoida, et need koos ei elaks. <\/p>\n<p><\/p>\n<p>V\u00f5imalusena v\u00f5ib katsetada ttl, loop_wait, retry_timeout parameetrite seadistamist, ehk proovida nende parameetrite suurendamisega taluda l\u00fchiajalisi koormuse tippe. Kuid see ei ole k\u00f5ige sobivam lahendus, kuna need koormused v\u00f5ivad kesta pikka aega. Ja seega \u00fcletame lihtsalt nende parameetrite limiidid. See ei pruugi olla k\u00f5ige t\u00f5husam lahendus. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni rikke lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/c51f35dcd88b1c792acec231c0c6c66c.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Esimene probleem, nagu te m\u00f5istate, on lihtne. V\u00f5tsime DCS-i ja panime selle koos andmebaasiga, mille tulemusena tekkis probleem. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni rikke lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/cc2a98d9790441577fb4080406cbc53f.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Teine probleem sarnaneb esimesega. See on sarnane selle poolest, et meil on j\u00e4lle DCS-iga suhtlemise probleemid.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni rikke lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/e5c01b105adca48cc620085db8dd2d2b.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kui vaatame logisid, n\u00e4eme, et meil on j\u00e4lle suhtlusviga. Patroni \u00fctleb, et ei saa suhelda DCS-iga, seet\u00f5ttu l\u00e4heb aktiivne master repliigi re\u017eiimi.<\/p>\n<p><\/p>\n<p>Vana master muutub replikaks, siin teeb Patroni k\u00f5ike nagu peab. Ta k\u00e4ivitab pg_rewind, et p\u00f6\u00f6rata tehingulog ja seej\u00e4rel \u00fchenduda uue masteriga ning j\u00e4rele j\u00f5uda uuele masterile. Patroni k\u00e4itub siin nagu talle kohane. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni rikke lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/29255f4790abb15b64dbf9ee0b41c7fc.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Peame leidma selle koha, mis eelnes failiruumi probleemile, st need vead, mis p\u00f5hjustasid failiruumi tekkimise. Sel juhul on logide anal\u00fc\u00fcsimine Patroniga \u00fcsna mugav. Ta kirjutab teatava aja jooksul samu s\u00f5numeid. Kui hakkame logisid kiiresti kerima, n\u00e4eme, et logid on muutunud, mis t\u00e4hendab, et mingid probleemid on alanud. Me naaseme kiiresti sellele kohale ja vaatame, mis toimub. <\/p>\n<p><\/p>\n<p>Normaalsetes olukordades n\u00e4evad logid v\u00e4lja umbes nii. Kontrollitakse lukustuse omanikku. Ja kui omanik, n\u00e4iteks, on muutunud, v\u00f5ivad tekkida mingid s\u00fcndmused, millele Patroni peab reageerima. Kuid antud juhul on meil k\u00f5ik korras. Otsime seda hetke, mil vead algasid. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni rikke lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/f48ebd22a405f5b2900621451c68f543.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ja kui me kerime tagasi sinna, kus vead hakkasid ilmuma, n\u00e4eme, et meil on toimunud autofailover. Ja kuna meie vead olid seotud DCS-iga ning meie puhul kasutasime Consulit, vaatame ka Consuli logisid, mis seal toimus. <\/p>\n<p><\/p>\n<p>Umbes v\u00f5rreldes failoveri aega ja Consuli logis olevat aega, n\u00e4eme, et meie Consuli klastri naabrid hakkasid kahtlema teiste Consuli klastri liikmete olemasolus.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni rikke lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/63b02ac5b4f5a34a2822f1eee2b1f2f8.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ja kui vaadata ka teiste Consuli agentide logisid, siis seal on ka n\u00e4ha, et toimub mingi v\u00f5rgu kokkuvarisemine. Ja k\u00f5ik Consuli klastri liikmed kahtlevad teineteise olemasolus. See oli t\u00f5ukeks failoverile. <\/p>\n<p><\/p>\n<p>Kui vaadata, mis enne neid vigu juhtus, siis v\u00f5ib n\u00e4ha, et seal on igasuguseid vigu, n\u00e4iteks t\u00e4htaeg, RPC vigastus, s.t. ilmselgelt on mingi probleem Consuli klastri liikmete vahelises suhtluses. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni rikke lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/b15c912f2afb49d9d85e7bb9361ce449.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Lihtsaim vastus on v\u00f5rgu parandamine. Kuid mulle on kergem sellest r\u00e4\u00e4kida seistes poodiumil. Kuid tingimused on sellised, et kliendil ei pruugi alati olla v\u00f5imalik v\u00f5rku parandada. Ta v\u00f5ib elada andmekeskuses ja tal ei pruugi olla v\u00f5imalusi v\u00f5rgu parandamiseks v\u00f5i seadmetele m\u00f5ju avaldamiseks. Seet\u00f5ttu on vajalikud muud alternatiivid. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni rikke lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/1dbdb66233acc3bc321a30a1c5fe14f9.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Alternatiive on:<\/p>\n<p><\/p>\n<ul>\n<li>Lihtsaim lahendus, mis on kirjutatud, minu arvates isegi dokumentatsioonis, on v\u00e4lja l\u00fclitada Consuli kontrollid, s.t. edastada lihtsalt t\u00fchi massiiv. Sellega \u00fctleme Consuli agendile, et mitte kasutada mingeid kontrolle. Need kontrollid v\u00f5imaldavad meil ignoreerida v\u00f5rgu torme ja mitte algatada failoverit. <\/li>\n<li>Teine variant on kontrollida raft_multiplier'i. See on Consuli serveri parameeter. Vaikimisi on see seadistatud v\u00e4\u00e4rtusele 5. See v\u00e4\u00e4rtus on dokumentatsioonis soovitatud staging keskkondade jaoks. Sisuliselt m\u00f5jutab see s\u00f5numite vahetamise sagedust Consuli v\u00f5rgu osaliste vahel. \u00dcldiselt m\u00f5jutab see parameeter teenuste vaheliste s\u00f5numite vahetamise kiirus. Ja tootmisre\u017eiimis on soovitatav seda v\u00e4hendada, et s\u00f5lmed vahetaksid s\u00f5numeid sagedamini. <\/li>\n<li>Teine variant, mida hakkasime kasutama, on Consul-protsesside prioriteedi suurendamine teiste protsesside seas operatsioonis\u00fcsteemi protsessoriplaneerijas. On olemas parameeter \u201enice\u201c, mis m\u00e4\u00e4rab protsesside prioriteedi, mida OS protsessoriplaneerija arvesse v\u00f5tab. Me v\u00e4hendasime Consul-agendi nice v\u00e4\u00e4rtust, st suurendasime prioriteeti, et operatsioonis\u00fcsteem annaks Consul-protsessidele rohkem t\u00f6\u00f6aega ja v\u00f5imaluse oma koodi t\u00e4ita. Meie puhul lahendas see meie probleemi. <\/li>\n<li>Teine variant on mitte kasutada Consulit. Mul on s\u00f5ber, kes on suur Etcd-i toetaja. Ja me vaidleme pidevalt, kumb on parem, Etcd v\u00f5i Consul. Aga tavaliselt lepime kokku, et Consulil on agent, mis peab olema igas andmebaasi s\u00f5lmes t\u00f6\u00f6tamas. See t\u00e4hendab, et Patroni suhtleb Consul-klastriga l\u00e4bi selle agendi. Ja see agent muutub kitsaskohaks. Kui agendiga juhtub midagi, ei suuda Patroni enam Consul-klastriga t\u00f6\u00f6tada. Ja see on probleem. Etcd puhul ei ole mingit agenti. Patroni saab otse t\u00f6\u00f6tada Etcd-serverite nimekirjaga ja nendega suhelda. Nii et kui teie ettev\u00f5ttes kasutatakse Etcd-d, siis on see ilmselt parem valik kui Consul. Kuid meie klientide puhul oleme alati piiratud sellega, mida klient on valinud ja kasutab. Meie peaaegu k\u00f5ikidel klientidel on Consul. <\/li>\n<li>Ja viimane punkt on parameetrite v\u00e4\u00e4rtuste \u00fclevaatamine. Saame neid parameetreid t\u00f5sta, lootes, et meie l\u00fchiajalised v\u00f5rguprobleemid on l\u00fchikesed ja ei \u00fcleta nende parameetrite vahemikku. Nii saame v\u00e4hendada Patroni agressiivsust automaatfaili tegemisel, kui tekivad mingid v\u00f5rguprobleemid.<\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni rikke lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/f0043050da20f6368dabf66ec9a4eade.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ma arvan, et paljud, kes kasutavad Patronit, tunnevad seda k\u00e4sku. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni rikke lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/9f78f59dab166e47ac78436802156d04.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>See k\u00e4sk n\u00e4itab klasteri praegust seisundit. Esmapilgul v\u00f5ib see olukord tunduda normaalne. Meil on master, meil on koopia, ja replikatsiooni viivitus puudub. Kuid see olukord on normaalne just seni, kuni me ei tea, et selles klastris peaks olema kolm s\u00f5lme, mitte kaks. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni rikke lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/a39c891f8620ba210b6bce0727e0fa8b.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Seet\u00f5ttu toimus autofailover. Ja p\u00e4rast seda autofailoverit kadus meil replika. Peame v\u00e4lja selgitama, miks see kadus ja taastama selle tagasi. Ja j\u00e4lle vaatame logisid, et n\u00e4ha, miks meil autofailover juhtus.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni rikke lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/e6e67d46cb20c8d7e58c7505157f68e1.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Sel juhul sai teine replika meistriks. Siin on k\u00f5ik korras. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni rikke lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/b86ccea68b0c6013a23bbd2804e48320.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ja peame vaatama juba replika peale, mis katkeb ja mis ei ole klastris. Avame Patroni logid ja vaatame, et meil tekkis klastriga \u00fchendamisel probleem faasis pg_rewind. Klastrisse \u00fchendamiseks tuleb taastada tehingute logi, k\u00fcsida vajalik tehingute logi meistrilt ja selle p\u00f5hjal j\u00f5uda meistrini tagasi. <\/p>\n<p><\/p>\n<p>Sel juhul meil tehingute logi ei ole ja replika ei saa k\u00e4ivituda. Seet\u00f5ttu peatame Postgresi veaga. Ja seet\u00f5ttu pole seda klastris. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni rikke lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/dadbd44b766674b719d85781ef7f0caa.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Peame aru saama, miks seda klastris ei ole ja miks logisid ei olnud. L\u00e4heme uue meistri juurde ja vaatame, mis tal logides on. Selgub, et kui tehti pg_rewind, toimus checkpoint. Ja osa vanadest tehingute logidest lihtsalt nimetati \u00fcmber. Kui vana meister \u00fcritas uuele meistrile \u00fchenduda ja neid logisid k\u00fcsida, olid need juba \u00fcmber nimetatud, neid ei olnud lihtsalt.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni rikke lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/f2d5c37324f9436b2bdad1290612d86f.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>V\u00f5rdlesin ajastamisi, millal need s\u00fcndmused juhtusid. Ja seal oli vahe vaid 150 millisekundit, st checkpoint l\u00f5ppes 369 millisekundiga, WAL-segmendid olid nimetatud \u00fcmber. Ja t\u00e4pselt 517 millisekundi p\u00e4rast, 150 millisekundi m\u00f6\u00f6dudes, k\u00e4ivitati rewind vanal replikal. St 150 millisekundit oli piisav, et replika ei saaks \u00fchendust ja t\u00f6\u00f6tada. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni rikke lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/99dd80deb8466bfc3aff568456e07102.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Millised on variandid?<\/p>\n<p><\/p>\n<p>Kasutame algselt replikatsiooni kohti. Me arvasime, et see on hea. Kuigi esimesel kasutamisetapil me kohti v\u00e4lja l\u00fclitasime. Me arvasime, et kui kohad koguvad palju WAL-segmente, v\u00f5ime meistri kukutada. Ta kukub. Oleme paar p\u00e4eva ilmas kohtadeta vaeva n\u00e4inud. Ja m\u00f5istsime, et kohad on vajalikud, me t\u00f5ime kohad tagasi. <\/p>\n<p><\/p>\n<p>Aga siin on probleem, et kui meister l\u00e4heb replika juurde, eemaldab ta slotid ja koos slotidega eemaldab WAL-segmendid. Ja et v\u00e4ltida selle probleemi ilmnemist, otsustasime t\u00f5sta wal_keep_segments parameetri. See on vaikimisi 8 segmenti. Me t\u00f5stsime selle 1000-le ja vaatasime, kui palju meil vaba ruumi on. Nii et me andsime wal_keep_segments'ile 16 gigabaiti. St. vahetamise ajal on meil k\u00f5igil s\u00f5lmedel alati 16 gigabaiti tehinguajalugu varuks.<\/p>\n<p><\/p>\n<p>Ja lisaks - see on endiselt aktuaalne pikaajaliste hooldust\u00f6\u00f6de jaoks. Oletame, et peame v\u00e4rskendama \u00fchte replika. Ja me tahame selle v\u00e4lja l\u00fclitada. Peame v\u00e4rskendama tarkvara, v\u00f5ib-olla operatsioonis\u00fcsteemi, midagi veel. Ja kui me l\u00fclitame replika v\u00e4lja, eemaldatakse selle replika jaoks ka slot. Ja kui me kasutame madalat wal_keep_segments'i, siis pikkade replika puudumise korral m\u00e4ngitakse tehinguajalugu l\u00e4bi. Me k\u00e4ivitame replika, see k\u00fcsib neid tehinguajalugu, kus ta peatub, kuid meistril v\u00f5ib neid seal mitte olla. Ja replika ei saa ka \u00fchendust luua. Seet\u00f5ttu hoiame meil palju ajalugu.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni rikke lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/dad55c828128ce92f649a99cc53ce54b.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni rikke lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/63e70f0b098567f3a6d4fd66a0c293bb.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Meil on tootmisandmebaas. Seal t\u00f6\u00f6tavad juba projektid. <\/p>\n<p><\/p>\n<p>Toimus failih\u00e4ire. Me sisenesime ja vaatasime - k\u00f5ik on korras, replikad on kohal, replikatsiooni viivitus puudub. Vigade kohta ajalukes ei ole, k\u00f5ik on korras. <\/p>\n<p><\/p>\n<p>Toote meeskond \u00fctleb, et tundub, et peaks olema mingeid andmeid, kuid me n\u00e4eme neid \u00fches allikas, kuid andmebaasis me ei n\u00e4e. Ja peame aru saama, mis nendega juhtus. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni rikke lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/568ca9aa31680d5e0c9d4ed9693b14e6.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Selge, et pg_rewind on need \u00fcle kirjoitanud. Me saime selle kohe aru, kuid l\u00e4ksime vaatama, mis juhtus. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni rikke lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/a8fee389201d96e81761cd276c5265c3.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Logidest leiame alati, millal toimus failih\u00e4ire, kes sai meistriks ja saame m\u00e4\u00e4rata, kes oli vana meister ja millal ta soovis saada replikaks, st. meil on vaja neid logisid, et v\u00e4lja selgitada, kui palju tehinguajalugu oli kadunud.<\/p>\n<p><\/p>\n<p>Meie vana meister k\u00e4ivitus uuesti. Ja automaatse k\u00e4ivitamise seas oli m\u00e4\u00e4ratud Patroni. Patroni k\u00e4ivitus. J\u00e4rgnevalt k\u00e4ivitas ta Postgresi. T\u00e4psemalt enne Postgres&#8217;i k\u00e4ivitamist ja enne selle replika tegemist k\u00e4ivitas Patroni protsessi pg_rewind. Vastavalt sellele kustutas ta osa tehingulogidest, allutas uued ja \u00fchendus. Siin t\u00f6\u00f6tas Patroni suurep\u00e4raselt, st nii nagu vaja. Meie klaster taastati. Meil oli 3 s\u00f5lme, p\u00e4rast failit\u00f5ket 3 s\u00f5lme \u2013 k\u00f5ik oli suurep\u00e4rane. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni rikke lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/b747a24f53e20ed098c2dc0afc79bead.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Me kaotasime osa andmeid. Ja meil on vaja aru saada, kui palju me kaotasime. Otsime just seda hetke, mil meil toimus rewind. Saame seda leida selliste logikirjete j\u00e4rgi. Rewind k\u00e4ivitati, midagi tehti ja l\u00f5petati.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni rikke lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/5b7bacffb52e3ccd529a3a734c441295.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Peame leidma selle positsiooni tehingulogis, kus vana master peatus. Antud juhul on see see m\u00e4rge. Ja me vajame teist m\u00e4rget, st seda vahet, millega vana master erineb uuest. <\/p>\n<p><\/p>\n<p>V\u00f5tame tavalise pg_wal_lsn_diff ja v\u00f5rdleme neid kahte m\u00e4rget. Antud juhul saame 17 megabaidi. Kas see on palju v\u00f5i v\u00e4he, otsustab iga\u00fcks ise. Sest kellegi jaoks on 17 megabaidi v\u00e4he, kellegi jaoks palju ja vastuv\u00f5etamatu. Siin peab iga\u00fcks isiklikult m\u00e4\u00e4rama vastavalt \u00e4ri vajadustele. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni rikke lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/55335fce85961e159459c38300a0ad12.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Aga mida oleme endale selgeks teinud? <\/p>\n<p><\/p>\n<p>Esiteks peame endale otsustada \u2013 kas me vajame alati p\u00e4rast s\u00fcsteemi taask\u00e4ivitamist Patroni automaatset k\u00e4ivitamist? Sageli on nii, et peame minema vana masteri juurde, vaatama, kui kaugele ta on l\u00e4inud. V\u00f5ib-olla inspekteerima tehingulogide l\u00f5ike, vaata, mis seal toimub. Ja aru saama \u2013 kas saame need andmed kaotada v\u00f5i peame vanat masterit k\u00e4itama standalone-re\u017eiimis, et need andmed v\u00e4lja v\u00f5tta. <\/p>\n<p><\/p>\n<p>Ja alles p\u00e4rast seda peame otsustama, kas saame need andmed k\u00f5rvale j\u00e4tta v\u00f5i saame need taastada, \u00fchendades selle s\u00f5lme meie klastrisse replikana.<\/p>\n<p><\/p>\n<p>Lisaks on olemas parameeter \u201emaximum_lag_on_failover\u201d. Vaikimisi, kui ma ei eksi, on selle parameetri v\u00e4\u00e4rtus 1 megabaidi. <\/p>\n<p><\/p>\n<p>Kuidas see t\u00f6\u00f6tab? Kui meie replika on 1 megabaidi v\u00f5rra andmete replikatsiooni hilinemises, ei v\u00f5ta see replika valimistest osa. Ja kui juhtub failover, vaatab Patroni, millised replikad hilinevad. Kui nad hilinevad suure hulga tehingulogide v\u00f5rra, ei saa nad masteriks saada. See on v\u00e4ga hea kaitsefunktsioon, mis aitab v\u00e4ltida suurte andmekao juhtumeid. <\/p>\n<p><\/p>\n<p>Kuid siin on probleem selles, et klastris Patroni ja DCS replikatsiooni hilinemine uuendatakse kindla intervalliga. Minu m\u00e4letamist m\u00f6\u00f6da on vaikimisi ttl v\u00e4\u00e4rtus 30 sekundit.<\/p>\n<p><\/p>\n<p>Seega v\u00f5ib tekkida olukord, kus DCS-i replikate replikatsioonilagg on \u00fchesugune, kuid tegelikult v\u00f5ib see olla t\u00e4iesti erinev v\u00f5i seda ei pruugi olla \u00fcldse, st see asi ei ole reaalajas. Ja see ei kajasta alati tegelikku pilti. Seega ei tasu keerulist loogikat sellele tuginedes ehitada. <\/p>\n<p><\/p>\n<p>Ja risk kaduda j\u00e4\u00e4b alati. Halvimal juhul on \u00fcks valem, keskmisel juhul aga teine valem. St kui plaanime Patroni rakendamist ja hindame, kui palju andmeid me v\u00f5ime kaotada, peame arvestama nende valemitega ja umbes ette kujutama, kui palju andmeid me v\u00f5ime kaotada. <\/p>\n<p><\/p>\n<p>Ja hea uudis on. Kui vana meister on ette l\u00e4inud, v\u00f5ib ta edasi liikuda teatud taustprotsesside t\u00f5ttu. St kui m\u00f5ni automaatne vakuum oli, kirjutas ta andmed ja salvestas need tehingute ajaloosse. Ja neid andmeid saame me lihtsalt ignorida ja kaotada. Sellega pole probleemi. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni rikke lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/a86e8971ab4ef41b89af9cf0bdf519ba.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Nii n\u00e4evad logid v\u00e4lja, kui on seadistatud maximum_lag_on_failover ja toimus failover ning tuleb valida uus meister. Replika hindab end kui osalemisv\u00f5imetuks valimistel. Ja ta keeldub osalemast liidri valimisv\u00f5istluses. Ja ta ootab, kuni uus meister on valitud, et hiljem tema juurde \u00fchenduda. See on t\u00e4iendav meede andmete kaotuse v\u00e4ltimiseks.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni rikke lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/f760788e5951facdd08b2069037830fa.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni rikke lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/c32f26e7526e1873f3bfd7d3693fcc72.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Siin on meie tootemeeskond kirjutanud, et nende toode kogeb probleeme Postgresiga t\u00f6\u00f6tamisel. Sel ajal ei saa aga meistrisse sisse logida, kuna see pole SSH kaudu k\u00e4ttesaadav. Ja automaatset failoverit samuti ei toimu. <\/p>\n<p><\/p>\n<p>See host saadeti sunniviisiliselt taask\u00e4ivitamisele. Taask\u00e4ivitamise t\u00f5ttu toimus automaatne failover, kuigi oleks olnud v\u00f5imalik teha ka k\u00e4sitsi automaatne failover, nagu ma n\u00fc\u00fcd aru saan. Ja p\u00e4rast taask\u00e4ivitamist hakkame vaatama, mis meie praeguse meistriga juhtus. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni rikke lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/95efb82e0647a396a21683cd53a69547.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Samas teadsime ette, et meil olid probleemid ketastega, st me teadsime juba seire p\u00f5hjal, kus kaevata ja mida otsida. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni rikke lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/367aaab607d833d96a573ddbbbced502.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Hakkasime postgres'i logisse sukelduma ja vaatama, mis seal juhtus. N\u00e4gime commit'e, mis kestavad seal \u00fche, kahe v\u00f5i kolme sekundi, mis pole kindlasti normaalne. N\u00e4gime, et meil k\u00e4ivitub automaatne vakuum v\u00e4ga kaua ja kummaliselt. Ja n\u00e4gime ajutisi faileketastes. St need on k\u00f5ik m\u00e4rk diskide probleemidest. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni rikke lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/7e0cfce7a81901ef9ef736c3fefc8dce.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Me vaatasime s\u00fcsteemi dmesg'i (tuumasaadete logi). Ja n\u00e4gime, et meil on probleeme \u00fche ketasega. K\u00f5vakettas\u00fcsteem koosnes software Raid'ist. Vaatasime \/proc\/mdstat ja n\u00e4gime, et meil puudub \u00fcks ketas. T. e. siin on Raid 8 diskiga, meil puudub \u00fcks. Kui slaidi hoolikalt vaadata, siis v\u00e4ljendis on n\u00e4ha, et meil puudub sde. \u00dctleme nii, et \u00fcks ketas kukkus v\u00e4lja. See k\u00e4ivitas kettaprobleemid, ja rakendused kogesid ka probleeme Postgresi klastriga t\u00f6\u00f6tamisel.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni rikke lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/4b09b3aa761cb504fa79173ef280faac.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ja sel juhul ei aitaks meid Patroni, kuna Patrnoni \u00fclesanne ei ole serveri ja ketas staatuse j\u00e4lgimine. Me peame selliseid olukordi j\u00e4lgima v\u00e4listest monitooringutest. Me lisasime v\u00e4listesse monitooringutesse kettamonitooringu. <\/p>\n<p><\/p>\n<p>Ja oli m\u00f5te - kas aitaks meid fencing v\u00f5i tarkvaraline watchdog? Me m\u00f5tlesime, et see ei aitaks meid, kuna probleemide ajal suhtles Patroni j\u00e4tkuvalt DCS-iga ja ei n\u00e4inud mingeid probleeme. T. e. DCS ja Patroni jaoks oli klaster korras, kuigi tegelikult olid kettaga ja andmebaasi k\u00e4ttesaadavusega probleemid. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni rikke lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/15fdac78535355d4eb889efcc27efc46.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Minu arvates on see \u00fcks kummalisemaid probleeme, mida olen pikalt uurinud, lugenud palju logisid, l\u00e4bi t\u00f6\u00f6tanud ja nimetanud selle klaster-simulaatoriks. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni rikke lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/b5259774931c290eda6673deb14b6c48.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Probleem oli selles, et vana master ei saanud normaalseks replikaks, t. e. Patroni k\u00e4ivitas selle, Patroni n\u00e4itas, et see s\u00f5lm on replikana olemas, kuid samas ei olnud ta normaalne replik. N\u00fc\u00fcd n\u00e4ete, miks. See j\u00e4i mul alles selle probleemi anal\u00fc\u00fcsiga. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni rikke lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/c35a5d102a46764bbf96e5a75ee88171.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ja kuidas k\u00f5ik algas? Algus oli, nagu eelmise probleemi puhul, ketta viivitustega. Meil oli sekundis \u00fcks v\u00f5i kaks commiti. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni rikke lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/435c1b350a89f288e0e10ca9d5a2ec6e.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Oli \u00fchenduse katkestusi, st. kliendid katkestasid. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni rikke lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/920cb1f3f3b40578e15e6ff711e85c50.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Oli erineva raskusastmega blokeeringud. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni rikke lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/285d6292d89b928a85e95602ee57d38a.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ja seega ei olnud ketass\u00fcsteem eriti reageeriv. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni rikke lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/ebe71d49360e7f604ecd6a3c8276cb73.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ja k\u00f5ige salap\u00e4rasem minu jaoks oli see, et tuli kohene shutdown-p\u00e4ring. PostgreSQL-il on kolm v\u00e4ljal\u00fclitusre\u017eiimi:<\/p>\n<p><\/p>\n<ul>\n<li>See on graceful, kui me ootame, et k\u00f5ik kliendid v\u00e4ljuksid ise. <\/li>\n<li>On fast, kui me sunnime kliente v\u00e4lja minema, kuna me plaanime v\u00e4ljal\u00fclitust. <\/li>\n<li>Ja on kohene. Antud juhul ei teata klientidele isegi, et tuleb v\u00e4lja logida, ta lihtsalt sulgub ilma hoiatamata. Ja k\u00f5igile klientidele saadetakse operatsioonis\u00fcsteemi kaudu RST teade (TCP-teade, et \u00fchendus on katkestatud ja kliendil pole enam midagi teha). <\/li>\n<\/ul>\n<p><\/p>\n<p>Kes saatis selle signaali? PostgreSQL-i taustprotsessid ei saada \u00fcksteisele selliseid signaale, st see on kill -9. Nad ei saada \u00fcksteisele selliseid signaale, nad reageerivad ainult sellele, st see on PostgreSQL-i h\u00e4daseade taask\u00e4ivitamiseks. Kes selle saatis, ei tea. <\/p>\n<p><\/p>\n<p>Vaatasin k\u00e4su \u201elast\u201d j\u00e4rgi ja n\u00e4gin \u00fchte inimest, kes logis samuti sellele serverile sisse koos meiega, kuid mul oli piinlik k\u00fcsida. V\u00f5ib-olla oli see kill -9. Oleksin logides n\u00e4inud kill -9, kuna PostgreSQL kirjutab, et sai kill -9, kuid ma ei n\u00e4inud seda logides. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni rikke lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/fe8e844649cea3384ebfde86e36eba44.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Edasi uurides m\u00e4rkasin, et Patroni ei olnud juba kaua aega loginud \u2013 54 sekundit. Ja kui v\u00f5rrelda kahte ajam\u00e4rki, siis siin puudusid s\u00f5numid umbes 54 sekundit. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni rikke lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/ffb1c4db3d7de591d77d56ed2fcc4f2a.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ja selle aja jooksul toimus automaatne failivahetus. Patroni t\u00f6\u00f6tas siin j\u00e4lle suurep\u00e4raselt. Meie vana master oli k\u00e4tkes, midagi juhtus temaga. Ja algasid uue masteri valimised. Siin k\u00f5ik t\u00f6\u00f6tas h\u00e4sti. Meie pgsql01 sai uuest liidriks. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni rikke lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/6b2457653e9f77af44cd64b4aff021a0.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Meil on replikatsioon, mis sai masteriks. Ja on teine replikatsioon. Teise replikatsiooniga olid just probleemid. Ta \u00fcritas \u00fcmber konfigureerida. Nagu ma aru sain, \u00fcritas ta muuta recovery.conf-i, taask\u00e4ivitada PostgreSQL-i ja \u00fchenduda uue masteriga. Iga 10 sekundi j\u00e4rel kirjutab ta s\u00f5numeid, et ta \u00fcritab, aga tal ei \u00f5nnestu. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni rikke lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/381818f189e19c3e1154074b4652f837.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ja nende katsete ajal saab vana master kohe aktiivse sulgemise signaali. Master taask\u00e4ivitub. Ja ka taastumismehhanism peatub, kuna vana master l\u00e4heb taask\u00e4ivitamise re\u017eiimi. St replikatsioon ei saa temaga \u00fchendust, kuna ta on v\u00e4lja l\u00fclitatud. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni rikke lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/d8a8cde925fa8fe601d44ab908ae69dc.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>M\u00f5nes kohas t\u00f6\u00f6tas ta, kuid replikatsioon ei k\u00e4ivitunud. <\/p>\n<p><\/p>\n<p>Mul on ainus h\u00fcpotees, et recovery.conf-is oli vana masteri aadress. Ja kui uus master ilmnes, siis teine replikatsioon \u00fcritas ikka veel \u00fchenduda vana masteriga. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni rikke lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/425ea3af1f1e186f4760e1fb1f5419fa.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kui Patroni k\u00e4ivitati teises replikatsioonis, k\u00e4ivitati s\u00f5lm, kuid ei suutnud replikatsiooniga \u00fchenduda. Ja tekkis replikatsiooni viivitus, mis n\u00e4gi v\u00e4lja umbes nii. St k\u00f5ik kolm s\u00f5lme olid kohal, kuid teine s\u00f5lm j\u00e4i maha. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni rikke lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/f564eacd9944666c9a3f5bea634ede6b.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kui vaadata logisid, mis olid kirjutatud, sai n\u00e4ha, et replikatsioon ei saa k\u00e4ivituda, kuna tehingulood erinevad. Ja need tehingulood, mida master pakub, mis on m\u00e4rgitud recovery.conf-is, ei sobi meie praegusele s\u00f5lmele. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni rikke lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/6b09947d157c9ef0a190da2df2cb5892.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ja siin tegin ma vea. Ma oleks pidanud tulema ja vaatama, mis seal recovery.conf-is on, et kontrollida oma h\u00fcpoteesi, et me \u00fchendame vale masteriga. Aga tol hetkel alles \u00f5ppisin, et see ei tulnud mulle p\u00e4he, v\u00f5i siis n\u00e4gin, et replikatsioon j\u00e4\u00e4b maha ja seda tuleb taastada, st tegin seda kuidagi pealiskaudselt. See oli minu eksimus. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni rikke lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/159f2256fd81428fd0d82a255528887d.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kaksk\u00fcmmend minutit hiljem tuli admin, st ta restartis Patroni repliika peal. Ma juba olin temaga l\u00f5petanud, arvasin, et seda tuleb taastada. Ja m\u00f5tlesin \u2013 restartin Patroni, \u00e4kki \u00f5nnestub midagi head. Taask\u00e4ivitus recovery. Ja andmebaas avanes, ta oli valmis \u00fchendusi vastu v\u00f5tma. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni rikke lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/aeac98750386c8389d39e006a229cc85.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Replikatsioon k\u00e4ivitus. Kuid minuti p\u00e4rast eba\u00f5nnestus see vea t\u00f5ttu, et tehingulood ei sobinud. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni rikke lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/17eaba000a79c80c29d1bc3902de05e6.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>M\u00f5tlesin, et teen veel \u00fche taask\u00e4ivituse. Taask\u00e4ivitasin Patroni veel kord, m\u00e4rkides, et ma ei taask\u00e4ivitanud Postgres't, vaid taask\u00e4ivitasin just Patroni lootuses, et ta imeliselt k\u00e4ivitab andmebaasi. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni rikke lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/a85b38e033c45ad73da317f41e0ef24a.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Replikatsioon k\u00e4ivitus taas, kuid tehingulood olid erinevad, nad ei olnud need, mis olid eelmise k\u00e4ivituse ajal. Replikatsioon seiskus j\u00e4lle. Ja s\u00f5num oli juba veidi erinev. See ei olnud minu jaoks eriti informatiivne. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni rikke lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/fd90d708230bd54af685786c7e361ee1.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ja siis tuli mulle m\u00f5te \u2013 mis siis, kui ma taask\u00e4ivitan Postgres'i, samal ajal teen kohaliku masteriga checkpoint'i, et edastada tehingulood natuke ettepoole, et taastamine algaks teisest punktist? Pluss seal olid ka meie WAL'i varud. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni rikke lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/19e67f95d1a74141a013947c9aa39e38.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Taask\u00e4ivitasin Patroni, tegin paar checkpoint'i masteril, paar restart-pointi repliika peal, kui see avanes. Ja see aitas. Ma m\u00f5tlesin kaua, miks see aitas ja kuidas see t\u00f6\u00f6tas. Ja replikatsioon k\u00e4ivitus. Ja replikatsioon ei katkestanud enam. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni rikke lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/418ca59a681be84f51ed374a73a759c9.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>See probleem on minu jaoks \u00fcks k\u00f5ige salap\u00e4rasemaid, mille \u00fcle ma siiani pean pead murdma, mis seal tegelikult toimus. <\/p>\n<p><\/p>\n<p>Millised on j\u00e4reldused? Patroni v\u00f5ib t\u00f6\u00f6tada nagu ette n\u00e4htud ja ilma vigadeta. Kuid see ei t\u00e4henda, et meil oleks k\u00f5ik korras. Replika v\u00f5ib k\u00e4ivituda, kuid see v\u00f5ib olla poolikult toimivas seisundis ning rakendus ei tohi sellise replikaga t\u00f6\u00f6tada, kuna seal v\u00f5ivad olla vanad andmed. <\/p>\n<p><\/p>\n<p>Ja p\u00e4rast failide \u00fclev\u00f5tmist on alati vaja kontrollida, et meie klaster toimib korralikult, st on vajalik arv replikaid ja replikatsiooni viivitust ei ole.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni rikke lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/aca7047ff33d3efe14071b798b554091.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Probleemide k\u00e4sitlemise k\u00e4igus annan soovitusi. Olen p\u00fc\u00fcdnud need kahel slaidil kokku koondada. T\u00f5en\u00e4oliselt v\u00f5is k\u00f5ik lood kokku panna kaheks slaidiks ja lihtsalt neist r\u00e4\u00e4kida.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni rikke lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/d4ad31b26d83c8846fe4097a11d70849.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kui te kasutate Patronit, peab teil kindlasti olema j\u00e4lgimine. Te peate alati teadma, millal toimus automaatne failide \u00fclev\u00f5tmine, sest kui te ei tea, et see juhtus, siis te ei kontrolli klastrit. See on halb.<\/p>\n<p><\/p>\n<p>P\u00e4rast iga failide \u00fclev\u00f5ttu peame alati k\u00e4sitsi kontrollima klastrit. Peame veenduma, et meil on alati \u00f5ige arv replikaid, replikatsiooni viivitust ei ole, logides ei ole vigu, mis on seotud voogde replikatsiooniga, Patroniga v\u00f5i DCS s\u00fcsteemiga.<\/p>\n<p><\/p>\n<p>Automaatika v\u00f5ib edukalt t\u00f6\u00f6tada, Patroni on v\u00e4ga hea t\u00f6\u00f6riist. See v\u00f5ib t\u00f6\u00f6tada, aga see ei vii klastrit soovitud seisundisse. Kui me sellest teada ei saa, siis v\u00f5ivad tekkida probleemid.<\/p>\n<p><\/p>\n<p>Ja Patroni ei ole h\u00f5bedane kuul. Me peame ikkagi m\u00f5istma, kuidas Postgres t\u00f6\u00f6tab, kuidas replikatsioon t\u00f6\u00f6tab ning kuidas Patroni Postgresiga koos t\u00f6\u00f6tab ja kuidas toimub suhtlemine s\u00f5lmede vahel. See on vajalik, et osata k\u00e4sitsi lahendada tekkivaid probleeme.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni rikke lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/ea4162df3561d2ea7001f2ef6788eaaa.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kuidas ma l\u00e4henen diagnostika k\u00fcsimusele? On nii juhtunud, et me t\u00f6\u00f6tame erinevate klientidega ja \u00fchegi ELK tehnoloogiakiud ei ole, mist\u00f5ttu tuleb logidesse s\u00fcveneda, avades 6 konsooli ja 2 vahelehte. \u00dchel vahelehel on iga s\u00f5lme Patroni logid, teisel vahelehel on Consuli v\u00f5i vajadusel Postgresi logid. Selle diagnoosimine on v\u00e4ga keeruline. <\/p>\n<p><\/p>\n<p>Milliseid l\u00e4henemisviise olen v\u00e4lja t\u00f6\u00f6tanud? Esiteks, ma alati vaatan, millal failide \u00fclev\u00f5tt toimus. See on minu jaoks teatud murdepunkt. Vaatan, mis juhtus enne failide \u00fclev\u00f5ttu, selle ajal ja p\u00e4rast failide \u00fclev\u00f5ttu. Failide \u00fclev\u00f5tmisel on kaks m\u00e4rki: algus- ja l\u00f5puajad. <\/p>\n<p><\/p>\n<p>See, I check the logs for events leading up to the failover, looking for the reasons why the failover occurred. <\/p>\n<p><\/p>\n<p>This provides an understanding of what happened and what can be done in the future to prevent such circumstances from arising (and consequently, a failover).<\/p>\n<p><\/p>\n<p>So where do we usually look? I check:<\/p>\n<p><\/p>\n<ul>\n<li>First, in the Patroni logs. <\/li>\n<li>Then I look at the Postgres logs or the DCS logs, depending on what I found in the Patroni logs. <\/li>\n<li>System logs sometimes also provide insight into what could have caused the failover. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni rikke lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/a53618e366020e1a550d852fc308c188.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>What do I think of Patroni? I think very highly of it. In my opinion, it\u2019s the best option available today. I'm aware of many other products: Stolon, Repmgr, Pg_auto_failover, PAF. Four tools. I have tried them all. Patroni impressed me the most. <\/p>\n<p><\/p>\n<p>If asked whether I recommend Patroni, I would say yes because I like it. And it seems I have learned how to configure it well. <\/p>\n<p><\/p>\n<p>If you are curious to see what other problems there may be with Patroni besides those I\u2019ve mentioned, you can always check the page <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/zalando\/patroni\/issues\/\">issues<\/a><\/noindex> on GitHub. There are many different stories and many interesting issues discussed there. Some bugs have been reported and resolved, providing intriguing reading material. <\/p>\n<p><\/p>\n<p>There are fascinating stories about how people shoot themselves in the foot. It\u2019s very educational. You read and understand that you shouldn\u2019t do that. Checked it off my list. <\/p>\n<p><\/p>\n<p>I would also like to express my gratitude to Zalando for developing this project, specifically to Alexander Kukushkin and Alexey Klyukin. Alexey Klyukin is one of the co-authors; he no longer works at Zalando, but these are the two individuals who started working on this product. <\/p>\n<p><\/p>\n<p>I believe that Patroni is an extremely valuable tool. I\u2019m glad it exists; it\u2019s interesting to work with. My sincere thanks to all the contributors who write patches for Patroni. I hope that over time, Patroni will become more mature, powerful, and effective. It\u2019s already operational, but I hope it will continue to improve. So if you plan to use Patroni, don\u2019t be afraid. It\u2019s a good solution that can be implemented and utilized. <\/p>\n<p><\/p>\n<p>That\u2019s all for now. If you have any questions, please ask.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni rikke lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/85c2fef2455999b48413c9fc3b235ed6.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>K\u00fcsimused<\/p>\n<p><\/p>\n<p><em>Thank you for the presentation! If we still need to look closely after a failover, why do we need an automatic failover at all?<\/em> <\/p>\n<p><\/p>\n<p>Kuna see on uus asi. Oleme sellega t\u00f6\u00f6tanud vaid aasta. Paremini karta kui kahetseda. Soovime siseneda ja n\u00e4ha, et k\u00f5ik t\u00f6\u00f6tab nii nagu peab. See on t\u00e4iskasvanu tasemel umbusaldus \u2013 parem on uuesti kontrollida ja vaadata. <\/p>\n<p><\/p>\n<p><em>N\u00e4iteks, me k\u00e4isime hommikul ja vaatasime, eks?<\/em><\/p>\n<p><\/p>\n<p>Ei hommikul, me saame tavaliselt auto failimise kohta teate kohe. Meie saame m\u00e4rguanded, n\u00e4eme, et auto failimine on toimunud. Me k\u00e4ime praktiliselt kohe vaatamas. Kuid k\u00f5ik need kontrollid peaksid olema viidud monitooringu tasandile. Kui p\u00f6\u00f6rduda rest API kaudu Patroni poole, on olemas ajalugu. Ajaloo kaudu saab n\u00e4ha ajatempleid, millal toimus failimine. Selle p\u00f5hjal saab teha monitooringu. Saab vaadata, kui palju seal s\u00fcndmusi on olnud. Kui me oleme saanud rohkem s\u00fcndmusi, siis on toimunud auto failimine. Saame minna ja vaadata. V\u00f5i meie automaatika monitooringus kontrollis, et k\u00f5ik meie koopiad on kohal, viivitust pole ja k\u00f5ik on korras. <\/p>\n<p><\/p>\n<p><em>Ait\u00e4h!<\/em><\/p>\n<p><\/p>\n<p><em>Suur ait\u00e4h suurep\u00e4rase jutustuse eest! Kui me liigutasime DCS klastrit kaugele Postgres klastrist, kas seda klastri tuleb ka perioodiliselt haldada? Millised on parimad praktikad, et osad DCS klastri osad v\u00e4lja l\u00fclitada, midagi nende kallal teha jne? Kuidas see konstruktsioon siis elab? Ja kuidas neid asju teha?<\/em><\/p>\n<p><\/p>\n<p>\u00dche ettev\u00f5tte jaoks tuli koostada probleemide maatriks, mis juhtub, kui m\u00f5ni komponent v\u00f5i mitmed komponendid eba\u00f5nnestuvad. Selle maatriksi p\u00f5hjal vaatame j\u00e4rjestikku \u00fcle k\u00f5ik komponendid ja koostame stsenaariume nende komponentide rikke korral. Vastavalt iga rikke stsenaariumi jaoks v\u00f5iks olla taastamisplaan. Ja DCS puhul on see osa tavalistest infrastruktuuridest. Ja administraator haldab seda ning me toetume juba nende administraatorite oskustele, kes seda haldavad ja suudavad seda \u00f5nnetuse korral parandada. Kui DCS-i \u00fcldse pole, siis me paigaldame selle, kuid ei j\u00e4lgi seda eriti, kuna me ei vasta infrastruktuuri eest, vaid anname soovitusi, kuidas ja mida monitoorida. <\/p>\n<p><\/p>\n<p><em>Ehk ma sain \u00f5igesti aru, et tuleb v\u00e4lja l\u00fclitada Patroni, v\u00e4lja l\u00fclitada failimine, v\u00e4lja l\u00fclitada k\u00f5ik, enne kui midagi hostidega teha?<\/em><\/p>\n<p><\/p>\n<p>See s\u00f5ltub sellest, kui palju on meil s\u00f5lmi DCS-klastris. Kui s\u00f5lmi on palju ja kui me v\u00e4ljutame vaid \u00fche s\u00f5lme (replikatsiooni), siis j\u00e4\u00e4b klastris kvoorum alles. Ja Patroni j\u00e4\u00e4b t\u00f6\u00f6tavaks. Ja mitte midagi ei aktiveeru. Kui meil on mingeid keerulisi operatsioone, mis h\u00f5lmavad rohkem s\u00f5lmi, mille puudumine v\u00f5ib kvoorumi rikkuda, siis \u2013 jah, v\u00f5ib-olla on m\u00f5istlik panna Patroni pausile. Tal on sellele vastav k\u00e4sk \u2013 patronictl pause, patronictl resume. Me lihtsalt paneme pausile ja autofailover ei toimi sel ajal. Me teeme hooldust DCS-klastris, siis eemaldame pausi ja j\u00e4tkame elu.<\/p>\n<p><\/p>\n<p><em>Ait\u00e4h palju!<\/em><\/p>\n<p><\/p>\n<p><em>Suur t\u00e4nu ettekande eest! Kuidas toote meeskond suhtub andmete kadumise v\u00f5imalusse?<\/em> <\/p>\n<p><\/p>\n<p>Toote meeskondadele ei meeldi see, aga meeskonnajuhid on mures. <\/p>\n<p><\/p>\n<p><em>Millised garantiiid seal on?<\/em><\/p>\n<p><\/p>\n<p>Garantiidega on v\u00e4ga keeruline. On ettekandeid Aleksandr Kukushkini poolt teemal \"Kuidas arvutada RPO ja RTO\", st taastamisaeg ja kui palju andmeid me v\u00f5ime kaotada. Ma arvan, et tuleks neid slaide otsida ja uurida. Nagu ma m\u00e4letan, on seal konkreetsed sammud, kuidas neid asju arvutada. Kui palju tehinguid me v\u00f5ime kaotada, kui palju andmeid me v\u00f5ime kaotada. Variandina saame kasutada s\u00fcnkroonset replikatsiooni Patroni tasemel, kuid see on ka kahe otsaga noa: kas me saavutasime andmete usaldusv\u00e4\u00e4rsuse v\u00f5i kaotasime kiirusest. On s\u00fcnkroonne replikatsioon, kuid see ei taga ka 100%-list kaitset andmete kadumise eest.<\/p>\n<p><\/p>\n<p><em>Aleksei, ait\u00e4h suurep\u00e4rase ettekande eest! Kas on kogemusi Patroni kasutamisel zero level kaitse jaoks? St koos s\u00fcnkroonse standby'ga? See on esimene k\u00fcsimus. Ja teine k\u00fcsimus. Teie olete kasutanud erinevaid lahendusi. Me kasutasime Repmgr'i, aga ilma autofailoverita ja n\u00fc\u00fcd plaanime autofailoveri liita. Ja kaalume Patroni alternatiivina. Mida saate \u00f6elda plusside kohta v\u00f5rreldes Repmgr'iga?<\/em><\/p>\n<p><\/p>\n<p>Esimene k\u00fcsimus s\u00fcnkroonsete replikate kohta oli. Meil ei kasutata keegi s\u00fcnkroonset replikatsiooni, sest k\u00f5ik kardavad (M\u00f5ned kliendid juba kasutavad, probleeme tootlikkusega pole p\u00f5him\u00f5tteliselt t\u00e4heldatud \u2014 <em>Ettekandja m\u00e4rkus<\/em>). Kuid meie jaoks on v\u00e4lja kujunenud reegel, et s\u00fcnkroonse replikeerimise klastris peab olema v\u00e4hemalt kolm s\u00f5lme, kuna kui meil on kaks s\u00f5lme ja kui meistril v\u00f5i replikal on viga, siis Patroni viib selle s\u00f5lme iseseisva re\u017eiimi, et rakendus saaks edasi t\u00f6\u00f6tada. Sel juhul on andmete kadumise riskid.<\/p>\n<p><\/p>\n<p>Teise k\u00fcsimuse osas kasutasime Repmgr-i ja kasutame seda endiselt m\u00f5nedes klientides ajaloolistel p\u00f5hjustel. Mida saab \u00f6elda? Patronis on automaatne failover v\u00e4lja pakutud, Repmgr-is on automaatne failover lisaautona, mille tuleb sisse l\u00fclitada. Tuleb k\u00e4ivitada Repmgr deemon igas s\u00f5lmes ja siis saame automaatse failover'i seadistada. <\/p>\n<p><\/p>\n<p>Repmgr kontrollib, kas Postgres'i s\u00f5lmed on elus. Repmgr protsessid kontrollivad \u00fcksteise olemasolu, see pole v\u00e4ga t\u00f5hus l\u00e4henemine, kuna v\u00f5ivad esineda keerulised v\u00f5rguisolatsiooni juhtumid, kus suur Repmgr klaster v\u00f5ib laguneda mitmeks v\u00e4iksemaks ja j\u00e4tkata t\u00f6\u00f6d. Ma ei ole ammu Repmgr-i j\u00e4lginud, v\u00f5ib-olla on nad selle probleemi lahendanud ... aga v\u00f5ib-olla ka mitte. Kuid teabe edastamine klastrisse DCS-sse, nagu teeb Stolon v\u00f5i Patroni, on k\u00f5ige eluj\u00f5ulisem variant. <\/p>\n<p><\/p>\n<p><em>Aleksei, mul on k\u00fcsimus, mis v\u00f5ibolla on algaja oma. \u00dches esimeses DCS n\u00e4ites viidate kohalikult arvutilt kaugule. Saame aru, et v\u00f5rk \u2013 see on asi, millel on oma erip\u00e4rad, see elab oma elu. Mis juhtub, kui mingil p\u00f5hjusel DCS-klaster muutub k\u00e4ttesaamatuks? P\u00f5hjuseid ei hakka nimetama, neid v\u00f5ib olla palju: alates ketserite k\u00e4te\u00f5nnest kuni reaalsed probleemideni.<\/em> <\/p>\n<p><\/p>\n<p>Ma ei \u00f6elnud seda valjusti, kuid DCS klaster peaks olema ka talitlush\u00e4irete suhtes vastupidav, s.t. see peab olema paaritu arv s\u00f5lmi, et kvoorum kokku saaks. Mis juhtub, kui DCS klaster muutub k\u00e4ttesaamatuks v\u00f5i ei suuda koguda kvoorumit, s.t. mingi v\u00f5rgu l\u00f5he v\u00f5i s\u00f5lmede rike? Sellel juhul \u00fcleminek klaster Patroni read only re\u017eiimi. Klaster Patroni ei suuda m\u00e4\u00e4rata klastriseisundit ja mida selle tegemiseks teha. Ta ei saa \u00fchendust DCS-ga ning ei suuda seal uut klastriseisundit salvestada, mist\u00f5ttu kogu klaster l\u00e4heb read only re\u017eiimi. Ja ootab kas operaatori k\u00e4sitsi sekkumist v\u00f5i kui DCS taastub.<\/p>\n<p><\/p>\n<p><em>Lihtsalt \u00f6eldes, kas DCS muutub meile sama t\u00e4htsaks teenuseks kui andmebaas ise?<\/em><\/p>\n<p><\/p>\n<p>Jah, jah. Paljuski kaasaegsetes ettev\u00f5tetes on teenuse avastamine infrastruktuuri lahutamatu osa. See rakendatakse isegi enne, kui andmebaas infrastruktuuri ilmub. \u00dctleme niimoodi, et infrastruktuur on k\u00e4ivitatud, andmekeskuses on loodud tingimused, ja meil on juba teenuse avastamine olemas. Kui see on Consul, siis v\u00f5ib selle peal DNS p\u00f5hineda. Kui see on Etcd, siis v\u00f5ib olla osa Kubernetesest, kuhu k\u00f5ik muu juba paigutatakse. Minu arvates on teenuse avastamine juba kaasaegse infrastruktuuri lahutamatu osa. Ja selle peale hakatakse m\u00f5tlema palju varem kui andmebaasidele. <\/p>\n<p><\/p>\n<p><em>Ait\u00e4h!<\/em><\/p>\n<p>Allikas: <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.1.1 - 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\/et\/blog\/administrirovanie\/patroni-failure-stories-or-how-to-crash-your-postgresql-cluster-aleksej-lesovskij\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"et_EE\" \/>\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\/et\/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 rikete lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski | ProHoster","description":"","canonical_url":"https:\/\/prohoster.info\/et\/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":"et_EE","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\/et\/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\/et\/wp-json\/wp\/v2\/posts\/90103","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/comments?post=90103"}],"version-history":[{"count":1,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/90103\/revisions"}],"predecessor-version":[{"id":158759,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/90103\/revisions\/158759"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media\/90104"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media?parent=90103"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/categories?post=90103"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/tags?post=90103"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}