Patroni rikke lood vÔi kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski

Patroni rikke lood vÔi kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski

Patroni peamine eesmÀrk on tagada PostgreSQL-i kÔrge saadavus. Kuid Patroni on vaid mall, mitte valmis tööriist (nagu on ka dokumendis mÀrgitud). Esmapilgul, testlaboratooriumis Patroni seadistades, vÔime nÀha, kui imeline see tööriist on ja kui lihtsalt ta meie katseid klastrit purustada kÀsitleb. Kuid praktikas tootmiskeskkonnas ei pruugi kÔik alati nii kenasti ja elegantselt kulgeda kui testlaboratooriumis.

Patroni rikke lood vÔi kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski

RÀÀgin natuke endast. Alustasin sĂŒsteemiadministraatorina. Olen töötanud veebiarenduses. Alates 2014. aastast töötan Data Egreti juures. Firma tegeleb PostgreSQL-i konsultatsiooniga. Me hooldame just PostgreSQL-i ja töötame iga pĂ€ev PostgreSQL-iga, seega on meil erinev kogemus, mis on seotud kasutamisega.

Ja 2018. aasta lÔpus hakkasime tasahilju Patronit kasutama. Oleme kogunud teatud kogemuse. Oleme seda kuidagi diagnoosinud, hÀÀlestanud, jÔudnud oma parimate praktikate juurde. Ja sellest ettekandest rÀÀgin ma.

Peale PostgreSQL-i armastan ma Linuxit. Mulle meeldib seal nokitseda ja uurida, armastan kernide koostamist. Armastan virtualiseerimist, konteinerite, Dockerit, Kuberneteset. See kÔik 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ÔÔmu.

Patroni rikke lood vÔi kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski

  • Arvan, et paljud teist teavad, et PostgreSQL-is ei ole HA-d (kĂ”rge saadavus) karbist vĂ€lja. Et saavutada HA, tuleb midagi installida, seadistada, pingutada ja saavutada see.
  • On mitu tööriista ja Patroni on ĂŒks neist, mis lahendab HA-d vĂ€ga hĂ€sti ja tĂ”husalt. Kuid kui me kĂ”ik selle testlaboris ĂŒles seame ja kĂ€ivitame, saame nĂ€ha, et see töötab. Saame tekitada teatud probleeme ja vaadata, kuidas Patroni nendega tegeleb. Ja nĂ€eme, et kĂ”ik töötab suurepĂ€raselt.
  • Kuid praktikas oleme kokku puutunud erinevate probleemidega. Nendest probleemidest rÀÀgin ma.
  • RÀÀgin, kuidas me seda diagnoosisime, mida me reguleerisime – kas see aitas meid vĂ”i mitte.

Patroni rikke lood vÔi kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski

  • Ma ei hakka rÀÀkima, kuidas Patronit seadistada, sest seda saab internetist leida, samuti saab vaadata konfiguratsioonifaile, et mĂ”ista, kuidas see kĂ”ik tööle pannakse ja seadistatakse. Saate tutvuda skeemidega, arhitektuuridega, leides selle kohta teavet internetist.
  • Ma ei hakka rÀÀkima teiste kogemustest. RÀÀgin ainult probleemidest, millega meie ise silmitsi seisisime.
  • Ja ma ei hakka rÀÀkima probleemidest, mis jÀÀvad vĂ€ljapoole Patronit ja PostgreSQL-i. Kui nĂ€iteks probleemid, mis on seotud koormuse jaotamisega, kui meie klaster lagunes, siis ma sellest rÀÀkima ei hakka.

Patroni rikke lood vÔi kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski

Ja vÀike ettekuulutus enne meie ettekande alustamist.

KÔik need probleemid, millega me silmitsi seisisime, ilmusid meil esimestel 6-7-8 kuudel kasutamise ajal. Aja jooksul jÔudsime oma sisemiste parimate praktikate juurde. Ja probleemid lahendusid. SeetÔttu esitati ettekande teema kuskil pool aastat tagasi, kui see kÔik oli meil veel selgelt meeles ja ma mÀletasin seda hÀsti.

Ettekande ettevalmistamise kÀigus vaatasin ma juba vanu postmortem'e, lugesin logisid. Ja osa detaile vÔis olla ununenud, vÔi osa detaile ei pruukinud probleemide arutamisel piisavalt uuritud olla, mistÔttu vÔib mÔnes aspektis tunduda, et probleemid on kÀsitletud mittetÀielikult vÔi et teabe puudus on olemas. SeetÔttu palun andestage mulle selle hetke pÀrast.

Patroni rikke lood vÔi kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski

Mis on Patroni?

  • See on Mall HA loomiseks. Nii on dokumentatsioonis kirjutatud. Minu arvates on see vĂ€ga Ă”ige tĂ€psustus. Patroni ei ole hĂ”bedane kuul, mis lahendab kĂ”ik teie probleemid, st tuleb pingutada, et see hakkaks toimima ja kasu tooma.
  • See on agentteenus, mis installitakse igasse teenusesse, kus on andmebaas, ja mis on omamoodi init-sĂŒsteem teie Postgresi jaoks. See kĂ€ivitab Postgresi, peatab, taaskĂ€ivitab, muudab konfiguratsiooni ja muudab teie kasti topoloogiat.
  • Seega, et salvestada klastriseisundit, selle praegust esitamist, nagu see vĂ€lja nĂ€eb, on vaja mingisugust salvestusruumi. Ja sellega seoses on Patroni valinud lĂ€henemise, mille kohaselt hoiab staatust vĂ€lises sĂŒsteemis. See on jaotatud konfiguratsioonihalduse sĂŒsteem. Need vĂ”ivad olla Etcd, Consul, ZooKeeper vĂ”i Kubernetes'i Etcd, st mĂ”ni neist variantidest.
  • Üks Patroni eripĂ€radest on see, et saate automaatse failivahetuse otse karbist, kui see on seadistatud. Kui vĂ”rrelda 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.
  • Ja palju on veel teisi asju. NĂ€iteks konfiguratsioonide haldamine, uute koopiate seadmine, varundamine jne. Kuid see jÀÀb ettekande piiridest vĂ€lja, sellest ma rÀÀkima ei hakka.

Patroni rikke lood vÔi kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski

Ja vĂ€ike kokkuvĂ”te – Patroni peamine ĂŒlesanne on teha automaatne failivahetus hĂ€sti ja usaldusvÀÀrselt, et meie klaster jÀÀks toimivaks ja rakendus ei mĂ€rkaks klastritopoloogia muutusi.

Patroni rikke lood vÔi kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski

Aga kui hakkame Patronit kasutama, muutub meie sĂŒsteem veidi keerulisemaks. Kui varem oli meil Postgres, siis Patroni kasutades saame ise Patroni, saame DCS-i, kus salvestatakse olek. Ja kĂ”ik see peab kuidagi töötama. Nii et mis vĂ”ib katki minna?

