Patroni galvenais mÄrÄ·is ir nodroÅ”inÄt augstu PostgreSQL pieejamÄ«bu. Bet Patroni ir tikai veidne, nevis gatavs rÄ«ks (kas kopumÄ ir teikts dokumentÄcijÄ). No pirmÄ acu uzmetiena, iestatot Patroni testa laboratorijÄ, varat redzÄt, cik tas ir lielisks rÄ«ks un cik viegli tas tiek galÄ ar mÅ«su mÄÄ£inÄjumiem izjaukt kopu. TaÄu praksÄ ražoÅ”anas vidÄ ne vienmÄr viss notiek tik skaisti un eleganti kÄ testa laboratorijÄ.
PastÄstÄ«Å”u mazliet par sevi. Es sÄku strÄdÄt kÄ sistÄmas administrators. StrÄdÄjis tÄ«mekļa izstrÄdÄ. Es strÄdÄju Data Egret kopÅ” 2014. gada. UzÅÄmums nodarbojas ar konsultÄcijÄm Postgres jomÄ. Un mÄs apkalpojam tieÅ”i Postgres, un mÄs strÄdÄjam ar Postgres katru dienu, tÄpÄc mums ir dažÄdas zinÄÅ”anas saistÄ«bÄ ar darbÄ«bu.
Un 2018. gada beigÄs mÄs sÄkÄm lÄnÄm lietot Patroni. Un zinÄma pieredze ir uzkrÄta. MÄs kaut kÄ to diagnosticÄjÄm, noregulÄjÄm, nonÄcÄm pie savas labÄkÄs prakses. Un Å”ajÄ ziÅojumÄ es par tiem runÄÅ”u.
IzÅemot Postgres, man patÄ«k Linux. Man patÄ«k tajÄ bakstÄ«ties un izpÄtÄ«t, man patÄ«k vÄkt serdes. Man patÄ«k virtualizÄcija, konteineri, doks, Kubernetes. Tas viss mani interesÄ, jo ietekmÄ vecie admin paradumi. Man patÄ«k nodarboties ar monitoringu. Un man patÄ«k postgres lietas, kas saistÄ«tas ar administrÄÅ”anu, t.i., replikÄciju, dublÄÅ”anu. Un brÄ«vajÄ laikÄ rakstu Go. Es neesmu programmatÅ«ras inženieris, es vienkÄrÅ”i rakstu sev Go. Un tas man sagÄdÄ prieku.
- Es domÄju, ka daudzi no jums zina, ka Postgres nav pieejams HA (augsta pieejamÄ«ba). Lai iegÅ«tu HA, jums kaut kas jÄinstalÄ, jÄkonfigurÄ, jÄpieliek pÅ«les un jÄiegÅ«st tas.
- Ir vairÄki rÄ«ki, un Patroni ir viens no tiem, kas lieliski un ļoti labi atrisina HA. Bet, ievietojot to visu testa laboratorijÄ un palaižot to, mÄs varam redzÄt, ka tas viss darbojas, mÄs varam reproducÄt dažas problÄmas, redzÄt, kÄ Patroni tÄs apkalpo. Un mÄs redzÄsim, ka tas viss darbojas lieliski.
- TaÄu praksÄ mÄs saskÄrÄmies ar dažÄdÄm problÄmÄm. Un es runÄÅ”u par Ŕīm problÄmÄm.
- Es jums pastÄstÄ«Å”u, kÄ mÄs to diagnosticÄjÄm, ko mÄs pielÄgojÄm - vai tas mums palÄ«dzÄja vai nÄ.
- Patroni nestÄstÄ«Å”u, jo internetÄ var googlÄt, var paskatÄ«ties konfigurÄcijas failus, lai saprastu, kÄ tas viss sÄkas, kÄ tiek konfigurÄts. Var saprast shÄmas, arhitektÅ«ru, atrodot informÄciju par to internetÄ.
- Par kÄda cita pieredzi nerunÄÅ”u. Es runÄÅ”u tikai par problÄmÄm, ar kurÄm mÄs saskÄrÄmies.
- Un es nerunÄÅ”u par problÄmÄm, kas ir Ärpus Patroni un PostgreSQL. Ja, piemÄram, ir problÄmas, kas saistÄ«tas ar balansÄÅ”anu, kad mÅ«su klasteris ir sabrucis, es par to nerunÄÅ”u.
Un neliela atruna pirms ziÅojuma sÄkÅ”anas.
Visas Ŕīs problÄmas, ar kurÄm mÄs saskÄrÄmies, mums tÄs bija pirmajos 6-7-8 darbÄ«bas mÄneÅ”os. Laika gaitÄ mÄs nonÄcÄm pie savas iekÅ”ÄjÄs paraugprakses. Un mÅ«su problÄmas pazuda. TÄpÄc ziÅojums tika izziÅots apmÄram pirms pusgada, kad tas viss bija svaigi manÄ galvÄ un es to visu lieliski atcerÄjos.
ZiÅojuma gatavoÅ”anas gaitÄ jau pacÄlu vecas pÄcnÄves, apskatÄ«ju baļķus. ProblÄmu analÄ«zes laikÄ dažas detaļas var aizmirst vai arÄ« dažas detaļas nebija pilnÄ«bÄ izpÄtÄ«tas, tÄpÄc dažos punktos var Ŕķist, ka problÄmas nav pilnÄ«bÄ izskatÄ«tas vai arÄ« trÅ«kst informÄcijas. Un tÄpÄc es lÅ«dzu jÅ«s mani atvainot par Å”o brÄ«di.
Kas ir Patroni?
- Å Ä« ir veidne HA veidoÅ”anai. Tas ir teikts dokumentÄcijÄ. Un no mana viedokļa tas ir ļoti pareizs precizÄjums. Patroni nav sudraba lode, kas atrisinÄs visas jÅ«su problÄmas, tas ir, jums ir jÄpieliek pÅ«les, lai tas darbotos un nestu labumu.
- Å is ir aÄ£enta pakalpojums, kas tiek instalÄts katrÄ datu bÄzes pakalpojumÄ un ir sava veida sÄkuma sistÄma jÅ«su Postgres. Tas palaiž Postgres, aptur, restartÄ, pÄrkonfigurÄ un maina jÅ«su klastera topoloÄ£iju.
- AttiecÄ«gi, lai saglabÄtu klastera stÄvokli, tÄ paÅ”reizÄjo attÄlojumu, kÄ izskatÄs, ir nepiecieÅ”ama sava veida krÄtuve. Un no Ŕī viedokļa Patroni izvÄlÄjÄs stÄvokļa saglabÄÅ”anu ÄrÄjÄ sistÄmÄ. TÄ ir sadalÄ«ta konfigurÄcijas uzglabÄÅ”anas sistÄma. Tas var bÅ«t Etcd, Consul, ZooKeeper vai kubernetes Etcd, t.i., viena no Ŕīm opcijÄm.
- Un viena no Patroni funkcijÄm ir tÄda, ka jÅ«s varat izÅemt automÄtisko filtrÄÅ”anu no kastes, tikai to iestatot. Ja salÄ«dzinÄjumam Åemam Repmgr, tad filer tur ir iekļauts. Ar Repmgr mÄs iegÅ«stam pÄrslÄgÅ”anos, bet, ja mÄs vÄlamies autofiler, tad mums tas ir jÄkonfigurÄ papildus. Patroni jau ir izÅemts no kastes.
- Un ir vÄl daudzas citas lietas. PiemÄram, konfigurÄciju uzturÄÅ”ana, jaunu reprodukciju ielieÅ”ana, dublÄÅ”ana utt. Bet tas ir Ärpus ziÅojuma jomas, par to es nerunÄÅ”u.
Un neliels rezultÄts ir tas, ka Patroni galvenais uzdevums ir labi un uzticami veikt autofailu, lai mÅ«su klasteris turpinÄtu darboties un lietojumprogramma nepamanÄ«tu izmaiÅas klastera topoloÄ£ijÄ.
Bet, kad sÄkam lietot Patroni, mÅ«su sistÄma kļūst nedaudz sarežģītÄka. Ja agrÄk mums bija Postgres, tad, izmantojot Patroni, mÄs iegÅ«stam paÅ”u Patroni, mÄs iegÅ«stam DCS, kurÄ tiek saglabÄts stÄvoklis. Un tam visam kaut kÄ ir jÄstrÄdÄ. TÄtad, kas var noiet greizi?
Var pÄrtraukums:
- Postgres var salūzt. Tas var būt kapteinis vai kopija, viens no tiem var neizdoties.
- Patroni var salūzt.
- DCS, kurÄ tiek saglabÄts stÄvoklis, var sabojÄt.
- Un tÄ«kls var pÄrtrÅ«kt.
Visus Å”os punktus es apsvÄrÅ”u ziÅojumÄ.
Es izskatÄ«Å”u lietas, kad tÄs kļūst sarežģītÄkas, nevis no viedokļa, ka lieta ietver daudzas sastÄvdaļas. Un no subjektÄ«vo sajÅ«tu viedokļa, ka man Å”is korpuss bija grÅ«ts, bija grÅ«ti to izjaukt ... un otrÄdi, kaut kÄds korpuss bija viegls un to bija viegli izjaukt.
Un pirmais gadÄ«jums ir vieglÄkais. Tas ir gadÄ«jums, kad mÄs paÅÄmÄm datu bÄzes klasteru un izvietojÄm savu DCS krÄtuvi tajÄ paÅ”Ä klasterÄ«. Å Ä« ir visizplatÄ«tÄkÄ kļūda. TÄ ir kļūda, veidojot arhitektÅ«ru, t.i., apvienojot dažÄdas sastÄvdaļas vienuviet.
TÄtad, bija failÄtÄjs, ejam, lai tiktu galÄ ar notikuÅ”o.
Un Å”eit mÄs esam ieinteresÄti, kad fails noticis. Tas ir, mÅ«s interesÄ Å”is brÄ«dis, kad mainÄ«jÄs klastera stÄvoklis.
Bet fails ne vienmÄr notiek uzreiz, t.i., tas neaizÅem nevienu laika vienÄ«bu, tas var aizkavÄties. Tas var bÅ«t ilgstoÅ”s.
TÄpÄc tam ir sÄkuma laiks un beigu laiks, t.i., tas ir nepÄrtraukts notikums. Un mÄs sadalÄm visus notikumus trÄ«s intervÄlos: mums ir laiks pirms faila, faila laikÄ un pÄc faila. Tas ir, mÄs Åemam vÄrÄ visus notikumus Å”ajÄ laika skalÄ.
Un pirmÄ lieta, kad notika fails, mÄs meklÄjam notikuÅ”Ä cÄloni, kas bija iemesls tam, kas noveda pie faila.
Ja skatÄmies uz baļķiem, tie bÅ«s klasiskie Patroni baļķi. TajÄs viÅÅ” mums stÄsta, ka serveris ir kļuvis par galveno, un saimnieka loma ir pÄrgÄjusi uz Å”o mezglu. Å eit tas ir izcelts.
TÄlÄk mums ir jÄsaprot, kÄpÄc fails notika, t.i., kÄdi notikumi radÄs, kuru dÄļ galvenÄ loma tika pÄrvietota no viena mezgla uz citu. Un Å”ajÄ gadÄ«jumÄ viss ir vienkÄrÅ”i. Sadarbojoties ar krÄtuves sistÄmu, radÄs kļūda. Meistars saprata, ka nevar strÄdÄt ar DCS, tas ir, radÄs kÄda veida mijiedarbÄ«bas problÄma. Un saka, ka vairs nevar bÅ«t saimnieks un atkÄpjas. Å Ä« rinda āpazeminÄtais esā saka tieÅ”i to.
Ja aplÅ«kojam notikumus pirms faila, mÄs varam redzÄt paÅ”us iemeslus, kas radÄ«ja vedÅa turpinÄÅ”anas problÄmu.
Ja apskatÄ«sim Patroni žurnÄlus, redzÄsim, ka mums ir daudz kļūdu, taimautu, t.i., Patroni aÄ£ents nevar strÄdÄt ar DCS. Å ajÄ gadÄ«jumÄ tas ir konsula aÄ£ents, kas sazinÄs pa 8500. portu.
Un problÄma Å”eit ir tÄda, ka Patroni un datu bÄze darbojas vienÄ un tajÄ paÅ”Ä resursdatorÄ. Un Consul serveri tika palaisti tajÄ paÅ”Ä mezglÄ. Izveidojot slodzi uz serveri, radÄ«jÄm problÄmas arÄ« Consul serveriem. ViÅi nevarÄja pareizi sazinÄties.
PÄc kÄda laika, kad slodze mazinÄjÄs, mÅ«su Patroni atkal varÄja sazinÄties ar aÄ£entiem. AtsÄkÄs normÄls darbs. Un tas pats Pgdb-2 serveris atkal kļuva par galveno. Tas ir, notika neliels flips, kura dÄļ mezgls atteicÄs no kapteiÅa pilnvarÄm un pÄc tam pÄrÅÄma tÄs vÄlreiz, tas ir, viss atgriezÄs kÄ bijis.
Un to var uzskatÄ«t par viltus trauksmi vai arÄ« uzskatÄ«t, ka Patroni visu izdarÄ«ja pareizi. Tas ir, viÅÅ” saprata, ka nevar uzturÄt klastera stÄvokli un atÅÄma savu autoritÄti.
Un Å”eit problÄma radÄs tÄpÄc, ka Consul serveri atrodas uz vienas aparatÅ«ras ar bÄzÄm. AttiecÄ«gi jebkura slodze: neatkarÄ«gi no tÄ, vai tÄ ir slodze uz diskiem vai procesoriem, tÄ ietekmÄ arÄ« mijiedarbÄ«bu ar Consul klasteru.
Un mÄs nolÄmÄm, ka tai nevajadzÄtu dzÄ«vot kopÄ, konsulam pieŔķīrÄm atseviŔķu kopu. Un Patroni jau strÄdÄja ar atseviŔķu konsulu, tas ir, bija atseviŔķs Postgres klasteris, atseviŔķs konsulu klasteris. Å Ä« ir pamata instrukcija, kÄ nÄsÄt un turÄt visas Ŕīs lietas, lai tÄs nedzÄ«votu kopÄ.
KÄ opciju varat pagriezt parametrus ttl, loop_wait, retry_timeout, t.i., mÄÄ£inÄt pÄrdzÄ«vot Å”os Ä«stermiÅa slodzes maksimumus, palielinot Å”os parametrus. Bet tas nav vispiemÄrotÄkais variants, jo Ŕī slodze var bÅ«t ilga laikÄ. Un mÄs vienkÄrÅ”i pÄrsniegsim Ŕīs Å”o parametru robežas. Un tas var nepalÄ«dzÄt.
PirmÄ problÄma, kÄ jÅ«s saprotat, ir vienkÄrÅ”a. PaÅÄmÄm un salikÄm DCS kopÄ ar bÄzi, sanÄca problÄma.
OtrÄ problÄma ir lÄ«dzÄ«ga pirmajai. Tas ir lÄ«dzÄ«gs ar to, ka mums atkal ir sadarbspÄjas problÄmas ar DCS sistÄmu.
Ja apskatÄ«sim žurnÄlus, mÄs redzÄsim, ka mums atkal ir komunikÄcijas kļūda. Un Patroni saka, ka es nevaru mijiedarboties ar DCS, tÄpÄc paÅ”reizÄjais kapteinis pÄriet replicÄÅ”anas režīmÄ.
Vecmeistars kļūst par repliku, te Patroni izdodas, kÄ nÄkas. Tas palaiž pg_rewind, lai attÄ«tu darÄ«jumu žurnÄlu un pÄc tam izveidotu savienojumu ar jauno galveno, lai panÄktu jauno galveno. Å eit Patroni strÄdÄ, kÄ nÄkas.
Å eit mums jÄatrod vieta, kas bija pirms faila, t.i., tÄs kļūdas, kuru dÄļ mums bija fails. Un Å”ajÄ sakarÄ ar Patroni apaļkokiem ir diezgan Ärti strÄdÄt. ViÅÅ” raksta vienus un tos paÅ”us ziÅojumus noteiktÄ intervÄlÄ. Un, ja mÄs Ätri sÄksim ritinÄt Å”os žurnÄlus, tad no žurnÄliem redzÄsim, ka žurnÄli ir mainÄ«juÅ”ies, kas nozÄ«mÄ, ka ir sÄkuÅ”Äs dažas problÄmas. Ätri atgriežamies Å”ajÄ vietÄ, skatÄmies, kas notiek.
Un parastÄ situÄcijÄ baļķi izskatÄs apmÄram Å”Ädi. Tiek pÄrbaudÄ«ts slÄdzenes Ä«paÅ”nieks. Un, ja, piemÄram, ir mainÄ«jies Ä«paÅ”nieks, var notikt daži notikumi, uz kuriem Patroni ir jÄreaÄ£Ä. Bet Å”ajÄ gadÄ«jumÄ mums viss ir kÄrtÄ«bÄ. MÄs meklÄjam vietu, kur sÄkÄs kļūdas.
Un, ritinot lÄ«dz vietai, kur sÄka parÄdÄ«ties kļūdas, mÄs redzam, ka mums ir bijusi automÄtiska failu pÄrslÄgÅ”ana. Un tÄ kÄ mÅ«su kļūdas bija saistÄ«tas ar mijiedarbÄ«bu ar DCS un mÅ«su gadÄ«jumÄ mÄs izmantojÄm Consul, mÄs skatÄmies arÄ« Consul žurnÄlus, kas tur notika.
Aptuveni salÄ«dzinot lietvedÄ«bas laiku un laiku konsulu žurnÄlos, redzam, ka mÅ«su kaimiÅi konsulu klasterÄ« sÄka Å”aubÄ«ties par citu konsulu klastera dalÄ«bnieku eksistenci.
Un, ja paskatÄs citu konsula aÄ£entu žurnÄlus, tad arÄ« var redzÄt, ka tur notiek kaut kÄds tÄ«kla sabrukums. Un visi Konsulu klastera dalÄ«bnieki apÅ”auba viens otra esamÄ«bu. Un tas bija stimuls iesniegtÄjam.
Ja paskatÄs uz to, kas notika pirms Ŕīm kļūdÄm, tad var redzÄt, ka ir visÄdas kļūdas, piemÄram, termiÅÅ”, RPC kritÄs, tas ir, nepÄrprotami ir kaut kÄda problÄma konsulu klastera dalÄ«bnieku savstarpÄjÄ mijiedarbÄ«bÄ. .
VienkÄrÅ”ÄkÄ atbilde ir tÄ«kla remonts. Bet man, stÄvot uz pjedestÄla, to pateikt ir viegli. TaÄu apstÄkļi ir tÄdi, ka ne vienmÄr klients var atļauties tÄ«kla remontu. ViÅÅ” var dzÄ«vot lÄ«dzstrÄvas tÄ«klÄ un nevarÄs salabot tÄ«klu, ietekmÄt aprÄ«kojumu. Un tÄpÄc ir vajadzÄ«gas dažas citas iespÄjas.
Ir iespÄjas:
- VienkÄrÅ”Äkais variants, kas, manuprÄt, ir rakstÄ«ts pat dokumentÄcijÄ, ir atspÄjot konsulu pÄrbaudes, tas ir, vienkÄrÅ”i iziet tukÅ”u masÄ«vu. Un mÄs sakÄm konsula aÄ£entam, lai viÅÅ” neizmanto nekÄdus Äekus. Veicot Ŕīs pÄrbaudes, mÄs varam ignorÄt Ŕīs tÄ«kla vÄtras un nesÄkt failu failu.
- VÄl viena iespÄja ir vÄlreiz pÄrbaudÄ«t raft_multiplier. Tas ir paÅ”a Consul servera parametrs. PÄc noklusÄjuma tÄ ir iestatÄ«ta uz 5. Å Ä« vÄrtÄ«ba ir ieteikta dokumentÄcijÄ par inscenÄÅ”anas vidÄm. Faktiski tas ietekmÄ ziÅojumapmaiÅas biežumu starp Consul tÄ«kla dalÄ«bniekiem. Faktiski Å”is parametrs ietekmÄ pakalpojumu saziÅas Ätrumu starp konsulu klastera dalÄ«bniekiem. Un ražoÅ”anai jau ir ieteicams to samazinÄt, lai mezgli biežÄk apmainÄ«tos ar ziÅojumiem.
- VÄl viena mÅ«su piedÄvÄtÄ iespÄja ir palielinÄt Consul procesu prioritÄti starp citiem operÄtÄjsistÄmas procesu plÄnotÄja procesiem. Ir tÄds ājauksā parametrs, tas tikai nosaka procesu prioritÄti, ko OS plÄnotÄjs Åem vÄrÄ, plÄnojot. Esam samazinÄjuÅ”i arÄ« jauko vÄrtÄ«bu Consul aÄ£entiem, t.i. palielinÄja prioritÄti, lai operÄtÄjsistÄma Consul procesiem dotu vairÄk laika darbam un koda izpildei. MÅ«su gadÄ«jumÄ tas atrisinÄja mÅ«su problÄmu.
- VÄl viena iespÄja ir neizmantot Consul. Man ir draugs, kurÅ” ir liels Etcd atbalstÄ«tÄjs. Un mÄs regulÄri ar viÅu strÄ«damies, kas ir labÄks utt. vai konsuls. Bet attiecÄ«bÄ uz to, kurÅ” ir labÄks, mÄs parasti piekrÄ«tam viÅam, ka Consulam ir aÄ£ents, kuram vajadzÄtu darboties katrÄ mezglÄ ar datu bÄzi. Tas ir, Patroni mijiedarbÄ«ba ar konsulu kopu notiek caur Å”o aÄ£entu. Un Å”is aÄ£ents kļūst par saÅ”aurinÄjumu. Ja ar aÄ£entu kaut kas notiek, tad Patroni vairs nevar strÄdÄt ar konsulu kopu. Un Ŕī ir problÄma. Etcd plÄnÄ aÄ£enta nav. Patroni var strÄdÄt tieÅ”i ar Etcd serveru sarakstu un jau sazinÄties ar tiem. Å ajÄ sakarÄ, ja savÄ uzÅÄmumÄ izmantojat Etcd, tad Etcd, iespÄjams, bÅ«s labÄka izvÄle nekÄ Consul. TaÄu mÅ«s, klientus, vienmÄr ierobežo tas, ko klients ir izvÄlÄjies un lieto. Un mums lielÄkoties ir konsuls visiem klientiem.
- Un pÄdÄjais punkts ir parametru vÄrtÄ«bu pÄrskatÄ«Å”ana. MÄs varam paaugstinÄt Å”os parametrus, cerot, ka mÅ«su Ä«stermiÅa tÄ«kla problÄmas bÅ«s Ä«slaicÄ«gas un neietilpst Ärpus Å”o parametru diapazona. TÄdÄ veidÄ mÄs varam samazinÄt Patroni agresivitÄti automÄtiskai failÄÅ”anai, ja rodas dažas tÄ«kla problÄmas.
Es domÄju, ka daudzi, kas izmanto Patroni, ir pazÄ«stami ar Å”o komandu.
Å Ä« komanda parÄda paÅ”reizÄjo klastera stÄvokli. Un no pirmÄ acu uzmetiena Å”is attÄls var Ŕķist normÄls. Mums ir meistars, mums ir replika, nav replikÄcijas kavÄÅ”anÄs. Bet Å”is attÄls ir normÄls, lÄ«dz mÄs zinÄm, ka Å”ajÄ klasterÄ« ir jÄbÅ«t trim mezgliem, nevis diviem.
AttiecÄ«gi bija autofails. Un pÄc Ŕī automÄtiskÄ faila mÅ«su kopija pazuda. Mums jÄnoskaidro, kÄpÄc viÅa pazuda, un jÄatgriež, jÄatjauno. Un mÄs atkal ejam uz žurnÄliem un noskaidrojam, kÄpÄc mums bija automÄtiska failu pÄrslÄgÅ”ana.
Å ajÄ gadÄ«jumÄ par meistaru kļuva otrÄ kopija. Å eit viss ir kÄrtÄ«bÄ.
Un mums ir jÄaplÅ«ko kopija, kas nokrita un kura nav klasterÄ«. MÄs atveram Patroni žurnÄlus un redzam, ka mums radÄs problÄma, veidojot savienojumu ar kopu pg_rewind posmÄ. Lai izveidotu savienojumu ar klasteru, jums ir jÄattina darÄ«jumu žurnÄls, jÄpieprasa nepiecieÅ”amais darÄ«jumu žurnÄls no galvenÄ un jÄizmanto tas, lai panÄktu galveno.
Å ajÄ gadÄ«jumÄ mums nav darÄ«jumu žurnÄla, un reprodukciju nevar palaist. AttiecÄ«gi mÄs apturam Postgres ar kļūdu. Un tÄpÄc tas nav klasterÄ«.
Mums ir jÄsaprot, kÄpÄc tas nav klasterÄ« un kÄpÄc nebija žurnÄlu. Ejam pie jaunÄ meistara un skatÄmies, kas viÅam ir baļķos. IzrÄdÄs, kad pg_rewind tika izdarÄ«ts, notika kontrolpunkts. Un daži vecie darÄ«jumu žurnÄli tika vienkÄrÅ”i pÄrdÄvÄti. Kad vecais meistars mÄÄ£inÄja pieslÄgties jaunajam meistaram un vaicÄt Å”os žurnÄlus, tie jau tika pÄrdÄvÄti, tie vienkÄrÅ”i neeksistÄja.
Es salÄ«dzinÄju laikspiedolus, kad Å”ie notikumi notika. Un tur atŔķirÄ«ba ir burtiski 150 milisekundes, tas ir, kontrolpunkts tika pabeigts 369 milisekundÄs, WAL segmenti tika pÄrdÄvÄti. Un burtiski 517. gadÄ pÄc 150 milisekundÄm sÄkÄs vecÄs kopijas attÄ«Å”ana. Tas ir, burtiski mums pietika ar 150 milisekundÄm, lai kopija nevarÄtu izveidot savienojumu un nopelnÄ«t.
KÄdas ir iespÄjas?
SÄkotnÄji mÄs izmantojÄm replikÄcijas slotus. MÄs domÄjÄm, ka tas ir labi. Lai gan pirmajÄ darbÄ«bas posmÄ mÄs izslÄdzÄm slotus. Mums Ŕķita, ka, ja sloti uzkrÄj daudz WAL segmentu, mÄs varam nomest master. ViÅÅ” nokritÄ«s. MÄs kÄdu laiku cietÄm bez laika niÅ”Äm. Un mÄs sapratÄm, ka mums vajag slotus, mÄs atdevÄm slotus.
Bet Å”eit ir problÄma, ka, kad galvenais dodas uz repliku, tas dzÄÅ” slotus un izdzÄÅ” WAL segmentus kopÄ ar slotiem. Un, lai novÄrstu Å”o problÄmu, mÄs nolÄmÄm paaugstinÄt parametru wal_keep_segments. PÄc noklusÄjuma tas ir 8 segmenti. MÄs to palielinÄjÄm lÄ«dz 1 un paskatÄ«jÄmies, cik daudz brÄ«vas vietas mums ir. Un mÄs ziedojÄm 000 gigabaitus wal_keep_segments. Tas ir, pÄrslÄdzoties, mums vienmÄr ir 16 gigabaitu rezerve darÄ«jumu žurnÄliem visos mezglos.
Un plus - tas joprojÄm ir aktuÄls ilgtermiÅa apkopes darbiem. PieÅemsim, ka mums ir jÄatjaunina viena no replikÄm. Un mÄs vÄlamies to izslÄgt. Mums ir jÄatjaunina programmatÅ«ra, varbÅ«t operÄtÄjsistÄma, kaut kas cits. Un, kad mÄs izslÄdzam repliku, tiek noÅemts arÄ« Ŕīs kopijas slots. Un, ja mÄs izmantojam nelielu wal_keep_segments, tad, ja reprodukcija ilgstoÅ”i nebÅ«s, darÄ«jumu žurnÄli tiks zaudÄti. MÄs izveidosim repliku, tas pieprasÄ«s tos darÄ«jumu žurnÄlus, kur tas apstÄjÄs, bet tie var nebÅ«t galvenajÄ. Un arÄ« kopija nevarÄs izveidot savienojumu. TÄpÄc mÄs glabÄjam lielus žurnÄlu krÄjumus.
Mums ir ražoÅ”anas bÄze. Projekti jau ir procesÄ.
Bija failÄtÄjs. IegÄjÄm un skatÄ«jÄmies - viss kÄrtÄ«bÄ, replikas savÄs vietÄs, replikÄcijas aizkavÄÅ”anÄs nav. ArÄ« žurnÄlos kļūdu nav, viss kÄrtÄ«bÄ.
Produkta komanda saka, ka vajadzÄtu bÅ«t dažiem datiem, bet mÄs tos redzam no viena avota, bet mÄs tos neredzam datu bÄzÄ. Un mums ir jÄsaprot, kas ar viÅiem notika.
Skaidrs, ka pg_rewind tos palaida garÄm. MÄs to uzreiz sapratÄm, bet devÄmies skatÄ«ties, kas notiek.
ŽurnÄlos mÄs vienmÄr varam atrast, kad ir noticis fails, kurÅ” kļuva par meistaru, un mÄs varam noteikt, kurÅ” bija vecais meistars un kad viÅÅ” vÄlÄjÄs kļūt par repliku, t.i., Å”ie žurnÄli ir nepiecieÅ”ami, lai uzzinÄtu darÄ«jumu žurnÄlu apjomu, kas bija pazudis.
MÅ«su vecmeistars ir pÄrstartÄjis. Un Patroni tika reÄ£istrÄts autorun. UzsÄkta Patroni. PÄc tam viÅÅ” sÄka Postgres. PrecÄ«zÄk, pirms Postgres palaiÅ”anas un pirms tÄ izveidoÅ”anas par reprodukciju, Patroni uzsÄka pg_rewind procesu. AttiecÄ«gi viÅÅ” izdzÄsa daļu darÄ«jumu žurnÄlu, lejupielÄdÄja jaunus un izveidoja savienojumu. Å eit Patroni strÄdÄja gudri, tas ir, kÄ gaidÄ«ts. Klasteris ir atjaunots. Mums bija 3 mezgli, pÄc filera 3 mezgli - viss forÅ”i.
MÄs esam zaudÄjuÅ”i dažus datus. Un mums ir jÄsaprot, cik daudz mÄs esam zaudÄjuÅ”i. MÄs meklÄjam tieÅ”i to brÄ«di, kad mums bija attÄ«Å”ana. MÄs to varam atrast Å”Ädos žurnÄla ierakstos. SÄkÄs attÄ«Å”ana, tur kaut ko izdarÄ«ja un beidzÄs.
DarÄ«jumu žurnÄlÄ jÄatrod pozÄ«cija, kurÄ vecais meistars pÄrtrauca darbu. Å ajÄ gadÄ«jumÄ Å”Ä« ir zÄ«me. Un mums ir vajadzÄ«ga otrÄ atzÄ«me, tas ir, attÄlums, ar kuru vecais meistars atŔķiras no jaunÄ.
MÄs Åemam parasto pg_wal_lsn_diff un salÄ«dzinÄm Ŕīs divas atzÄ«mes. Un Å”ajÄ gadÄ«jumÄ mÄs iegÅ«stam 17 megabaitus. Daudz vai maz, katrs izlemj pats. Jo kÄdam 17 megabaiti nav daudz, kÄdam tas ir daudz un nepieÅemami. Å eit katrs indivÄ«ds nosaka pats atbilstoÅ”i biznesa vajadzÄ«bÄm.
Bet ko mÄs paÅ”i esam noskaidrojuÅ”i?
PirmkÄrt, mums paÅ”iem ir jÄizlemj ā vai mums vienmÄr ir nepiecieÅ”ams Patroni, lai pÄc sistÄmas atsÄknÄÅ”anas automÄtiski startÄtu? Bieži gadÄs, ka jÄiet pie vecmeistara, jÄskatÄs, cik tÄlu viÅÅ” ir aizgÄjis. VarbÅ«t pÄrbaudiet darÄ«jumu žurnÄla segmentus un skatiet, kas tur ir. Un saprast, vai mÄs varam pazaudÄt Å”os datus, vai arÄ« mums ir jÄpalaiž vecais meistars savrupajÄ režīmÄ, lai Å”os datus izÅemtu.
Un tikai pÄc tam mums ir jÄizlemj, vai mÄs varam izmest Å”os datus vai varam tos atjaunot, pievienojiet Å”o mezglu kÄ kopiju mÅ«su klasterim.
TurklÄt ir parametrs "maximum_lag_on_failover". PÄc noklusÄjuma, ja mana atmiÅa mani neviļ, Ŕī parametra vÄrtÄ«ba ir 1 megabaits.
KÄ viÅÅ” strÄdÄ? Ja mÅ«su replika replikÄcijas aizkavÄ atpaliek par 1 megabaitu datu, tad Ŕī replika nepiedalÄs vÄlÄÅ”anÄs. Un, ja pÄkÅ”Åi notiek failu pÄrvÄrÅ”ana, Patroni skatÄs, kuras kopijas atpaliek. Ja viÅiem atpaliek liels skaits darÄ«jumu žurnÄlu, viÅi nevar kļūt par meistaru. Å Ä« ir ļoti laba droŔības funkcija, kas neļauj zaudÄt daudz datu.
Bet pastÄv problÄma, ka replikÄcijas aizkave Patroni klasterÄ« un DCS tiek atjauninÄta ar noteiktu intervÄlu. Es domÄju, ka 30 sekundes ir noklusÄjuma ttl vÄrtÄ«ba.
AttiecÄ«gi var bÅ«t situÄcija, ka replikÄm DCS ir viena replikÄcijas nobÄ«de, bet patiesÄ«bÄ var bÅ«t pavisam cita nobÄ«de vai arÄ« lag nav vispÄr, t.i., Ŕī lieta nav reÄllaika. Un tas ne vienmÄr atspoguļo patieso ainu. Un nav vÄrts ar to nodarboties ar izdomÄtu loÄ£iku.
Un zaudÄjuma risks vienmÄr paliek. Un sliktÄkajÄ gadÄ«jumÄ viena formula, bet vidÄjÄ gadÄ«jumÄ cita formula. Tas ir, plÄnojot Patroni ievieÅ”anu un izvÄrtÄjot, cik daudz datu varam zaudÄt, mums jÄpaļaujas uz Ŕīm formulÄm un aptuveni jÄiedomÄjas, cik daudz datu varam zaudÄt.
Un ir labas ziÅas. Kad vecmeistars ir gÄjis pa priekÅ”u, tad kaut kÄdu fona procesu dÄļ var iet uz priekÅ”u. Tas ir, bija kaut kÄds autovakuums, viÅÅ” ierakstÄ«ja datus, saglabÄja tos darÄ«jumu žurnÄlÄ. Un mÄs varam viegli ignorÄt un zaudÄt Å”os datus. Å ajÄ gadÄ«jumÄ nav nekÄdu problÄmu.
Un Å”Ädi izskatÄs žurnÄli, ja ir iestatÄ«ts maximum_lag_on_failover un ir noticis fails, un jums ir jÄizvÄlas jauns galvenais. Replika sevi vÄrtÄ kÄ nespÄjÄ«gu piedalÄ«ties vÄlÄÅ”anÄs. Un viÅa atsakÄs piedalÄ«ties sacÄ«kstÄs par lÄ«deri. Un viÅa gaida, kad tiks izvÄlÄts jauns meistars, lai pÄc tam varÄtu ar to pieslÄgties. Tas ir papildu pasÄkums pret datu zudumu.
Å eit mums ir produktu komanda, kas rakstÄ«ja, ka viÅu produktam ir problÄmas ar Postgres. TajÄ paÅ”Ä laikÄ nevar piekļūt paÅ”am galvenajam, jo āātas nav pieejams caur SSH. Un arÄ« automÄtiskais fails nenotiek.
Å is saimniekdators bija spiests atsÄknÄt. AtsÄknÄÅ”anas dÄļ notika automÄtisks fails, lai gan, kÄ es tagad saprotu, bija iespÄjams veikt manuÄlu automÄtisko failu. Un pÄc pÄrstartÄÅ”anas mÄs jau skatÄ«simies, kas mums bija ar paÅ”reizÄjo meistaru.
TajÄ paÅ”Ä laikÄ mÄs jau iepriekÅ” zinÄjÄm, ka mums ir problÄmas ar diskiem, tas ir, mÄs jau no uzraudzÄ«bas zinÄjÄm, kur rakt un ko meklÄt.
IekÄpÄm postgres žurnÄlÄ, sÄkÄm skatÄ«ties, kas tur notiek. MÄs redzÄjÄm saistÄ«bas, kas tur ilgst vienu, divas, trÄ«s sekundes, kas nebÅ«t nav normÄli. MÄs redzÄjÄm, ka mÅ«su autovakuums ieslÄdzas ļoti lÄni un dÄ«vaini. Un mÄs diskÄ redzÄjÄm pagaidu failus. Tas ir, tie visi liecina par problÄmÄm ar diskiem.
MÄs apskatÄ«jÄm sistÄmas dmesg (kodola žurnÄlu). Un mÄs redzÄjÄm, ka mums ir problÄmas ar vienu no diskiem. Diska apakÅ”sistÄma bija programmatÅ«ra Raid. MÄs apskatÄ«jÄm /proc/mdstat un redzÄjÄm, ka mums trÅ«kst viena diska. Tas ir, ir 8 disku reids, mums viena trÅ«kst. Ja uzmanÄ«gi aplÅ«ko slaidu, tad izvadÄ var redzÄt, ka mums tur nav sde. Pie mums, nosacÄ«ti runÄjot, disks ir izkritis. Tas izraisÄ«ja diska problÄmas, un arÄ« lietojumprogrammÄm radÄs problÄmas, strÄdÄjot ar Postgres kopu.
Un Å”ajÄ gadÄ«jumÄ Patroni mums nekÄdi nepalÄ«dzÄtu, jo Patroni nav uzdevums uzraudzÄ«t servera stÄvokli, diska stÄvokli. Un mums ir jÄuzrauga Å”Ädas situÄcijas ar ÄrÄju uzraudzÄ«bu. MÄs Ätri pievienojÄm diska uzraudzÄ«bu ÄrÄjai uzraudzÄ«bai.
Un radÄs tÄda doma ā vai paukoÅ”anas vai sargsuÅa programmatÅ«ra mums varÄtu palÄ«dzÄt? DomÄjÄm, ka viÅÅ” Å”ajÄ gadÄ«jumÄ diez vai mums bÅ«tu palÄ«dzÄjis, jo problÄmu laikÄ Patroni turpinÄja sadarboties ar DCS klasteri un nesaskatÄ«ja nekÄdu problÄmu. Tas ir, no DCS un Patroni viedokļa ar klasteru viss bija kÄrtÄ«bÄ, lai gan patiesÄ«bÄ bija problÄmas ar disku, bija problÄmas ar datu bÄzes pieejamÄ«bu.
ManuprÄt, Ŕī ir viena no dÄ«vainÄkajÄm problÄmÄm, ko esmu pÄtÄ«jis ļoti ilgi, esmu lasÄ«jis daudz žurnÄlus, pÄrlasÄ«jis un nosaucis to par klasteru simulatoru.
ProblÄma bija tÄ, ka vecais meistars nevarÄja kļūt par normÄlu repliku, t.i. Patroni to palaida, Patroni parÄdÄ«ja, ka Å”is mezgls bija klÄt kÄ replika, bet tajÄ paÅ”Ä laikÄ tÄ nebija normÄla kopija. Tagad jÅ«s redzÄsiet, kÄpÄc. Tas ir tas, ko es esmu atturÄjis no Ŕīs problÄmas analÄ«zes.
Un kÄ tas viss sÄkÄs? SÄkÄs, tÄpat kÄ iepriekÅ”ÄjÄ problÄmÄ, ar disku bremzÄm. Mums bija saistÄ«bas uz sekundi, divÄm.
Bija sakaru pÄrtraukumi, t.i., tika saplÄsti klienti.
Bija dažÄda smaguma aizsprostojumi.
Un attiecÄ«gi diska apakÅ”sistÄma nav Ä«paÅ”i atsaucÄ«ga.
Un visnoslÄpumainÄkais man ir tÅ«lÄ«tÄjais izslÄgÅ”anas pieprasÄ«jums, kas tika saÅemts. Postgres ir trÄ«s izslÄgÅ”anas režīmi:
- Tas ir jauki, kad mÄs gaidÄm, kad visi klienti atvienosies paÅ”i.
- Ir Ätri, kad mÄs piespiežam klientus atvienoties, jo mÄs gatavojamies izslÄgt.
- Un nekavÄjoties. Å ajÄ gadÄ«jumÄ tÅ«lÄ«tÄja pat neliek klientiem izslÄgt, tas vienkÄrÅ”i izslÄdzas bez brÄ«dinÄjuma. Un visiem klientiem operÄtÄjsistÄma jau sÅ«ta RST ziÅojumu (TCP ziÅojumu, ka savienojums ir pÄrtraukts un klientam vairs nav ko Ä·ert).
Kas sÅ«tÄ«ja Å”o signÄlu? Postgres fona procesi Å”Ädus signÄlus viens otram nesÅ«ta, t.i., tas ir kill-9. ViÅi nesÅ«ta tÄdas lietas viens otram, viÅi tikai reaÄ£Ä uz tÄdÄm lietÄm, t.i., Ŕī ir Postgres avÄrijas restartÄÅ”ana. Kas to sÅ«tÄ«ja, es nezinu.
Es paskatÄ«jos uz "pÄdÄjo" komandu un redzÄju vienu cilvÄku, kurÅ” arÄ« pieteicÄs Å”ajÄ serverÄ« kopÄ ar mums, bet es biju pÄrÄk kautrÄ«gs, lai uzdotu jautÄjumu. VarbÅ«t tas bija nogalinÄt -9. Es redzÄtu nogalinÄt -9 baļķos, jo Postgres saka, ka vajadzÄja kill -9, bet es to neredzÄju žurnÄlos.
Paskatoties tÄlÄk, redzÄju, ka Patroni diezgan ilgi nerakstÄ«ja žurnÄlam - 54 sekundes. Un, ja salÄ«dzinÄm divus laikspiedolus, aptuveni 54 sekundes nebija neviena ziÅojuma.
Un Å”ajÄ laikÄ notika autofails. Patroni Å”eit atkal paveica lielisku darbu. MÅ«su vecmeistars nebija pieejams, ar viÅu kaut kas notika. Un sÄkÄs jauna meistara vÄlÄÅ”anas. Å eit viss izdevÄs labi. MÅ«su pgsql01 ir kļuvis par jauno lÄ«deri.
Mums ir kopija, kas ir kļuvusi par meistaru. Un ir arÄ« otra atbilde. Un bija problÄmas ar otro repliku. ViÅa mÄÄ£inÄja pÄrkonfigurÄt. KÄ es saprotu, viÅa mÄÄ£inÄja mainÄ«t recovery.conf, restartÄt Postgres un izveidot savienojumu ar jauno meistaru. ViÅa ik pÄc 10 sekundÄm raksta ziÅas, ka mÄÄ£ina, bet viÅai neizdodas.
Un Å”o mÄÄ£inÄjumu laikÄ vecmeistaram pienÄk tÅ«lÄ«tÄjas izslÄgÅ”anas signÄls. Master ir restartÄts. Un arÄ« atkopÅ”ana apstÄjas, jo vecais meistars pÄrstartÄjas. Tas nozÄ«mÄ, ka kopija nevar izveidot savienojumu ar to, jo tÄ ir izslÄgÅ”anas režīmÄ.
KÄdÄ brÄ«dÄ« tas darbojÄs, bet replikÄcija nesÄkÄs.
Mans vienÄ«gais minÄjums ir tÄds, ka failÄ recovery.conf bija veca galvenÄ adrese. Un, kad parÄdÄ«jÄs jauns meistars, otrÄ kopija joprojÄm mÄÄ£inÄja savienoties ar veco meistaru.
Kad Patroni startÄja otrajÄ reprodukcijÄ, mezgls tika palaists, bet nevarÄja replicÄt. Un izveidojÄs replikÄcijas nobÄ«de, kas izskatÄ«jÄs apmÄram Å”Ädi. Tas ir, visi trÄ«s mezgli bija savÄs vietÄs, bet otrais mezgls atpalika.
TajÄ paÅ”Ä laikÄ, ja paskatÄs uz ierakstÄ«tajiem žurnÄliem, var redzÄt, ka replikÄciju nevarÄja sÄkt, jo darÄ«jumu žurnÄli bija atŔķirÄ«gi. Un tie darÄ«jumu žurnÄli, ko piedÄvÄ meistars un kas ir norÄdÄ«ti atkopÅ”anas.conf, vienkÄrÅ”i neatbilst mÅ«su paÅ”reizÄjam mezglam.
Un Å”eit es pieļÄvu kļūdu. Man bija jÄierodas un jÄskatÄs, kas ir failÄ recovery.conf, lai pÄrbaudÄ«tu savu hipotÄzi, ka mÄs izveidojam savienojumu ar nepareizo meistaru. Bet tad es tikai ar to nodarbojos, un man tas neienÄca prÄtÄ, vai arÄ« es redzÄju, ka kopija atpaliek un bÅ«s jÄuzpilda, tas ir, es kaut kÄ strÄdÄju neuzmanÄ«gi. Å Ä« bija mana locÄ«tava.
PÄc 30 minÅ«tÄm jau ieradÄs admins, t.i., es restartÄju Patroni uz replikas. Pieliku jau punktu, izdomÄju, ka bÅ«s jÄuzpilda. Un domÄju ā restartÄÅ”u Patroni, varbÅ«t iznÄks kas labs. SÄkÄs atveseļoÅ”anÄs. Un bÄze pat atvÄrÄs, tÄ bija gatava pieÅemt savienojumus.
Ir sÄkusies replikÄcija. TaÄu pÄc minÅ«tes viÅa nokrita ar kļūdu, ka darÄ«jumu žurnÄli viÅai nav piemÄroti.
Es domÄju, ka es restartÄÅ”u vÄlreiz. Es vÄlreiz restartÄju Patroni un nevis Postgres restartÄju, bet gan Patroni, cerot, ka tas maÄ£iski sÄks datu bÄzi.
ReplikÄcija sÄkÄs no jauna, bet atzÄ«mes darÄ«jumu žurnÄlÄ bija atŔķirÄ«gas, tÄs nebija tÄdas paÅ”as kÄ iepriekÅ”ÄjÄ starta mÄÄ£inÄjumÄ. ReplikÄcija atkal tika apturÄta. Un vÄstÄ«jums jau bija nedaudz atŔķirÄ«gs. Un tas man nebija Ä«paÅ”i informatÄ«vs.
Un tad man ienÄk prÄtÄ - kÄ bÅ«tu, ja es restartÄju Postgres, Å”ajÄ laikÄ es izveidoju kontrolpunktu uz paÅ”reizÄjo galveno, lai pÄrvietotu punktu darÄ«jumu žurnÄlÄ nedaudz uz priekÅ”u, lai atkopÅ”ana sÄktos no cita brīža? TurklÄt mums joprojÄm bija WAL krÄjumi.
Es restartÄju Patroni, veicu pÄris kontrolpunktus uz galveno, pÄris restartÄÅ”anas punktus uz replikas, kad tÄ tika atvÄrta. Un tas palÄ«dzÄja. Es ilgi domÄju, kÄpÄc tas palÄ«dzÄja un kÄ tas darbojas. Un replika sÄkÄs. Un replikÄcija vairs nebija saplÄsta.
TÄda problÄma man ir viena no mistiskÄkajÄm, par kuru es joprojÄm prÄtoju, kas tur Ä«sti notika.
KÄdas ir sekas Å”eit? Patroni var strÄdÄt kÄ paredzÄts un bez kļūdÄm. Bet tajÄ paÅ”Ä laikÄ tas nav 100% garantija, ka ar mums viss ir kÄrtÄ«bÄ. Replika var sÄkties, bet tÄ var bÅ«t daļÄji darba stÄvoklÄ«, un lietojumprogramma nevar strÄdÄt ar Å”Ädu repliku, jo bÅ«s veci dati.
Un pÄc failÄtÄja vienmÄr ir jÄpÄrbauda, āāvai ar klasteru viss ir kÄrtÄ«bÄ, tas ir, ir nepiecieÅ”amais replikÄciju skaits, nav replikÄcijas nobÄ«des.
Kad mÄs izskatÄ«sim Å”os jautÄjumus, es sniegÅ”u ieteikumus. Es mÄÄ£inÄju tos apvienot divos slaidos. IespÄjams, visus stÄstus varÄtu apvienot divos slaidos un tikai izstÄstÄ«t.
Lietojot Patroni, jums ir jÄveic uzraudzÄ«ba. Jums vienmÄr jÄzina, kad notika automÄtiskÄ failu pÄrvÄrÅ”ana, jo, ja nezinÄt, ka jums ir bijusi automÄtiskÄ failu pÄrvÄrÅ”ana, jÅ«s nevarat kontrolÄt kopu. Un tas ir slikti.
PÄc katra faila mums vienmÄr ir manuÄli jÄpÄrbauda klasteris. Mums ir jÄpÄrliecinÄs, ka mums vienmÄr ir atjauninÄts reprodukciju skaits, nav replikÄcijas aizkaves, nav kļūdu žurnÄlos, kas saistÄ«ti ar straumÄÅ”anas replikÄciju, izmantojot Patroni, ar DCS sistÄmu.
AutomatizÄcija var veiksmÄ«gi darboties, Patroni ir ļoti labs instruments. Tas var darboties, taÄu tas nenovedÄ«s klasteru vÄlamajÄ stÄvoklÄ«. Un, ja mÄs par to neuzzinÄsim, mÄs nonÄksim nepatikÅ”anÄs.
Un Patroni nav sudraba lode. Mums joprojÄm ir jÄsaprot, kÄ darbojas Postgres, kÄ darbojas replikÄcija un kÄ Patroni darbojas ar Postgres, un kÄ tiek nodroÅ”inÄta saziÅa starp mezgliem. Tas ir nepiecieÅ”ams, lai varÄtu novÄrst problÄmas ar rokÄm.
KÄ pievÄrsties diagnozes jautÄjumam? SanÄca tÄ, ka strÄdÄjam ar dažÄdiem klientiem un nevienam nav ELK kaudzes, un mums ir jÄsakÄrto žurnÄli, atverot 6 konsoles un 2 cilnes. VienÄ cilnÄ tie ir katra mezgla Patroni žurnÄli, otrÄ cilnÄ tie ir Consul žurnÄli vai, ja nepiecieÅ”ams, Postgres. To ir ļoti grÅ«ti diagnosticÄt.
KÄdas pieejas esmu izstrÄdÄjis? PirmkÄrt, es vienmÄr skatos, kad ir ieradies fails. Un man Ŕī ir Å«densŔķirtne. Es skatos, kas notika pirms vÄ«lÄ«tes, faila laikÄ un pÄc faila. Fileover ir divas atzÄ«mes: tas ir sÄkuma un beigu laiks.
PÄc tam es meklÄju žurnÄlos notikumus pirms faila, kas bija pirms faila, t.i., es meklÄju iemeslus, kÄpÄc fails notika.
Un tas dod priekÅ”statu par to, kÄ saprast, kas noticis un ko var darÄ«t nÄkotnÄ, lai Å”Ädi apstÄkļi nerastos (un rezultÄtÄ nav faila).
Un kur mÄs parasti skatÄmies? ES skatos:
- PirmkÄrt, uz Patroni žurnÄliem.
- TÄlÄk es aplÅ«koju Postgres žurnÄlus vai DCS žurnÄlus atkarÄ«bÄ no tÄ, kas tika atrasts Patroni žurnÄlos.
- Un arÄ« sistÄmas žurnÄli dažkÄrt sniedz izpratni par to, kas izraisÄ«ja failu.
KÄ es jÅ«tos pret Patroni? Man ar Patroni ir ļoti labas attiecÄ«bas. ManuprÄt, tas ir labÄkais, kÄds Å”odien ir. Es zinu daudzus citus produktus. Tie ir Stolon, Repmgr, Pg_auto_failover, PAF. 4 instrumenti. Es tos visus izmÄÄ£inÄju. Patroni ir mans mīļÄkais.
Ja viÅi man jautÄ: "Vai es iesaku Patroni?". TeikÅ”u jÄ, jo man patÄ«k Patroni. Un es domÄju, ka es iemÄcÄ«jos to pagatavot.
Ja vÄlaties uzzinÄt, kÄdas ir citas problÄmas ar Patroni bez manis minÄtajÄm problÄmÄm, vienmÄr varat apskatÄ«t lapu
Ir daži interesanti stÄsti par cilvÄkiem, kuri Å”auj sev kÄjÄ. Ä»oti informatÄ«vs. JÅ«s izlasiet un saprotat, ka tas nav jÄdara. Es atzÄ«mÄju sevi.
Un es vÄlos teikt lielu paldies Zalando par Ŕī projekta izstrÄdi, proti, Aleksandram KukuÅ”kinam un Aleksejam Kļukinam. Aleksejs Kļukins ir viens no lÄ«dzautoriem, viÅÅ” vairs nestrÄdÄ Zalando, taÄu tie ir divi cilvÄki, kas sÄka strÄdÄt ar Å”o produktu.
Un es domÄju, ka Patroni ir ļoti forÅ”a lieta. PriecÄjos, ka viÅa eksistÄ, ar viÅu ir interesanti. Un liels paldies visiem atbalstÄ«tÄjiem, kuri raksta ielÄpus Patroni. Es ceru, ka Patroni ar vecumu kļūs nobrieduÅ”Äks, forÅ”Äks un efektÄ«vÄks. Tas jau ir funkcionÄls, bet es ceru, ka tas kļūs vÄl labÄks. TÄpÄc, ja plÄnojat lietot Patroni, tad nebaidieties. Tas ir labs risinÄjums, to var ieviest un izmantot.
Tas ir viss. Ja jums ir jautÄjumi, jautÄjiet.
jautÄjumi
Paldies par ziÅojumu! Ja pÄc vÄ«lÄtÄja tur tomÄr vajag ļoti rÅ«pÄ«gi paskatÄ«ties, tad kÄpÄc mums vajadzÄ«gs automÄtiskais vÄ«lÄtÄjs?
Jo tÄs ir jaunas lietas. MÄs ar viÅu esam tikai gadu. LabÄk bÅ«t droÅ”am. MÄs vÄlamies ienÄkt un redzÄt, ka viss tieÅ”Äm ir izdevies tÄ, kÄ tam vajadzÄtu bÅ«t. Tas ir pieauguÅ”o neuzticÄ«bas lÄ«menis - labÄk vÄlreiz pÄrbaudÄ«t un redzÄt.
PiemÄram, mÄs gÄjÄm no rÄ«ta un paskatÄ«jÄmies, vai ne?
Ne no rÄ«ta, mÄs parasti uzzinÄm par automÄtisko failu gandrÄ«z nekavÄjoties. MÄs saÅemam paziÅojumus, redzam, ka ir noticis automÄtiskais fails. GandrÄ«z uzreiz ejam un skatÄmies. TaÄu visas Ŕīs pÄrbaudes ir jÄnovirza uzraudzÄ«bas lÄ«menÄ«. Ja piekļūstat Patroni, izmantojot REST API, pastÄv vÄsture. PÄc vÄstures varat redzÄt laikspiedolus, kad notika fails. Pamatojoties uz to, var veikt uzraudzÄ«bu. Var redzÄt vÄsturi, cik notikumu bija. Ja mums ir vairÄk notikumu, ir noticis automÄtiskais fails. JÅ«s varat iet un redzÄt. Vai arÄ« mÅ«su uzraudzÄ«bas automatizÄcija pÄrbaudÄ«ja, vai mums ir visas kopijas, nav aizkavÄÅ”anÄs un viss ir kÄrtÄ«bÄ.
Paldies!
Liels paldies par lielisko stÄstu! Ja mÄs DCS klasteri pÄrcÄlÄm kaut kur tÄlu no Postgres klastera, tad arÄ« Å”im klasterim ir periodiski jÄkopj? KÄda ir labÄkÄ prakse, kad daži DCS klastera elementi ir jÄizslÄdz, ar tiem kaut kas jÄdara utt.? KÄ visa Ŕī struktÅ«ra izdzÄ«vo? Un kÄ jÅ«s darÄt Ŕīs lietas?
Vienam uzÅÄmumam bija jÄizveido problÄmu matrica, kas notiek, ja sabojÄjas kÄda no sastÄvdaļÄm vai vairÄkas sastÄvdaļas. SaskaÅÄ ar Å”o matricu mÄs secÄ«gi izejam cauri visiem komponentiem un veidojam scenÄrijus Å”o komponentu atteices gadÄ«jumÄ. AttiecÄ«gi katram kļūmes scenÄrijam jums var bÅ«t rÄ«cÄ«bas plÄns atveseļoÅ”anai. Un DCS gadÄ«jumÄ tÄ ir daļa no standarta infrastruktÅ«ras. Un administrators to administrÄ, un mÄs jau paļaujamies uz administratoriem, kas to administrÄ, un viÅu spÄju to novÄrst negadÄ«jumu gadÄ«jumÄ. Ja DCS vispÄr nav, tad izvietojam, bet tajÄ paÅ”Ä laikÄ Ä«paÅ”i neuzraugÄm, jo āāneatbildam par infrastruktÅ«ru, bet sniedzam ieteikumus, kÄ un ko uzraudzÄ«t.
Tas ir, vai es pareizi sapratu, ka man ir jÄatspÄjo Patroni, jÄatspÄjo fails, jÄatspÄjo viss, pirms kaut ko daru ar saimniekiem?
Tas ir atkarÄ«gs no tÄ, cik mezglu mums ir DCS klasterÄ«. Ja mezglu ir daudz un ja mÄs atspÄjojam tikai vienu no mezgliem (reprodukciju), tad klasteris uztur kvorumu. Un Patroni turpina darboties. Un nekas netiek iedarbinÄts. Ja mums ir dažas sarežģītas darbÄ«bas, kas ietekmÄ vairÄk mezglu, kuru neesamÄ«ba var sabojÄt kvorumu, tad - jÄ, varÄtu bÅ«t jÄga Patroni apturÄt. Tam ir atbilstoÅ”a komanda - patronictl pause, patronictl resume. MÄs vienkÄrÅ”i pauzÄjam, un automÄtiskais fails tajÄ laikÄ nedarbojas. MÄs veicam DCS klastera apkopi, pÄc tam pÄrtraucam pauzi un turpinÄm dzÄ«vot.
Thank you very much!
Liels paldies par ziÅojumu! KÄ produktu komanda uztver datu zudumu?
Produktu komandÄm ir vienalga, un komandu vadÄ«tÄji ir noraizÄjuÅ”ies.
KÄdas ir garantijas?
Garantijas ir ļoti sarežģītas. Aleksandram KukuÅ”kinam ir ziÅojums āKÄ aprÄÄ·inÄt RPO un RTOā, t.i., atkopÅ”anas laiks un cik daudz datu varam zaudÄt. Es domÄju, ka mums ir jÄatrod Å”ie slaidi un tie jÄizpÄta. Cik atceros, ir konkrÄti soļi, kÄ Å”Ä«s lietas aprÄÄ·inÄt. Cik daudz darÄ«jumu mÄs varam zaudÄt, cik daudz datu varam zaudÄt. KÄ opciju mÄs varam izmantot sinhrono replikÄciju Patroni lÄ«menÄ«, taÄu tas ir abpusÄji griezÄ«gs zobens: vai nu mums ir datu uzticamÄ«ba, vai arÄ« mÄs zaudÄjam Ätrumu. Ir sinhronÄ replikÄcija, taÄu tÄ arÄ« negarantÄ 100% aizsardzÄ«bu pret datu zudumu.
Aleksej, paldies par lielisko ziÅojumu! Vai jums ir pieredze ar Patroni izmantoÅ”anu nulles lÄ«meÅa aizsardzÄ«bai? Tas ir, savienojumÄ ar sinhrono gaidÄ«Å”anas režīmu? Å is ir pirmais jautÄjums. Un otrais jautÄjums. JÅ«s esat izmantojis dažÄdus risinÄjumus. MÄs izmantojÄm Repmgr, bet bez autofiler, un tagad mÄs plÄnojam iekļaut autofiler. Un mÄs uzskatÄm Patroni kÄ alternatÄ«vu risinÄjumu. Ko jÅ«s varat teikt kÄ priekÅ”rocÄ«bas salÄ«dzinÄjumÄ ar Repmgr?
Pirmais jautÄjums bija par sinhronajÄm replikÄm. Sinhrono replikÄciju Å”eit neviens neizmanto, jo visi baidÄs (vairÄki klienti jau to izmanto, principÄ viÅi nepamanÄ«ja veiktspÄjas problÄmas - RunÄtÄja piezÄ«me). Bet mÄs paÅ”i esam izstrÄdÄjuÅ”i noteikumu, ka sinhronÄs replikÄcijas klasterÄ« ir jÄbÅ«t vismaz trim mezgliem, jo, ja mums ir divi mezgli un ja galvenais vai replika neizdodas, tad Patroni pÄrslÄdz Å”o mezglu uz Standalone režīmu, lai programma turpinÄtu darboties. strÄdÄt. Å ajÄ gadÄ«jumÄ pastÄv datu zuduma risks.
AttiecÄ«bÄ uz otro jautÄjumu mÄs esam izmantojuÅ”i Repmgr un joprojÄm darÄm to ar dažiem klientiem vÄsturisku iemeslu dÄļ. Ko var teikt? Patroni komplektÄcijÄ ietilpst automÄtiskais filtrs, un Repmgr ir automÄtiskais filtrs kÄ papildu funkcija, kas ir jÄiespÄjo. Mums ir jÄpalaiž Repmgr dÄmons katrÄ mezglÄ, un tad mÄs varam konfigurÄt automÄtisko failu.
Repmgr pÄrbauda, āāvai Postgres mezgli ir dzÄ«vi. Repmgr procesi pÄrbauda viens otra esamÄ«bu, tÄ nav pÄrÄk efektÄ«va pieeja. var bÅ«t sarežģīti tÄ«kla izolÄcijas gadÄ«jumi, kad liels Repmgr klasteris var sadalÄ«ties vairÄkos mazÄkos un turpinÄt darbu. Sen nesekoju lÄ«dzi Repmgr, varbÅ«t salaboja...vai varbÅ«t nÄ. Bet informÄcijas noÅemÅ”ana par klastera stÄvokli DCS, kÄ to dara Stolon, Patroni, ir visizdevÄ«gÄkÄ iespÄja.
Aleksej, man ir jautÄjums, iespÄjams, lÄgÄks. VienÄ no pirmajiem piemÄriem jÅ«s pÄrvietojÄt DCS no vietÄjÄs maŔīnas uz attÄlo resursdatoru. MÄs saprotam, ka tÄ«kls ir lieta, kurai ir savas Ä«paŔības, tas dzÄ«vo pats par sevi. Un kas notiek, ja kÄda iemesla dÄļ DCS klasteris kļūst nepieejams? Iemeslus nepateikÅ”u, to var bÅ«t ļoti daudz: no tÄ«klotÄju lÄ«kajÄm rokÄm lÄ«dz reÄlÄm problÄmÄm.
Es to nepateicu skaļi, bet DCS klasterim ir jÄbÅ«t arÄ« kļūmjpÄrlÄcei, t.i., tas ir nepÄra skaits mezglu, lai nodroÅ”inÄtu kvorumu. Kas notiek, ja DCS klasteris kļūst nepieejams vai nevar sasniegt kvorumu, t.i., tÄ«kla sadalÄ«jums vai mezgla kļūme? Å ajÄ gadÄ«jumÄ Patroni klasteris pÄriet tikai lasÄ«Å”anas režīmÄ. Patroni klasteris nevar noteikt klastera stÄvokli un to, ko darÄ«t. Tas nevar sazinÄties ar DCS un saglabÄt tur jauno klastera stÄvokli, tÄpÄc viss klasteris tiek iestatÄ«ts tikai lasÄmÄ režīmÄ. Un gaida vai nu manuÄlu operatora iejaukÅ”anos, vai arÄ« DCS atjaunoÅ”anos.
Aptuveni runÄjot, DCS mums kļūst par tikpat svarÄ«gu pakalpojumu kÄ pati bÄze?
JÄ jÄ. Tik daudzos mÅ«sdienu uzÅÄmumos pakalpojumu atklÄÅ”ana ir neatÅemama infrastruktÅ«ras sastÄvdaļa. Tas tiek ieviests vÄl pirms tam, kad infrastruktÅ«rÄ vÄl nebija datu bÄzes. RelatÄ«vi runÄjot, infrastruktÅ«ra tika palaista, izvietota DC, un mums uzreiz ir Service Discovery. Ja tas ir konsuls, tad uz tÄ var izveidot DNS. Ja tas ir Etcd, iespÄjams, ir daļa no Kubernetes klastera, kurÄ tiks izvietots viss pÄrÄjais. Man Ŕķiet, ka Service Discovery jau ir mÅ«sdienu infrastruktÅ«ras neatÅemama sastÄvdaļa. Un viÅi par to domÄ daudz agrÄk nekÄ par datu bÄzÄm.
Paldies!
Avots: www.habr.com