VÔib minna katki:

  • VĂ”ib minna katki Postgres. See vĂ”ib olla peamine vĂ”i koopia, ĂŒks neist vĂ”ib ebaĂ”nnestuda.
  • VĂ”ib minna katki ka ise Patroni.
  • VĂ”ib minna katki DCS, kus salvestatakse olek.
  • Ja vĂ”ib minna katki vĂ”rk.

KÔiki neid punkte kÀsitlen ettekandes.

Patroni rikke lood vÔi kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski

KĂ€sitlen juhtumeid nende keerukuse jĂ€rgi, mitte selliselt, et juhtum hĂ”lmab palju komponente. Vaid subjektiivsete tunnete jĂ€rgi, et see juhtum oli minu jaoks keeruline, seda oli raske analĂŒĂŒsida... ja vastupidi, mĂ”ni juhtum oli lihtne ja seda oli kergem analĂŒĂŒsida.

Patroni rikke lood vÔi kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski

Ja esimene juhtum on kĂ”ige lihtsam. See on juhtum, kui vĂ”tsime andmebaasi klastrisse ja kĂ€ivitasime samas klastris DCS-i salvestuse. See on kĂ”ige levinum viga. See on arhitektuuri konstrueerimise viga, st erinevate komponentide ĂŒhendamine ĂŒhte kohta.

Nii, failivahetus toimus, lÀhme uurima, mis juhtus.

Patroni rikke lood vÔi kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski

Ja siin meid huvitab, millal failivahetus toimus. St meid huvitatakse see hetk, mil klastris toimus oleku muutus.

Aga failivahetus ei toimu alati hetkega, st see ei vÔta mingit kindlat aega, see vÔib venida. See vÔib kesta pikalt.

SeetĂ”ttu on tal algus- ja lĂ”puajad, st tegu on pikaajalise sĂŒndmusega. Jagame kĂ”ik sĂŒndmused kolmeks ajavahemikuks: meil on aeg enne failimist, failimise ajal ja pĂ€rast failimist. Ootame, et vaatame kĂ”iki sĂŒndmusi selle ajakava raames.

Patroni rikke lood vÔi kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski

Ja esimesena, kui failimine toimus, otsime pÔhjust, mis juhtus, mis viis failimiseni.

Kui vaatame logisid, siis need on klassikalised Patroni logid. Need teavitavad meid, et serverist on saanud master ja masteri roll on lÀinud sellele sÔlmele. Siin on see esile tÔstetud.

Patroni rikke lood vÔi kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski

Edasi peame mĂ”istma, miks failimine juhtus, st millised sĂŒndmused viisid masteri rolli ĂŒleminekuni ĂŒhest sĂ”lmest teise. Antud juhul on kĂ”ik lihtne. Meil on hoidlaga suhtlemisel tĂ”rge. Master mĂ”istis, et ei saa töötada DCS-iga, st ilmnes probleem suhtlemisel. Ja ta ĂŒtleb, et ei saa enam master olla ja loobub oma volitustest. See rida "demoted self" ĂŒtleb just sellest.

Patroni rikke lood vÔi kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski

Kui vaatame sĂŒndmusi, mis eelnesid failimisele, nĂ€eme seal neid pĂ”hjuseid, mis tekitasid probleeme masteri edasises töös.

Kui vaatame Patroni logisid, siis nÀeme, et meil on palju erinevaid vigu, ajapiiranguid, st Patroni agent ei saa töötada DCS-iga. Antud juhul on see Consul agent, kellega suheldakse pordi 8500 kaudu.

Probleem seisneb selles, et Patroni ja andmebaas on kÀivitatud samal hostil. Ja samal sÔlmel olid kÀivitatud Consul-serverid. Koormuse tekitamine serveris lÔi probleeme ka serverid Consuliga. Nad ei suutnud normaalselt suhelda.

Patroni rikke lood vÔi kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski

MĂ”ne aja pĂ€rast, kui koormus taandus, suutis meie Patroni taas agentidega suhelda. Normaalsed tööd jĂ€tkusid. Ja sama server Pgdb-2 sai jĂ€lle masteriks. St toimus vĂ€ike flip, mille tĂ”ttu sĂ”lm loobus masteri volitustest ja vĂ”ttis need hiljem taas ĂŒle, st kĂ”ik naasis oma endisse olekusse.

Patroni rikke lood vÔi kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski

Seda vÔib kÀsitleda kui vale alarmi, vÔi vÔime vaadata, et Patroni tegi kÔik Ôigesti. St ta mÔistis, et ei saa toetada klastriseisundit ja loobus oma volitustest.

Siin tekkis probleem seetĂ”ttu, et Consul-serverid asuvad samas riistvaras, kus ka andmebaasid. SeetĂ”ttu mĂ”jutab iga koormus – olgu see siis ketaste vĂ”i protsessorite koormus – ka suhtlemist Consul klastriga.

Patroni rikke lood vÔi kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski

Otsustasime, et see ei peaks koos elama, ja eraldasime Consulile eraldi klastrit. Patroni töötas juba eraldi Consuliga, st oli eraldi Postgres klaster ja eraldi Consul klaster. See on pÔhijuhend, kuidas kÔiki neid asju eraldada ja hoida, et need ei eksisteeriks koos.

VĂ”imalusena vĂ”ib katsetada ttl, loop_wait, retry_timeout parameetrite seadistamist, ehk proovida nende parameetrite suurendamisega taluda lĂŒhiajalisi koormuse tippe. Kuid see ei ole kĂ”ige sobivam lahendus, kuna need koormused vĂ”ivad kesta pikka aega. Ja seega ĂŒletame lihtsalt nende parameetrite limiidid. See ei pruugi olla kĂ”ige tĂ”husam lahendus.

Patroni rikke lood vÔi kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski

Esimene probleem, nagu te mÔistate, on lihtne. VÔtsime DCS-i ja panime selle koos andmebaasiga, mille tulemusena tekkis probleem.

Patroni rikke lood vÔi kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski

Teine probleem sarnaneb esimesega. See on sarnane selle poolest, et meil on jÀlle DCS-iga suhtlemise probleemid.

Patroni rikke lood vÔi kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski

Kui vaatame logisid, nĂ€eme, et meil on jĂ€lle suhtlusviga. Patroni ĂŒtleb, et ei saa suhelda DCS-iga, seetĂ”ttu lĂ€heb aktiivne master repliigi reĆŸiimi.

Vana master muutub replikaks, siin teeb Patroni kĂ”ike nagu peab. Ta kĂ€ivitab pg_rewind, et pöörata tehingulog ja seejĂ€rel ĂŒhenduda uue masteriga ning jĂ€rele jĂ”uda uuele masterile. Patroni kĂ€itub siin nagu talle kohane.

Patroni rikke lood vÔi kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski

Peame leidma selle koha, mis eelnes failiruumi probleemile, st need vead, mis pĂ”hjustasid failiruumi tekkimise. Sel juhul on logide analĂŒĂŒsimine Patroniga ĂŒsna mugav. Ta kirjutab teatava aja jooksul samu sĂ”numeid. Kui hakkame logisid kiiresti kerima, nĂ€eme, et logid on muutunud, mis tĂ€hendab, et mingid probleemid on alanud. Me naaseme kiiresti sellele kohale ja vaatame, mis toimub.

Normaalsetes olukordades nĂ€evad logid vĂ€lja umbes nii. Kontrollitakse lukustuse omanikku. Ja kui omanik, nĂ€iteks, on muutunud, vĂ”ivad tekkida mingid sĂŒndmused, millele Patroni peab reageerima. Kuid antud juhul on meil kĂ”ik korras. Otsime seda hetke, mil vead algasid.

Patroni rikke lood vÔi kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski

Ja kui me kerime tagasi sinna, kus vead hakkasid ilmuma, nÀeme, 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.

Umbes vÔrreldes failoveri aega ja Consuli logis olevat aega, nÀeme, et meie Consuli klastri naabrid hakkasid kahtlema teiste Consuli klastri liikmete olemasolus.

Patroni rikke lood vÔi kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski

Ja kui vaadata ka teiste Consuli agentide logisid, siis seal on ka nÀha, et toimub mingi vÔrgu kokkuvarisemine. Ja kÔik Consuli klastri liikmed kahtlevad teineteise olemasolus. See oli tÔukeks failoverile.

Kui vaadata, mis enne neid vigu juhtus, siis vÔib nÀha, et seal on igasuguseid vigu, nÀiteks tÀhtaeg, RPC vigastus, s.t. ilmselgelt on mingi probleem Consuli klastri liikmete vahelises suhtluses.

Patroni rikke lood vÔi kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski

Lihtsaim vastus on vÔrgu parandamine. Kuid mulle on kergem sellest rÀÀkida seistes poodiumil. Kuid tingimused on sellised, et kliendil ei pruugi alati olla vÔimalik vÔrku parandada. Ta vÔib elada andmekeskuses ja tal ei pruugi olla vÔimalusi vÔrgu parandamiseks vÔi seadmetele mÔju avaldamiseks. SeetÔttu on vajalikud muud alternatiivid.

Patroni rikke lood vÔi kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski

Alternatiive on:

  • Lihtsaim lahendus, mis on kirjutatud, minu arvates isegi dokumentatsioonis, on vĂ€lja lĂŒlitada Consuli kontrollid, s.t. edastada lihtsalt tĂŒhi massiiv. Sellega ĂŒtleme Consuli agendile, et mitte kasutada mingeid kontrolle. Need kontrollid vĂ”imaldavad meil ignoreerida vĂ”rgu torme ja mitte algatada failoverit.
  • Teine variant on kontrollida raft_multiplier'i. See on Consuli serveri parameeter. Vaikimisi on see seadistatud vÀÀrtusele 5. See vÀÀrtus on dokumentatsioonis soovitatud staging keskkondade jaoks. Sisuliselt mĂ”jutab see sĂ”numite vahetamise sagedust Consuli vĂ”rgu osaliste vahel. Üldiselt mĂ”jutab see parameeter teenuste vaheliste sĂ”numite vahetamise kiirus. Ja tootmisreĆŸiimis on soovitatav seda vĂ€hendada, et sĂ”lmed vahetaksid sĂ”numeid sagedamini.
  • Teine variant, mida hakkasime kasutama, on Consul-protsesside prioriteedi suurendamine teiste protsesside seas operatsioonisĂŒsteemi protsessoriplaneerijas. On olemas parameeter „nice“, mis mÀÀrab protsesside prioriteedi, mida OS protsessoriplaneerija arvesse vĂ”tab. Me vĂ€hendasime Consul-agendi nice vÀÀrtust, st suurendasime prioriteeti, et operatsioonisĂŒsteem annaks Consul-protsessidele rohkem tööaega ja vĂ”imaluse oma koodi tĂ€ita. Meie puhul lahendas see meie probleemi.
  • Teine variant on mitte kasutada Consulit. Mul on sĂ”ber, kes on suur Etcd-i toetaja. Ja me vaidleme pidevalt, kumb on parem, Etcd vĂ”i Consul. Aga tavaliselt lepime kokku, et Consulil on agent, mis peab olema igas andmebaasi sĂ”lmes töötamas. See tĂ€hendab, et Patroni suhtleb Consul-klastriga lĂ€bi selle agendi. Ja see agent muutub kitsaskohaks. Kui agendiga juhtub midagi, ei suuda Patroni enam Consul-klastriga töötada. Ja see on probleem. Etcd puhul ei ole mingit agenti. Patroni saab otse töötada Etcd-serverite nimekirjaga ja nendega suhelda. Nii et kui teie ettevĂ”ttes 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Ă”ikidel klientidel on Consul.
  • Ja viimane punkt on parameetrite vÀÀrtuste ĂŒlevaatamine. Saame neid parameetreid tĂ”sta, lootes, et meie lĂŒhiajalised vĂ”rguprobleemid on lĂŒhikesed ja ei ĂŒleta nende parameetrite vahemikku. Nii saame vĂ€hendada Patroni agressiivsust automaatfaili tegemisel, kui tekivad mingid vĂ”rguprobleemid.

Patroni rikke lood vÔi kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski

Ma arvan, et paljud, kes kasutavad Patronit, tunnevad seda kÀsku.

Patroni rikke lood vÔi kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski

See kÀsk nÀitab klasteri praegust seisundit. Esmapilgul vÔib 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Ôlme, mitte kaks.

Patroni rikke lood vÔi kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski

SeetÔttu toimus autofailover. Ja pÀrast seda autofailoverit kadus meil replika. Peame vÀlja selgitama, miks see kadus ja taastama selle tagasi. Ja jÀlle vaatame logisid, et nÀha, miks meil autofailover juhtus.

Patroni rikke lood vÔi kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski

Sel juhul sai teine replika meistriks. Siin on kÔik korras.

Patroni rikke lood vÔi kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski

Ja peame vaatama juba replika peale, mis katkeb ja mis ei ole klastris. Avame Patroni logid ja vaatame, et meil tekkis klastriga ĂŒhendamisel probleem faasis pg_rewind. Klastrisse ĂŒhendamiseks tuleb taastada tehingute logi, kĂŒsida vajalik tehingute logi meistrilt ja selle pĂ”hjal jĂ”uda meistrini tagasi.

Sel juhul meil tehingute logi ei ole ja replika ei saa kÀivituda. SeetÔttu peatame Postgresi veaga. Ja seetÔttu pole seda klastris.

Patroni rikke lood vÔi kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski

Peame aru saama, miks seda klastris ei ole ja miks logisid ei olnud. LĂ€heme uue meistri juurde ja vaatame, mis tal logides on. Selgub, et kui tehti pg_rewind, toimus checkpoint. Ja osa vanadest tehingute logidest lihtsalt nimetati ĂŒmber. Kui vana meister ĂŒritas uuele meistrile ĂŒhenduda ja neid logisid kĂŒsida, olid need juba ĂŒmber nimetatud, neid ei olnud lihtsalt.

Patroni rikke lood vÔi kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski

VĂ”rdlesin ajastamisi, millal need sĂŒndmused juhtusid. Ja seal oli vahe vaid 150 millisekundit, st checkpoint lĂ”ppes 369 millisekundiga, WAL-segmendid olid nimetatud ĂŒmber. Ja tĂ€pselt 517 millisekundi pĂ€rast, 150 millisekundi möödudes, kĂ€ivitati rewind vanal replikal. St 150 millisekundit oli piisav, et replika ei saaks ĂŒhendust ja töötada.

Patroni rikke lood vÔi kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski

Millised on variandid?

Kasutame algselt replikatsiooni kohti. Me arvasime, et see on hea. Kuigi esimesel kasutamisetapil me kohti vĂ€lja lĂŒlitasime. Me arvasime, et kui kohad koguvad palju WAL-segmente, vĂ”ime meistri kukutada. Ta kukub. Oleme paar pĂ€eva ilmas kohtadeta vaeva nĂ€inud. Ja mĂ”istsime, et kohad on vajalikud, me tĂ”ime kohad tagasi.

Aga siin on probleem, et kui meister lÀheb replika juurde, eemaldab ta slotid ja koos slotidega eemaldab WAL-segmendid. Ja et vÀltida selle probleemi ilmnemist, otsustasime tÔsta wal_keep_segments parameetri. See on vaikimisi 8 segmenti. Me tÔstsime 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Ôigil sÔlmedel alati 16 gigabaiti tehinguajalugu varuks.

Ja lisaks - see on endiselt aktuaalne pikaajaliste hooldustööde jaoks. Oletame, et peame vĂ€rskendama ĂŒhte replika. Ja me tahame selle vĂ€lja lĂŒlitada. Peame vĂ€rskendama tarkvara, vĂ”ib-olla operatsioonisĂŒsteemi, midagi veel. Ja kui me lĂŒlitame replika vĂ€lja, eemaldatakse selle replika jaoks ka slot. Ja kui me kasutame madalat wal_keep_segments'i, siis pikkade replika puudumise korral mĂ€ngitakse tehinguajalugu lĂ€bi. Me kĂ€ivitame replika, see kĂŒsib neid tehinguajalugu, kus ta peatub, kuid meistril vĂ”ib neid seal mitte olla. Ja replika ei saa ka ĂŒhendust luua. SeetĂ”ttu hoiame meil palju ajalugu.

Patroni rikke lood vÔi kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski

Patroni rikke lood vÔi kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski

Meil on tootmisandmebaas. Seal töötavad juba projektid.

Toimus failihÀire. Me sisenesime ja vaatasime - kÔik on korras, replikad on kohal, replikatsiooni viivitus puudub. Vigade kohta ajalukes ei ole, kÔik on korras.

Toote meeskond ĂŒtleb, et tundub, et peaks olema mingeid andmeid, kuid me nĂ€eme neid ĂŒhes allikas, kuid andmebaasis me ei nĂ€e. Ja peame aru saama, mis nendega juhtus.

Patroni rikke lood vÔi kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski

Selge, et pg_rewind on need ĂŒle kirjoitanud. Me saime selle kohe aru, kuid lĂ€ksime vaatama, mis juhtus.

Patroni rikke lood vÔi kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski

Logidest leiame alati, millal toimus failihÀire, kes sai meistriks ja saame mÀÀrata, kes oli vana meister ja millal ta soovis saada replikaks, st. meil on vaja neid logisid, et vÀlja selgitada, kui palju tehinguajalugu oli kadunud.

Meie vana meister taaskĂ€ivitati. Ja autoalguses oli kirjutatud Patroni. Patroni kĂ€ivitus. Ta kĂ€ivitas jĂ€rgmisena Postgres'i. TĂ€psemalt, enne Postgres'i kĂ€ivitamist ja enne, kui teha sellest replik, kĂ€ivitas Patroni pg_rewind protsessi. Vastavalt sellele kustutas ta osa tehinguajaloost, allalaadib uusi ja ĂŒhendas. Siin töötas Patroni suurepĂ€raselt, nagu peab. Meie klaster taastati. Meil oli 3 sĂ”lme, pĂ€rast failihĂ€iret oli 3 sĂ”lme - kĂ”ik on suurepĂ€rane.

Patroni rikke lood vÔi kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski

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Àrgi. Rewind kÀivitati, midagi tehti ja lÔpetati.

Patroni rikke lood vÔi kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski

Peame leidma selle positsiooni tehingulogis, kus vana master peatus. Antud juhul on see see mÀrge. Ja me vajame teist mÀrget, st seda vahet, millega vana master erineb uuest.

VĂ”tame tavalise pg_wal_lsn_diff ja vĂ”rdleme neid kahte mĂ€rget. Antud juhul saame 17 megabaidi. Kas see on palju vĂ”i vĂ€he, otsustab igaĂŒks ise. Sest kellegi jaoks on 17 megabaidi vĂ€he, kellegi jaoks palju ja vastuvĂ”etamatu. Siin peab igaĂŒks isiklikult mÀÀrama vastavalt Ă€ri vajadustele.

Patroni rikke lood vÔi kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski

Aga mida oleme endale selgeks teinud?

Esiteks peame endale otsustada – kas me vajame alati pĂ€rast sĂŒsteemi taaskĂ€ivitamist Patroni automaatset kĂ€ivitamist? Sageli on nii, et peame minema vana masteri juurde, vaatama, kui kaugele ta on lĂ€inud. VĂ”ib-olla inspekteerima tehingulogide lĂ”ike, vaata, mis seal toimub. Ja aru saama – kas saame need andmed kaotada vĂ”i peame vanat masterit kĂ€itama standalone-reĆŸiimis, et need andmed vĂ€lja vĂ”tta.

Ja alles pĂ€rast seda peame otsustama, kas saame need andmed kĂ”rvale jĂ€tta vĂ”i saame need taastada, ĂŒhendades selle sĂ”lme meie klastrisse replikana.

Lisaks on olemas parameeter „maximum_lag_on_failover”. Vaikimisi, kui ma ei eksi, on selle parameetri vÀÀrtus 1 megabaidi.

Kuidas see töötab? Kui meie replika on 1 megabaidi vÔrra andmete replikatsiooni hilinemises, ei vÔta see replika valimistest osa. Ja kui juhtub failover, vaatab Patroni, millised replikad hilinevad. Kui nad hilinevad suure hulga tehingulogide vÔrra, ei saa nad masteriks saada. See on vÀga hea kaitsefunktsioon, mis aitab vÀltida suurte andmekao juhtumeid.

Kuid siin on probleem selles, et klastris Patroni ja DCS replikatsiooni hilinemine uuendatakse kindla intervalliga. Minu mÀletamist mööda on vaikimisi ttl vÀÀrtus 30 sekundit.

Seega vĂ”ib tekkida olukord, kus DCS-i replikate replikatsioonilagg on ĂŒhesugune, kuid tegelikult vĂ”ib see olla tĂ€iesti erinev vĂ”i seda ei pruugi olla ĂŒldse, st see asi ei ole reaalajas. Ja see ei kajasta alati tegelikku pilti. Seega ei tasu keerulist loogikat sellele tuginedes ehitada.

Ja risk kaduda jÀÀb alati. Halvimal juhul on ĂŒks valem, keskmisel juhul aga teine valem. St kui plaanime Patroni rakendamist ja hindame, kui palju andmeid me vĂ”ime kaotada, peame arvestama nende valemitega ja umbes ette kujutama, kui palju andmeid me vĂ”ime kaotada.

Ja hea uudis on. Kui vana meister on ette lÀinud, vÔib ta edasi liikuda teatud taustprotsesside tÔttu. St kui mÔni automaatne vakuum oli, kirjutas ta andmed ja salvestas need tehingute ajaloosse. Ja neid andmeid saame me lihtsalt ignorida ja kaotada. Sellega pole probleemi.

Patroni rikke lood vÔi kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski

Nii nĂ€evad logid vĂ€lja, kui on seadistatud maximum_lag_on_failover ja toimus failover ning tuleb valida uus meister. Replika hindab end kui osalemisvĂ”imetuks valimistel. Ja ta keeldub osalemast liidri valimisvĂ”istluses. Ja ta ootab, kuni uus meister on valitud, et hiljem tema juurde ĂŒhenduda. See on tĂ€iendav meede andmete kaotuse vĂ€ltimiseks.

Patroni rikke lood vÔi kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski

Patroni rikke lood vÔi kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski

Siin on meie tootemeeskond kirjutanud, et nende toode kogeb probleeme Postgresiga töötamisel. Sel ajal ei saa aga meistrisse sisse logida, kuna see pole SSH kaudu kÀttesaadav. Ja automaatset failoverit samuti ei toimu.

See host saadeti sunniviisiliselt taaskĂ€ivitamisele. TaaskĂ€ivitamise tĂ”ttu toimus automaatne failover, kuigi oleks olnud vĂ”imalik teha ka kĂ€sitsi automaatne failover, nagu ma nĂŒĂŒd aru saan. Ja pĂ€rast taaskĂ€ivitamist hakkame vaatama, mis meie praeguse meistriga juhtus.

Patroni rikke lood vÔi kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski

Samas teadsime ette, et meil olid probleemid ketastega, st me teadsime juba seire pÔhjal, kus kaevata ja mida otsida.

Patroni rikke lood vÔi kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski

Hakkasime postgres'i logisse sukelduma ja vaatama, mis seal juhtus. NĂ€gime commit'e, mis kestavad seal ĂŒhe, kahe vĂ”i kolme sekundi, mis pole kindlasti normaalne. NĂ€gime, et meil kĂ€ivitub automaatne vakuum vĂ€ga kaua ja kummaliselt. Ja nĂ€gime ajutisi faileketastes. St need on kĂ”ik mĂ€rk diskide probleemidest.

Patroni rikke lood vÔi kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski

Me vaatasime sĂŒsteemi dmesg'i (tuumasaadete logi). Ja nĂ€gime, et meil on probleeme ĂŒhe ketasega. KĂ”vakettasĂŒsteem koosnes software Raid'ist. Vaatasime /proc/mdstat ja nĂ€gime, et meil puudub ĂŒks ketas. T. e. siin on Raid 8 diskiga, meil puudub ĂŒks. Kui slaidi hoolikalt vaadata, siis vĂ€ljendis on nĂ€ha, et meil puudub sde. Ütleme nii, et ĂŒks ketas kukkus vĂ€lja. See kĂ€ivitas kettaprobleemid, ja rakendused kogesid ka probleeme Postgresi klastriga töötamisel.

Patroni rikke lood vÔi kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski

Ja sel juhul ei aitaks meid Patroni, kuna Patrnoni ĂŒlesanne ei ole serveri ja ketas staatuse jĂ€lgimine. Me peame selliseid olukordi jĂ€lgima vĂ€listest monitooringutest. Me lisasime vĂ€listesse monitooringutesse kettamonitooringu.

Ja oli mÔte - kas aitaks meid fencing vÔi tarkvaraline watchdog? Me mÔtlesime, et see ei aitaks meid, kuna probleemide ajal suhtles Patroni jÀtkuvalt DCS-iga ja ei nÀinud mingeid probleeme. T. e. DCS ja Patroni jaoks oli klaster korras, kuigi tegelikult olid kettaga ja andmebaasi kÀttesaadavusega probleemid.

Patroni rikke lood vÔi kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski

Minu arvates on see ĂŒks kummalisemaid probleeme, mida olen pikalt uurinud, lugenud palju logisid, lĂ€bi töötanud ja nimetanud selle klaster-simulaatoriks.

Patroni rikke lood vÔi kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski

Probleem oli selles, et vana master ei saanud normaalseks replikaks, t. e. Patroni kĂ€ivitas selle, Patroni nĂ€itas, et see sĂ”lm on replikana olemas, kuid samas ei olnud ta normaalne replik. NĂŒĂŒd nĂ€ete, miks. See jĂ€i mul alles selle probleemi analĂŒĂŒsiga.

Patroni rikke lood vÔi kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski

Ja kuidas kĂ”ik algas? Algus oli, nagu eelmise probleemi puhul, ketta viivitustega. Meil oli sekundis ĂŒks vĂ”i kaks commiti.

Patroni rikke lood vÔi kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski

Oli ĂŒhenduse katkestusi, st. kliendid katkestasid.

Patroni rikke lood vÔi kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski

Oli erineva raskusastmega blokeeringud.

Patroni rikke lood vÔi kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski

Ja seega ei olnud ketassĂŒsteem eriti reageeriv.

Patroni rikke lood vÔi kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski

Ja kĂ”ige salapĂ€rasem minu jaoks oli see, et tuli kohene shutdown-pĂ€ring. PostgreSQL-il on kolm vĂ€ljalĂŒlitusreĆŸiimi:

  • See on graceful, kui me ootame, et kĂ”ik kliendid vĂ€ljuksid ise.
  • On fast, kui me sunnime kliente vĂ€lja minema, kuna me plaanime vĂ€ljalĂŒlitust.
  • Ja on kohene. Antud juhul ei teata klientidele isegi, et tuleb vĂ€lja logida, ta lihtsalt sulgub ilma hoiatamata. Ja kĂ”igile klientidele saadetakse operatsioonisĂŒsteemi kaudu RST teade (TCP-teade, et ĂŒhendus on katkestatud ja kliendil pole enam midagi teha).

Kes saatis selle signaali? PostgreSQL-i taustprotsessid ei saada ĂŒksteisele selliseid signaale, st see on kill -9. Nad ei saada ĂŒksteisele selliseid signaale, nad reageerivad ainult sellele, st see on PostgreSQL-i hĂ€daseade taaskĂ€ivitamiseks. Kes selle saatis, ei tea.

Vaatasin kĂ€su „last” jĂ€rgi ja nĂ€gin ĂŒhte inimest, kes logis samuti sellele serverile sisse koos meiega, kuid mul oli piinlik kĂŒsida. VĂ”ib-olla oli see kill -9. Oleksin logides nĂ€inud kill -9, kuna PostgreSQL kirjutab, et sai kill -9, kuid ma ei nĂ€inud seda logides.

Patroni rikke lood vÔi kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski

Edasi uurides mĂ€rkasin, et Patroni ei olnud juba kaua aega loginud – 54 sekundit. Ja kui vĂ”rrelda kahte ajamĂ€rki, siis siin puudusid sĂ”numid umbes 54 sekundit.

Patroni rikke lood vÔi kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski

Ja selle aja jooksul toimus automaatne failivahetus. Patroni töötas siin jÀlle suurepÀraselt. Meie vana master oli kÀtkes, midagi juhtus temaga. Ja algasid uue masteri valimised. Siin kÔik töötas hÀsti. Meie pgsql01 sai uuest liidriks.

Patroni rikke lood vÔi kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski

Meil on replikatsioon, mis sai masteriks. Ja on teine replikatsioon. Teise replikatsiooniga olid just probleemid. Ta ĂŒritas ĂŒmber konfigureerida. Nagu ma aru sain, ĂŒritas ta muuta recovery.conf-i, taaskĂ€ivitada PostgreSQL-i ja ĂŒhenduda uue masteriga. Iga 10 sekundi jĂ€rel kirjutab ta sĂ”numeid, et ta ĂŒritab, aga tal ei Ă”nnestu.

Patroni rikke lood vÔi kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski

Ja nende katsete ajal saab vana master kohe aktiivse sulgemise signaali. Master taaskĂ€ivitub. Ja ka taastumismehhanism peatub, kuna vana master lĂ€heb taaskĂ€ivitamise reĆŸiimi. St replikatsioon ei saa temaga ĂŒhendust, kuna ta on vĂ€lja lĂŒlitatud.

Patroni rikke lood vÔi kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski

MÔnes kohas töötas ta, kuid replikatsioon ei kÀivitunud.

Mul on ainus hĂŒpotees, et recovery.conf-is oli vana masteri aadress. Ja kui uus master ilmnes, siis teine replikatsioon ĂŒritas ikka veel ĂŒhenduda vana masteriga.

Patroni rikke lood vÔi kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski

Kui Patroni kĂ€ivitati teises replikatsioonis, kĂ€ivitati sĂ”lm, kuid ei suutnud replikatsiooniga ĂŒhenduda. Ja tekkis replikatsiooni viivitus, mis nĂ€gi vĂ€lja umbes nii. St kĂ”ik kolm sĂ”lme olid kohal, kuid teine sĂ”lm jĂ€i maha.

Patroni rikke lood vÔi kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski

Kui vaadata logisid, mis olid kirjutatud, sai nÀha, et replikatsioon ei saa kÀivituda, kuna tehingulood erinevad. Ja need tehingulood, mida master pakub, mis on mÀrgitud recovery.conf-is, ei sobi meie praegusele sÔlmele.

Patroni rikke lood vÔi kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski

Ja siin tegin ma vea. Ma oleks pidanud tulema ja vaatama, mis seal recovery.conf-is on, et kontrollida oma hĂŒpoteesi, et me ĂŒhendame vale masteriga. Aga tol hetkel alles Ă”ppisin, et see ei tulnud mulle pĂ€he, vĂ”i siis nĂ€gin, et replikatsioon jÀÀb maha ja seda tuleb taastada, st tegin seda kuidagi pealiskaudselt. See oli minu eksimus.

Patroni rikke lood vÔi kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski

KakskĂŒmmend minutit hiljem tuli admin, st ta restartis Patroni repliika peal. Ma juba olin temaga lĂ”petanud, arvasin, et seda tuleb taastada. Ja mĂ”tlesin – restartin Patroni, Ă€kki Ă”nnestub midagi head. TaaskĂ€ivitus recovery. Ja andmebaas avanes, ta oli valmis ĂŒhendusi vastu vĂ”tma.

Patroni rikke lood vÔi kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski

Replikatsioon kÀivitus. Kuid minuti pÀrast ebaÔnnestus see vea tÔttu, et tehingulood ei sobinud.

Patroni rikke lood vÔi kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski

MĂ”tlesin, et teen veel ĂŒhe taaskĂ€ivituse. TaaskĂ€ivitasin Patroni veel kord, mĂ€rkides, et ma ei taaskĂ€ivitanud Postgres't, vaid taaskĂ€ivitasin just Patroni lootuses, et ta imeliselt kĂ€ivitab andmebaasi.

Patroni rikke lood vÔi kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski

Replikatsioon kÀivitus taas, kuid tehingulood olid erinevad, nad ei olnud need, mis olid eelmise kÀivituse ajal. Replikatsioon seiskus jÀlle. Ja sÔnum oli juba veidi erinev. See ei olnud minu jaoks eriti informatiivne.

Patroni rikke lood vÔi kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski

Ja siis tuli mulle mĂ”te – mis siis, kui ma taaskĂ€ivitan 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.

Patroni rikke lood vÔi kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski

TaaskÀivitasin Patroni, tegin paar checkpoint'i masteril, paar restart-pointi repliika peal, kui see avanes. Ja see aitas. Ma mÔtlesin kaua, miks see aitas ja kuidas see töötas. Ja replikatsioon kÀivitus. Ja replikatsioon ei katkestanud enam.

Patroni rikke lood vÔi kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski

See probleem on minu jaoks ĂŒks kĂ”ige salapĂ€rasemaid, mille ĂŒle ma siiani pean pead murdma, mis seal tegelikult toimus.

Millised on jÀreldused? Patroni vÔib töötada nagu ette nÀhtud ja ilma vigadeta. Kuid see ei tÀhenda, et meil oleks kÔik korras. Replika vÔib kÀivituda, kuid see vÔib olla poolikult toimivas seisundis ning rakendus ei tohi sellise replikaga töötada, kuna seal vÔivad olla vanad andmed.

Ja pĂ€rast failide ĂŒlevĂ”tmist on alati vaja kontrollida, et meie klaster toimib korralikult, st on vajalik arv replikaid ja replikatsiooni viivitust ei ole.

Patroni rikke lood vÔi kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski

Probleemide kĂ€sitlemise kĂ€igus annan soovitusi. Olen pĂŒĂŒdnud need kahel slaidil kokku koondada. TĂ”enĂ€oliselt vĂ”is kĂ”ik lood kokku panna kaheks slaidiks ja lihtsalt neist rÀÀkida.

Patroni rikke lood vÔi kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski

Kui te kasutate Patronit, peab teil kindlasti olema jĂ€lgimine. Te peate alati teadma, millal toimus automaatne failide ĂŒlevĂ”tmine, sest kui te ei tea, et see juhtus, siis te ei kontrolli klastrit. See on halb.

PĂ€rast iga failide ĂŒlevĂ”ttu peame alati kĂ€sitsi kontrollima klastrit. Peame veenduma, et meil on alati Ă”ige arv replikaid, replikatsiooni viivitust ei ole, logides ei ole vigu, mis on seotud voogde replikatsiooniga, Patroniga vĂ”i DCS sĂŒsteemiga.

Automaatika vÔib edukalt töötada, Patroni on vÀga hea tööriist. See vÔib töötada, aga see ei vii klastrit soovitud seisundisse. Kui me sellest teada ei saa, siis vÔivad tekkida probleemid.

Ja Patroni ei ole hÔbedane kuul. Me peame ikkagi mÔistma, kuidas Postgres töötab, kuidas replikatsioon töötab ning kuidas Patroni Postgresiga koos töötab ja kuidas toimub suhtlemine sÔlmede vahel. See on vajalik, et osata kÀsitsi lahendada tekkivaid probleeme.

Patroni rikke lood vÔi kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski

Kuidas ma lĂ€henen diagnostika kĂŒsimusele? On nii juhtunud, et me töötame erinevate klientidega ja ĂŒhegi ELK tehnoloogiakiud ei ole, mistĂ”ttu tuleb logidesse sĂŒveneda, avades 6 konsooli ja 2 vahelehte. Ühel vahelehel on iga sĂ”lme Patroni logid, teisel vahelehel on Consuli vĂ”i vajadusel Postgresi logid. Selle diagnoosimine on vĂ€ga keeruline.

Milliseid lĂ€henemisviise olen vĂ€lja töötanud? Esiteks, ma alati vaatan, millal failide ĂŒlevĂ”tt toimus. See on minu jaoks teatud murdepunkt. Vaatan, mis juhtus enne failide ĂŒlevĂ”ttu, selle ajal ja pĂ€rast failide ĂŒlevĂ”ttu. Failide ĂŒlevĂ”tmisel on kaks mĂ€rki: algus- ja lĂ”puajad.

See, I check the logs for events leading up to the failover, looking for the reasons why the failover occurred.

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).

So where do we usually look? I check:

  • First, in the Patroni logs.
  • Then I look at the Postgres logs or the DCS logs, depending on what I found in the Patroni logs.
  • System logs sometimes also provide insight into what could have caused the failover.

Patroni rikke lood vÔi kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski

What do I think of Patroni? I think very highly of it. In my opinion, it’s 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.

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.

If you are curious to see what other problems there may be with Patroni besides those I’ve mentioned, you can always check the page issues on GitHub. There are many different stories and many interesting issues discussed there. Some bugs have been reported and resolved, providing intriguing reading material.

There are fascinating stories about how people shoot themselves in the foot. It’s very educational. You read and understand that you shouldn’t do that. Checked it off my list.

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.

I believe that Patroni is an extremely valuable tool. I’m glad it exists; it’s 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’s already operational, but I hope it will continue to improve. So if you plan to use Patroni, don’t be afraid. It’s a good solution that can be implemented and utilized.

That’s all for now. If you have any questions, please ask.

Patroni rikke lood vÔi kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski

KĂŒsimused

Thank you for the presentation! If we still need to look closely after a failover, why do we need an automatic failover at all?

Kuna see on uus asi. Oleme sellega töötanud vaid aasta. Paremini karta kui kahetseda. Soovime siseneda ja nĂ€ha, et kĂ”ik töötab nii nagu peab. See on tĂ€iskasvanu tasemel umbusaldus – parem on uuesti kontrollida ja vaadata.

NÀiteks, me kÀisime hommikul ja vaatasime, eks?

Ei hommikul, me saame tavaliselt auto failimise kohta teate kohe. Meie saame mĂ€rguanded, nĂ€eme, et auto failimine on toimunud. Me kĂ€ime praktiliselt kohe vaatamas. Kuid kĂ”ik need kontrollid peaksid olema viidud monitooringu tasandile. Kui pöörduda rest API kaudu Patroni poole, on olemas ajalugu. Ajaloo kaudu saab nĂ€ha ajatempleid, millal toimus failimine. Selle pĂ”hjal saab teha monitooringu. Saab vaadata, kui palju seal sĂŒndmusi on olnud. Kui me oleme saanud rohkem sĂŒndmusi, siis on toimunud auto failimine. Saame minna ja vaadata. VĂ”i meie automaatika monitooringus kontrollis, et kĂ”ik meie koopiad on kohal, viivitust pole ja kĂ”ik on korras.

AitÀh!

Suur aitĂ€h suurepĂ€rase 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Ă€lja lĂŒlitada, midagi nende kallal teha jne? Kuidas see konstruktsioon siis elab? Ja kuidas neid asju teha?

Ühe ettevĂ”tte jaoks tuli koostada probleemide maatriks, mis juhtub, kui mĂ”ni komponent vĂ”i mitmed komponendid ebaĂ”nnestuvad. Selle maatriksi pĂ”hjal vaatame jĂ€rjestikku ĂŒle kĂ”ik komponendid ja koostame stsenaariume nende komponentide rikke korral. Vastavalt iga rikke stsenaariumi jaoks vĂ”iks 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 Ă”nnetuse korral parandada. Kui DCS-i ĂŒldse pole, siis me paigaldame selle, kuid ei jĂ€lgi seda eriti, kuna me ei vasta infrastruktuuri eest, vaid anname soovitusi, kuidas ja mida monitoorida.

Ehk ma sain Ă”igesti aru, et tuleb vĂ€lja lĂŒlitada Patroni, vĂ€lja lĂŒlitada failimine, vĂ€lja lĂŒlitada kĂ”ik, enne kui midagi hostidega teha?

See sĂ”ltub sellest, kui palju on meil sĂ”lmi DCS-klastris. Kui sĂ”lmi on palju ja kui me vĂ€ljutame vaid ĂŒhe sĂ”lme (replikatsiooni), siis jÀÀb klastris kvoorum alles. Ja Patroni jÀÀb töötavaks. Ja mitte midagi ei aktiveeru. Kui meil on mingeid keerulisi operatsioone, mis hĂ”lmavad rohkem sĂ”lmi, mille puudumine vĂ”ib kvoorumi rikkuda, siis – jah, vĂ”ib-olla on mĂ”istlik panna Patroni pausile. Tal on sellele vastav kĂ€sk – patronictl pause, patronictl resume. Me lihtsalt paneme pausile ja autofailover ei toimi sel ajal. Me teeme hooldust DCS-klastris, siis eemaldame pausi ja jĂ€tkame elu.

AitÀh palju!

Suur tÀnu ettekande eest! Kuidas toote meeskond suhtub andmete kadumise vÔimalusse?

Toote meeskondadele ei meeldi see, aga meeskonnajuhid on mures.

Millised garantiiid seal on?

Garantiidega on vĂ€ga keeruline. On ettekandeid Aleksandr Kukushkini poolt teemal "Kuidas arvutada RPO ja RTO", st taastamisaeg ja kui palju andmeid me vĂ”ime kaotada. Ma arvan, et tuleks neid slaide otsida ja uurida. Nagu ma mĂ€letan, on seal konkreetsed sammud, kuidas neid asju arvutada. Kui palju tehinguid me vĂ”ime kaotada, kui palju andmeid me vĂ”ime kaotada. Variandina saame kasutada sĂŒnkroonset replikatsiooni Patroni tasemel, kuid see on ka kahe otsaga noa: kas me saavutasime andmete usaldusvÀÀrsuse vĂ”i kaotasime kiirusest. On sĂŒnkroonne replikatsioon, kuid see ei taga ka 100%-list kaitset andmete kadumise eest.

Aleksei, aitĂ€h suurepĂ€rase ettekande eest! Kas on kogemusi Patroni kasutamisel zero level kaitse jaoks? St koos sĂŒnkroonse standby'ga? See on esimene kĂŒsimus. Ja teine kĂŒsimus. Teie olete kasutanud erinevaid lahendusi. Me kasutasime Repmgr'i, aga ilma autofailoverita ja nĂŒĂŒd plaanime autofailoveri liita. Ja kaalume Patroni alternatiivina. Mida saate öelda plusside kohta vĂ”rreldes Repmgr'iga?

Esimene kĂŒsimus sĂŒnkroonsete replikate kohta oli. Meil ei kasutata keegi sĂŒnkroonset replikatsiooni, sest kĂ”ik kardavad (MĂ”ned kliendid juba kasutavad, probleeme tootlikkusega pole pĂ”himĂ”tteliselt tĂ€heldatud — Ettekandja mĂ€rkus). Kuid meie jaoks on vĂ€lja kujunenud reegel, et sĂŒnkroonse replikeerimise klastris peab olema vĂ€hemalt kolm sĂ”lme, kuna kui meil on kaks sĂ”lme ja kui meistril vĂ”i replikal on viga, siis Patroni viib selle sĂ”lme iseseisva reĆŸiimi, et rakendus saaks edasi töötada. Sel juhul on andmete kadumise riskid.

Teise kĂŒsimuse osas kasutasime Repmgr-i ja kasutame seda endiselt mĂ”nedes klientides ajaloolistel pĂ”hjustel. Mida saab öelda? Patronis on automaatne failover vĂ€lja pakutud, Repmgr-is on automaatne failover lisaautona, mille tuleb sisse lĂŒlitada. Tuleb kĂ€ivitada Repmgr deemon igas sĂ”lmes ja siis saame automaatse failover'i seadistada.

Repmgr kontrollib, kas Postgres'i sĂ”lmed on elus. Repmgr protsessid kontrollivad ĂŒksteise olemasolu, see pole vĂ€ga tĂ”hus lĂ€henemine, kuna vĂ”ivad esineda keerulised vĂ”rguisolatsiooni juhtumid, kus suur Repmgr klaster vĂ”ib laguneda mitmeks vĂ€iksemaks ja jĂ€tkata tööd. Ma ei ole ammu Repmgr-i jĂ€lginud, vĂ”ib-olla on nad selle probleemi lahendanud ... aga vĂ”ib-olla ka mitte. Kuid teabe edastamine klastrisse DCS-sse, nagu teeb Stolon vĂ”i Patroni, on kĂ”ige elujĂ”ulisem variant.

Aleksei, mul on kĂŒsimus, mis vĂ”ibolla on algaja oma. Ühes esimeses DCS nĂ€ites viidate kohalikult arvutilt kaugule. Saame aru, et vĂ”rk – see on asi, millel on oma eripĂ€rad, see elab oma elu. Mis juhtub, kui mingil pĂ”hjusel DCS-klaster muutub kĂ€ttesaamatuks? PĂ”hjuseid ei hakka nimetama, neid vĂ”ib olla palju: alates ketserite kĂ€teĂ”nnest kuni reaalsed probleemideni.

Ma ei öelnud seda valjusti, kuid DCS klaster peaks olema ka talitlushĂ€irete suhtes vastupidav, s.t. see peab olema paaritu arv sĂ”lmi, et kvoorum kokku saaks. Mis juhtub, kui DCS klaster muutub kĂ€ttesaamatuks vĂ”i ei suuda koguda kvoorumit, s.t. mingi vĂ”rgu lĂ”he vĂ”i sĂ”lmede rike? Sellel juhul ĂŒleminek klaster Patroni read only reĆŸiimi. Klaster Patroni ei suuda mÀÀrata klastriseisundit ja mida selle tegemiseks teha. Ta ei saa ĂŒhendust DCS-ga ning ei suuda seal uut klastriseisundit salvestada, mistĂ”ttu kogu klaster lĂ€heb read only reĆŸiimi. Ja ootab kas operaatori kĂ€sitsi sekkumist vĂ”i kui DCS taastub.

Lihtsalt öeldes, kas DCS muutub meile sama tÀhtsaks teenuseks kui andmebaas ise?

Jah, jah. Paljuski kaasaegsetes ettevĂ”tetes on teenuse avastamine infrastruktuuri lahutamatu osa. See rakendatakse isegi enne, kui andmebaas infrastruktuuri ilmub. Ütleme niimoodi, et infrastruktuur on kĂ€ivitatud, andmekeskuses on loodud tingimused, ja meil on juba teenuse avastamine olemas. Kui see on Consul, siis vĂ”ib selle peal DNS pĂ”hineda. Kui see on Etcd, siis vĂ”ib olla osa Kubernetesest, kuhu kĂ”ik muu juba paigutatakse. Minu arvates on teenuse avastamine juba kaasaegse infrastruktuuri lahutamatu osa. Ja selle peale hakatakse mĂ”tlema palju varem kui andmebaasidele.

AitÀh!

Allikas: habr.com

Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster