Patroni Failure Stories oswa Ki jan fè aksidan gwoup PostgreSQL ou a. Alexey Lesovsky

Patroni Failure Stories oswa Ki jan fè aksidan gwoup PostgreSQL ou a. Alexey Lesovsky

Objektif prensipal Patroni se bay segondè disponiblite pou PostgreSQL. Men, Patroni se jis yon modèl, pa yon zouti ki pare (ki, an jeneral, yo di nan dokiman an). Nan premye gade, lè w te mete Patroni nan laboratwa tès la, ou ka wè ki sa yon gwo zouti li ye ak ki jan fasil li okipe tantativ nou yo kraze gwoup la. Sepandan, nan pratik, nan yon anviwònman pwodiksyon, tout bagay pa toujou rive tankou bèl ak elegant tankou nan yon laboratwa tès.

Patroni Failure Stories oswa Ki jan fè aksidan gwoup PostgreSQL ou a. Alexey Lesovsky

Mwen pral di ou yon ti kras sou tèt mwen. Mwen te kòmanse kòm yon administratè sistèm. Te travay nan devlopman entènèt. Mwen ap travay nan Data Egret depi 2014. Konpayi an angaje nan konsiltasyon nan domèn Postgres. Epi nou sèvi egzakteman Postgres, epi nou travay ak Postgres chak jou, kidonk nou gen diferan ekspètiz ki gen rapò ak operasyon an.

Ak nan fen 2018, nou te kòmanse tou dousman itilize Patroni. Ak kèk eksperyans te akimile. Nou yon jan kanmenm dyagnostike li, branche li, te rive nan pi bon pratik nou yo. Ak nan rapò sa a mwen pral pale sou yo.

Apa de Postgres, mwen renmen Linux. Mwen renmen pike nan li epi eksplore, mwen renmen kolekte nwayo. Mwen renmen Virtualization, kontenè, Docker, Kubernetes. Tout bagay sa yo enterese m, paske ansyen abitid admin yo ap afekte. Mwen renmen fè fas ak siveyans. Apre sa, mwen renmen postgres bagay ki gen rapò ak administrasyon, sa vle di replikasyon, backup. Ak nan tan lib mwen an mwen ekri nan Go. Mwen pa yon enjenyè lojisyèl, mwen jis ekri pou tèt mwen nan Go. Epi li ban m plezi.

Patroni Failure Stories oswa Ki jan fè aksidan gwoup PostgreSQL ou a. Alexey Lesovsky

  • Mwen panse ke anpil nan nou konnen ke Postgres pa gen HA (segondè disponiblite) soti nan bwat la. Pou jwenn HA, ou bezwen enstale yon bagay, konfigirasyon li, fè yon efò epi jwenn li.
  • Gen plizyè zouti ak Patroni se youn nan yo ki rezoud HA trè fre ak trè byen. Men, lè nou mete tout bagay nan yon laboratwa tès epi kouri li, nou ka wè ke tout bagay mache, nou ka repwodui kèk pwoblèm, wè ki jan Patroni sèvi yo. Epi nou pral wè ke li tout travay gwo.
  • Men, nan pratik, nou te fè fas a diferan pwoblèm. Apre sa, mwen pral pale sou pwoblèm sa yo.
  • Mwen pral di w ki jan nou dyagnostike li, ki sa nou tweaked - si li te ede nou oswa ou pa.

Patroni Failure Stories oswa Ki jan fè aksidan gwoup PostgreSQL ou a. Alexey Lesovsky

  • Mwen pa pral di ou ki jan yo enstale Patroni, paske ou ka google sou entènèt la, ou ka gade nan dosye yo konfigirasyon yo konprann ki jan tout bagay kòmanse, ki jan li se configuré. Ou ka konprann rapid yo, achitekti, jwenn enfòmasyon sou li sou entènèt la.
  • Mwen pa pral pale sou eksperyans yon lòt moun. Mwen pral sèlman pale sou pwoblèm yo ke nou te fè fas.
  • Apre sa, mwen pa pral pale sou pwoblèm ki deyò nan Patroni ak PostgreSQL. Si, pa egzanp, gen pwoblèm ki asosye ak balanse, lè gwoup nou an te tonbe, mwen pa pral pale sou li.

Patroni Failure Stories oswa Ki jan fè aksidan gwoup PostgreSQL ou a. Alexey Lesovsky

Ak yon ti dislaimer anvan nou kòmanse rapò nou an.

Tout pwoblèm sa yo ke nou te rankontre, nou te genyen yo nan premye 6-7-8 mwa operasyon yo. Apre yon tan, nou te rive nan pi bon pratik entèn nou yo. Epi pwoblèm nou yo te disparèt. Se poutèt sa, rapò a te anonse apeprè sis mwa de sa, lè li te tout fre nan tèt mwen epi mwen sonje li tout pafètman.

Nan kou a nan prepare rapò a, mwen deja leve fin vye granmoun postmortems, gade mòso bwa yo. Ak kèk nan detay yo ta ka bliye, oswa kèk nan kèk detay pa ta ka konplètman envestige pandan analiz la nan pwoblèm yo, kidonk nan kèk pwen li ka sanble ke pwoblèm yo pa konplètman konsidere, oswa gen kèk mank de enfòmasyon. Se konsa, mwen mande w eskize m pou moman sa a.

Patroni Failure Stories oswa Ki jan fè aksidan gwoup PostgreSQL ou a. Alexey Lesovsky

Ki sa ki Patroni?

  • Sa a se yon modèl pou bati HA. Se sa li di nan dokiman an. E de mon pwennvi, sa i en klarifikasyon tre korek. Patroni se pa yon bal an ajan ki pral rezoud tout pwoblèm ou yo, se sa ki, ou bezwen fè yon efò pou fè li mache ak pote benefis.
  • Sa a se yon sèvis ajan ki enstale sou chak sèvis baz done epi li se yon kalite sistèm init pou Postgres ou a. Li kòmanse Postgres, sispann, rekòmanse, rekonfigire, ak chanje topoloji gwoup ou a.
  • An konsekans, yo nan lòd yo estoke eta a nan gwoup la, reprezantasyon aktyèl li yo, jan li sanble, gen kèk kalite depo ki nesesè. Ak nan pwen de vi sa a, Patroni te pran chemen an nan estoke eta nan yon sistèm ekstèn. Li se yon sistèm depo konfigirasyon distribye. Li kapab Etcd, Consul, ZooKeeper, oswa kubernetes Etcd, sa vle di youn nan opsyon sa yo.
  • Ak youn nan karakteristik yo nan Patroni se ke ou jwenn autofiler la soti nan bwat la, sèlman pa mete l 'kanpe. Si nou pran Repmgr pou konparezon, Lè sa a, filer la enkli ladan li. Avèk Repmgr, nou jwenn yon switchover, men si nou vle yon autofiler, Lè sa a, nou bezwen konfigirasyon li anplis. Patroni deja gen yon autofiler soti nan bwat la.
  • E gen anpil lòt bagay. Pou egzanp, antretyen nan konfigirasyon, vide nouvo kopi, backup, elatriye Men, sa a se pi lwen pase sijè ki abòde lan rapò a, mwen pa pral pale sou li.

Patroni Failure Stories oswa Ki jan fè aksidan gwoup PostgreSQL ou a. Alexey Lesovsky

Ak yon ti rezilta se ke travay prensipal la nan Patroni se fè yon otofile byen ak fyab pou gwoup nou an rete operasyonèl ak aplikasyon an pa remake chanjman nan topoloji gwoup la.

Patroni Failure Stories oswa Ki jan fè aksidan gwoup PostgreSQL ou a. Alexey Lesovsky

Men, lè nou kòmanse itilize Patroni, sistèm nou an vin yon ti kras pi konplike. Si pi bonè nou te gen Postgres, Lè sa a, lè w ap itilize Patroni nou jwenn Patroni tèt li, nou jwenn DCS kote eta a estoke. Epi li tout dwe travay yon jan kanmenm. Se konsa, sa ki ka ale mal?

Ka kraze:

  • Postgres ta ka kraze. Li kapab yon mèt oswa yon kopi, youn nan yo ka echwe.
  • Patroni a li menm ka kraze.
  • DCS kote eta a sere ka kraze.
  • Ak rezo a ka kraze.

Tout pwen sa yo mwen pral konsidere nan rapò a.

Patroni Failure Stories oswa Ki jan fè aksidan gwoup PostgreSQL ou a. Alexey Lesovsky

Mon ava konsider bann ka ler zot vin pli konplike, pa dan pwennvi ki sa ka i enplik plizyer konponan. Ak nan pwen de vi nan santiman subjectif, ke ka sa a te difisil pou mwen, li te difisil yo demonte li ... ak vis vèrsa, kèk ka te limyè epi li te fasil yo demonte li.

Patroni Failure Stories oswa Ki jan fè aksidan gwoup PostgreSQL ou a. Alexey Lesovsky

Ak premye ka a se pi fasil la. Sa a se ka a lè nou te pran yon gwoup baz done epi deplwaye depo DCS nou an sou menm gwoup la. Sa a se erè ki pi komen. Sa a se yon erè nan bati achitekti, sa vle di, konbine diferan eleman nan yon sèl kote.

Se konsa, te gen yon filer, ann ale nan fè fas ak sa ki te pase.

Patroni Failure Stories oswa Ki jan fè aksidan gwoup PostgreSQL ou a. Alexey Lesovsky

Ak isit la nou enterese nan lè filer la te pase. Sa vle di, nou enterese nan moman sa a nan tan lè eta gwoup la chanje.

Men, filer la pa toujou enstantane, sa vle di li pa pran okenn inite tan, li ka retade. Li ka dire lontan.

Se poutèt sa, li gen yon tan kòmanse ak yon tan fini, sa vle di li se yon evènman kontinyèl. Epi nou divize tout evènman an twa entèval: nou gen tan anvan filer la, pandan filer la ak apre filer la. Sa vle di, nou konsidere tout evènman nan delè sa a.

Patroni Failure Stories oswa Ki jan fè aksidan gwoup PostgreSQL ou a. Alexey Lesovsky

E premye bagay, lè yon filer te pase, nou chache koz sa ki te pase, kisa ki te lakòz sa ki te mennen nan filer.

Si nou gade mòso bwa yo, yo pral mòso bwa Patroni klasik. Li di nou nan yo ke sèvè a te vin mèt la, ak wòl nan mèt la te pase nan ne sa a. Isit la li make.

Patroni Failure Stories oswa Ki jan fè aksidan gwoup PostgreSQL ou a. Alexey Lesovsky

Apre sa, nou bezwen konprann poukisa filer la te rive, sa vle di ki evènman ki te fèt ki te lakòz wòl mèt la deplase soti nan yon ne nan yon lòt. Ak nan ka sa a, tout bagay se senp. Nou gen yon erè nan kominike avèk sistèm nan depo. Mèt la reyalize ke li pa t 'kapab travay ak DCS, se sa ki, te gen kèk kalite pwoblèm ak entèraksyon an. Epi li di ke li pa kapab yon mèt ankò e li demisyone. Liy sa a "degradé pwòp tèt ou" di egzakteman sa.

Patroni Failure Stories oswa Ki jan fè aksidan gwoup PostgreSQL ou a. Alexey Lesovsky

Si nou gade nan evènman yo ki te vin anvan filer la, nou ka wè la anpil rezon ki te pwoblèm nan pou kontinyasyon nan sòsye an.

Si nou gade nan jounal Patroni yo, nou pral wè ke nou gen anpil erè, timeout, sa vle di ajan Patroni a pa ka travay ak DCS. Nan ka sa a, sa a se ajan konsil, ki ap kominike sou pò 8500.

Ak pwoblèm nan isit la se ke Patroni ak baz done a ap kouri sou lame a menm. Epi sèvè Konsil yo te lanse sou menm nod la. Lè nou kreye yon chaj sou sèvè a, nou kreye pwoblèm pou sèvè Konsil yo tou. Yo pa t 'kapab kominike byen.

Patroni Failure Stories oswa Ki jan fè aksidan gwoup PostgreSQL ou a. Alexey Lesovsky

Apre kèk tan, lè chaj la bese, Patroni nou an te kapab kominike ak ajan ankò. Travay nòmal rekòmanse. Epi menm sèvè Pgdb-2 la te vin mèt ankò. Sa vle di, te gen yon ti baskile, akòz ki ne la te demisyone pouvwa yo nan mèt la, ak Lè sa a, te pran yo ankò, se sa ki, tout bagay te retounen jan li te ye.

Patroni Failure Stories oswa Ki jan fè aksidan gwoup PostgreSQL ou a. Alexey Lesovsky

Ak sa a ka konsidere kòm yon alam fo, oswa li ka konsidere ke Patroni te fè tout bagay byen. Sa vle di, li reyalize ke li pa t 'kapab kenbe eta a nan grap la ak retire otorite li.

Ak isit la pwoblèm nan leve akòz lefèt ke sèvè Konsil yo sou menm pyès ki nan konpitè ak baz yo. An konsekans, nenpòt chaj: si li se chaj la sou disk oswa processeur, li afekte tou entèraksyon an ak gwoup la Konsil.

Patroni Failure Stories oswa Ki jan fè aksidan gwoup PostgreSQL ou a. Alexey Lesovsky

Epi nou deside ke li pa ta dwe viv ansanm, nou te asiyen yon gwoup separe pou Konsil. E Patroni te deja travay ak yon Konsil apa, sa vle di te gen yon gwoup Postgres apa, yon gwoup Konsil apa. Sa a se yon enstriksyon debaz sou kòman yo pote ak kenbe tout bagay sa yo pou ke li pa viv ansanm.

Kòm yon opsyon, ou ka tòde paramèt ttl, loop_wait, retry_timeout, sa vle di eseye siviv pik chaj kout tèm sa yo lè w ogmante paramèt sa yo. Men, sa a se pa opsyon ki pi apwopriye, paske chaj sa a ka long nan tan. Epi nou pral tou senpleman ale pi lwen pase limit sa yo nan paramèt sa yo. Epi sa pa ta ka vrèman ede.

Patroni Failure Stories oswa Ki jan fè aksidan gwoup PostgreSQL ou a. Alexey Lesovsky

Premye pwoblèm nan, jan ou konprann, se senp. Nou pran e mete DCS ansanm ak baz la, nou jwenn yon pwoblèm.

Patroni Failure Stories oswa Ki jan fè aksidan gwoup PostgreSQL ou a. Alexey Lesovsky

Dezyèm pwoblèm nan sanble ak premye a. Se menm jan an ke nou ankò gen pwoblèm entèoperabilite ak sistèm DCS la.

Patroni Failure Stories oswa Ki jan fè aksidan gwoup PostgreSQL ou a. Alexey Lesovsky

Si nou gade nan mòso bwa yo, nou pral wè ke nou ankò gen yon erè kominikasyon. Apre sa, Patroni di mwen pa ka kominike avèk DCS pou mèt aktyèl la ale nan mòd kopi.

Mèt la fin vye granmoun vin tounen yon kopi, isit la Patroni travay deyò, jan li ta dwe. Li kouri pg_winind pou remonte tranzaksyon an epi konekte ak nouvo mèt la pou ratrape nouvo mèt la. Isit la Patroni travay deyò, jan li ta dwe.

Patroni Failure Stories oswa Ki jan fè aksidan gwoup PostgreSQL ou a. Alexey Lesovsky

Isit la nou dwe jwenn kote ki anvan filer la, sa vle di erè sa yo ki te lakòz nou gen yon filer. Ak nan sans sa a, mòso bwa Patroni yo byen pratik yo travay avèk yo. Li ekri menm mesaj yo nan yon sèten entèval. Men, si nou kòmanse defile nan mòso bwa sa yo byen vit, Lè sa a, nou pral wè nan mòso bwa yo ke mòso bwa yo te chanje, ki vle di ke kèk pwoblèm yo te kòmanse. Nou byen vit retounen nan kote sa a, wè sa k ap pase.

Ak nan yon sitiyasyon nòmal, mòso bwa yo gade yon bagay tankou sa a. Pwopriyetè kadna a tcheke. Men, si pwopriyetè a, pou egzanp, te chanje, Lè sa a, gen kèk evènman ki ka rive ke Patroni dwe reponn a. Men, nan ka sa a, nou byen. Nou ap chèche kote erè yo te kòmanse.

Patroni Failure Stories oswa Ki jan fè aksidan gwoup PostgreSQL ou a. Alexey Lesovsky

Apre sa, gen defile nan pwen kote erè yo te kòmanse parèt, nou wè ke nou te gen yon oto-fileover. Epi kòm erè nou yo te gen rapò ak entèraksyon ak DCS ak nan ka nou an nou te itilize Konsil, nou gade tou nan jounal Konsil yo, sa ki te pase la.

Apeprè lè n ap konpare lè fichye a ak tan ki nan jounal Konsil yo, nou wè vwazen nou yo nan gwoup Konsil la te kòmanse doute egzistans lòt manm gwoup Konsil la.

Patroni Failure Stories oswa Ki jan fè aksidan gwoup PostgreSQL ou a. Alexey Lesovsky

E si w gade jounal lòt ajan Konsil yo, ou ka wè tou ke gen yon kalite efondreman rezo k ap pase la. Epi tout manm gwoup Konsil la gen dout sou egzistans youn lòt. Lè sa a te UN pou filer a.

Si ou gade sa ki te pase anvan erè sa yo, ou ka wè ke gen tout kalite erè, pa egzanp, deadline, RPC tonbe, se sa ki klèman gen yon kalite pwoblèm nan entèraksyon manm gwoup Konsil yo youn ak lòt. .

Patroni Failure Stories oswa Ki jan fè aksidan gwoup PostgreSQL ou a. Alexey Lesovsky

Repons ki pi senp se pou repare rezo a. Men, pou mwen, kanpe sou podium a, li fasil pou di sa. Men, sikonstans yo se tankou ke pa toujou kliyan an gen mwayen pou fè reparasyon pou rezo a. Li ka viv nan yon DC epi li ka pa kapab repare rezo a, afekte ekipman an. Se konsa, kèk lòt opsyon yo bezwen.

Patroni Failure Stories oswa Ki jan fè aksidan gwoup PostgreSQL ou a. Alexey Lesovsky

Gen opsyon:

  • Opsyon ki pi senp, ki ekri, nan opinyon mwen, menm nan dokiman an, se enfim chèk Konsil, se sa ki, tou senpleman pase yon etalaj vid. Epi nou di ajan Konsil la pa sèvi ak okenn chèk. Avèk chèk sa yo, nou ka inyore tanpèt rezo sa yo epi nou pa inisye yon filer.
  • Yon lòt opsyon se double tcheke raft_multiplier. Sa a se yon paramèt nan sèvè Konsil la li menm. Pa default, li mete sou 5. Valè sa a rekòmande pa dokiman an pou anviwònman staging. An reyalite, sa afekte frekans nan mesaj ant manm rezo Konsil la. An reyalite, paramèt sa a afekte vitès kominikasyon sèvis ant manm gwoup Konsil la. Ak pou pwodiksyon, li deja rekòmande diminye li pou nœuds yo echanj mesaj pi souvan.
  • Yon lòt opsyon nou te vini ak se ogmante priyorite nan pwosesis Konsil pami lòt pwosesis pou pwogramasyon pwosesis sistèm operasyon an. Gen tankou yon "bèl" paramèt, li jis detèmine priyorite nan pwosesis ki te pran an kont pa orè OS la lè orè. Nou te redwi tou bèl valè pou ajan konsil, i.e. ogmante priyorite a pou sistèm operasyon an bay pwosesis Konsil yo plis tan pou yo travay ak egzekite kòd yo. Nan ka nou an, sa te rezoud pwoblèm nou an.
  • Yon lòt opsyon se pa sèvi ak Consul. Mwen gen yon zanmi ki se yon gwo sipòtè Etcd. Epi nou regilyèman diskite ak li ki pi bon Etcd oswa Konsil. Men, an tèm de ki pi bon, anjeneral nou dakò ak li ke Konsil gen yon ajan ki ta dwe kouri sou chak nod ak yon baz done. Sa vle di, entèraksyon Patroni ak gwoup Konsil la pase atravè ajan sa a. Ak ajan sa a vin tounen yon kou boutèy. Si yon bagay rive ajan an, Lè sa a, Patroni pa ka travay ak gwoup Konsil la ankò. Epi sa a se pwoblèm nan. Pa gen okenn ajan nan plan Etcd la. Patroni ka travay dirèkteman ak yon lis sèvè Etcd epi deja kominike avèk yo. Nan sans sa a, si ou itilize Etcd nan konpayi ou, Lè sa a, Etcd ap pwobableman yon pi bon chwa pase Consul. Men, nou nan kliyan nou yo toujou limite pa sa kliyan an te chwazi ak itilize. Epi nou gen Konsil pou pi fò pou tout kliyan.
  • Ak dènye pwen an se revize valè paramèt yo. Nou ka ogmante paramèt sa yo avèk espwa ke pwoblèm rezo kout tèm nou yo pral kout epi yo pa tonbe andeyò seri paramèt sa yo. Nan fason sa a nou ka diminye agresif Patroni nan autofile si gen kèk pwoblèm rezo rive.

Patroni Failure Stories oswa Ki jan fè aksidan gwoup PostgreSQL ou a. Alexey Lesovsky

Mwen panse ke anpil moun ki sèvi ak Patroni yo abitye ak lòd sa a.

Patroni Failure Stories oswa Ki jan fè aksidan gwoup PostgreSQL ou a. Alexey Lesovsky

Kòmandman sa a montre eta aktyèl gwoup la. Ak nan premye gade, foto sa a ka sanble nòmal. Nou gen yon mèt, nou gen yon kopi, pa gen okenn lag replikasyon. Men, foto sa a nòmal egzakteman jiskaske nou konnen ke gwoup sa a ta dwe gen twa nœuds, pa de.

Patroni Failure Stories oswa Ki jan fè aksidan gwoup PostgreSQL ou a. Alexey Lesovsky

An konsekans, te gen yon autofile. Epi apre sa a otofile, kopi nou an te disparèt. Nou bezwen chèche konnen poukisa li te disparèt epi mennen l tounen, restore li. Epi nou ankò ale nan mòso bwa yo ak wè poukisa nou te gen yon oto-fileover.

Patroni Failure Stories oswa Ki jan fè aksidan gwoup PostgreSQL ou a. Alexey Lesovsky

Nan ka sa a, dezyèm kopi a te vin mèt la. Li nan tout dwa isit la.

Patroni Failure Stories oswa Ki jan fè aksidan gwoup PostgreSQL ou a. Alexey Lesovsky

Epi nou bezwen gade nan kopi a ki tonbe epi ki pa nan gwoup la. Nou louvri mòso Patroni yo epi nou wè ke nou te gen yon pwoblèm pandan pwosesis koneksyon ak gwoup la nan etap pg_wind la. Pou konekte ak gwoup la, ou bezwen rwin tranzaksyon an, mande tranzaksyon an mande nan men mèt la, epi sèvi ak li pou ratrape ak mèt la.

Nan ka sa a, nou pa gen yon jounal tranzaksyon epi kopi a pa ka kòmanse. An konsekans, nou sispann Postgres ak yon erè. Se poutèt sa li pa nan gwoup la.

Patroni Failure Stories oswa Ki jan fè aksidan gwoup PostgreSQL ou a. Alexey Lesovsky

Nou bezwen konprann poukisa li pa nan gwoup la ak poukisa pa te gen okenn mòso bwa. Nou ale nan nouvo mèt la epi gade nan sa li genyen nan mòso bwa yo. Li sanble ke lè pg_winind te fè, yon pòs te fèt. Ak kèk nan ansyen mòso bwa tranzaksyon yo te tou senpleman chanje non. Lè ansyen mèt la te eseye konekte ak nouvo mèt la ak rechèch mòso bwa sa yo, yo te deja chanje non, yo jis pa egziste.

Patroni Failure Stories oswa Ki jan fè aksidan gwoup PostgreSQL ou a. Alexey Lesovsky

Mwen konpare timestamps lè evènman sa yo te pase. Epi gen diferans lan se literalman 150 milisgond, se sa ki, pòs la fini nan 369 milisgond, segman yo WAL yo te chanje non. Ak literalman nan 517, apre 150 milisgond, remonte te kòmanse sou ansyen kopi a. Sa vle di, literalman 150 milisgond te ase pou nou pou kopi a pa t 'kapab konekte ak touche.

Patroni Failure Stories oswa Ki jan fè aksidan gwoup PostgreSQL ou a. Alexey Lesovsky

Ki opsyon ki genyen?

Nou te itilize okòmansman fant replikasyon. Nou te panse li te bon. Malgre ke nan premye etap nan operasyon nou fèmen fant yo. Li te sanble nou ke si fant yo akimile yon anpil nan segman WAL, nou ka lage mèt la. Li pral tonbe. Nou te soufri pou kèk tan san fant. Epi nou reyalize ke nou bezwen fant, nou retounen fant yo.

Men, gen yon pwoblèm isit la, ke lè mèt la ale nan kopi a, li efase fant yo ak efase segman yo WAL ansanm ak fant yo. Epi pou elimine pwoblèm sa a, nou deside ogmante paramèt wal_keep_segments. Li par défaut pou 8 segments. Nou ogmante li a 1 epi gade konbyen espas gratis nou te genyen. Epi nou bay 000 gigaocte pou wal_keep_segments. Sa vle di, lè chanje, nou toujou gen yon rezèv 16 jigokte nan mòso bwa tranzaksyon sou tout nœuds.

Ak plis - li toujou enpòtan pou travay antretyen alontèm. Ann di nou bezwen mete ajou youn nan kopi yo. Epi nou vle fèmen li. Nou bezwen mete ajou lojisyèl an, petèt sistèm operasyon an, yon lòt bagay. Epi lè nou fèmen yon kopi, yo retire plas pou kopi sa a tou. Men, si nou itilize yon ti wal_keep_segments, Lè sa a, ak yon absans long nan yon kopi, mòso bwa tranzaksyon yo pral pèdi. Nou pral ogmante yon kopi, li pral mande sa yo mòso bwa tranzaksyon kote li te sispann, men yo pa ka sou mèt la. Ak kopi a pa pral kapab konekte tou. Se poutèt sa, nou kenbe yon gwo stock de magazin.

Patroni Failure Stories oswa Ki jan fè aksidan gwoup PostgreSQL ou a. Alexey Lesovsky

Patroni Failure Stories oswa Ki jan fè aksidan gwoup PostgreSQL ou a. Alexey Lesovsky

Nou gen yon baz pwodiksyon. Gen pwojè ki deja fèt.

Te gen yon filer. Nou antre epi gade - tout bagay nan lòd, kopi yo an plas, pa gen okenn lag replikasyon. Pa gen okenn erè nan mòso bwa yo tou, tout bagay nan lòd.

Ekip pwodwi a di ke ta dwe gen kèk done, men nou wè li nan yon sèl sous, men nou pa wè li nan baz done a. Epi nou bezwen konprann sa ki te rive yo.

Patroni Failure Stories oswa Ki jan fè aksidan gwoup PostgreSQL ou a. Alexey Lesovsky

Li klè ke pg_wind te manke yo. Nou te konprann sa imedyatman, men nou te ale wè sa k ap pase.

Patroni Failure Stories oswa Ki jan fè aksidan gwoup PostgreSQL ou a. Alexey Lesovsky

Nan mòso bwa yo, nou ka toujou jwenn lè filer la te rive, ki moun ki te vin mèt la, epi nou ka detèmine ki moun ki te ansyen mèt la ak ki lè li te vle vin tounen yon kopi, sa vle di nou bezwen mòso bwa sa yo pou chèche konnen kantite mòso tranzaksyon yo. te pèdi.

Ansyen mèt nou an rekòmanse. Epi Patroni te anrejistre nan otorun la. Te lanse Patroni. Lè sa a, li te kòmanse Postgres. Plis jisteman, anvan yo te kòmanse Postgres ak anvan yo te fè li yon kopi, Patroni te lanse pwosesis la pg_wind. An konsekans, li efase yon pati nan mòso bwa tranzaksyon yo, telechaje nouvo ak konekte. Isit la Patroni te travay entelijan, se sa ki, jan yo espere. Gwoup la te retabli. Nou te gen 3 nœuds, apre filer la 3 nœuds - tout bagay se fre.

Patroni Failure Stories oswa Ki jan fè aksidan gwoup PostgreSQL ou a. Alexey Lesovsky

Nou te pèdi kèk done. E nou bezwen konpran konbyen nou perdi. Nou ap chèche jis moman sa a lè nou te gen yon rewind. Nou ka jwenn li nan jounal sa yo. Rewind te kòmanse, te fè yon bagay la epi li te fini.

Patroni Failure Stories oswa Ki jan fè aksidan gwoup PostgreSQL ou a. Alexey Lesovsky

Nou bezwen jwenn pozisyon nan tranzaksyon an kote ansyen mèt la te kite. Nan ka sa a, sa a se mak la. Apre sa, nou bezwen yon dezyèm mak, se sa ki, distans ki ansyen mèt la diferan de nouvo a.

Nou pran pg_wal_lsn_diff abityèl la epi konpare de mak sa yo. Ak nan ka sa a, nou jwenn 17 megabytes. Anpil oswa yon ti kras, tout moun deside pou tèt li. Paske pou yon moun 17 megabytes se pa anpil, pou yon moun li se yon anpil ak inakseptab. Isit la, chak moun detèmine pou tèt li an akò ak bezwen biznis la.

Patroni Failure Stories oswa Ki jan fè aksidan gwoup PostgreSQL ou a. Alexey Lesovsky

Men, ki sa nou jwenn pou tèt nou?

Premyèman, nou dwe deside pou tèt nou - èske nou toujou bezwen Patroni pou autostart apre yon rdemare sistèm? Sa rive souvan ke nou dwe ale nan ansyen mèt la, wè ki jan lwen li te ale. Petèt enspekte segman nan boutèy tranzaksyon an, wè sa ki la. Ak konprann si nou ka pèdi done sa yo oswa si nou bezwen kouri mèt la fin vye granmoun nan mòd otonòm yo nan lòd yo rale done sa yo deyò.

Epi sèlman apre sa nou dwe deside si nou ka jete done sa yo oswa nou ka retabli li, konekte ne sa a kòm yon kopi nan gwoup nou an.

Anplis de sa, gen yon paramèt "maximum_lag_on_failover". Pa default, si memwa mwen sèvi m ', paramèt sa a gen yon valè de 1 megabyte.

Ki jan li travay? Si kopi nou an dèyè pa 1 megabyte nan done nan lag replikasyon an, Lè sa a, kopi sa a pa patisipe nan eleksyon yo. Men, si toudenkou gen yon fichyeover, Patroni gade nan ki kopi ki an reta dèyè. Si yo dèyè pa yon gwo kantite mòso bwa tranzaksyon yo, yo pa ka vin yon mèt. Sa a se yon karakteristik sekirite trè bon ki anpeche ou pèdi yon anpil nan done.

Men, gen yon pwoblèm nan ke lag nan replikasyon nan gwoup la Patroni ak DCS mete ajou nan yon sèten entèval. Mwen panse ke 30 segonn se valè ttl default la.

An konsekans, ka gen yon sitiyasyon kote gen yon sèl lag replikasyon pou kopi nan DCS, men an reyalite ka gen yon lag konplètman diferan oswa ka pa gen okenn lag nan tout, sa vle di bagay sa a se pa an tan reyèl. Epi li pa toujou reflete foto reyèl la. Epi li pa vo fè lojik anpenpan sou li.

Ak risk pèt toujou rete. Ak nan ka ki pi mal la, yon fòmil, ak nan ka an mwayèn, yon lòt fòmil. Sa vle di, lè nou planifye aplikasyon Patroni ak evalye konbyen done nou ka pèdi, nou dwe konte sou fòmil sa yo epi apeprè imajine konbyen done nou ka pèdi.

Epi gen yon bon nouvèl. Lè mèt la fin vye granmoun te ale pi devan, li ka ale pi devan akòz kèk pwosesis background. Sa vle di, te gen kèk kalite autovacuum, li te ekri done yo, sove yo nan boutèy tranzaksyon an. Epi nou ka fasilman inyore epi pèdi done sa yo. Pa gen okenn pwoblèm nan sa a.

Patroni Failure Stories oswa Ki jan fè aksidan gwoup PostgreSQL ou a. Alexey Lesovsky

Epi sa a se ki jan mòso bwa yo sanble si maximum_lag_on_failover tabli epi yon filer te fèt, epi ou bezwen chwazi yon nouvo mèt. Replik la evalye tèt li kòm li pa kapab patisipe nan eleksyon yo. Epi li refize patisipe nan kous la pou lidè a. Apre sa, li tann pou yon nouvo mèt yo dwe chwazi, se konsa ke li ka Lè sa a, konekte ak li. Sa a se yon mezi adisyonèl kont pèt done.

Patroni Failure Stories oswa Ki jan fè aksidan gwoup PostgreSQL ou a. Alexey Lesovsky

Patroni Failure Stories oswa Ki jan fè aksidan gwoup PostgreSQL ou a. Alexey Lesovsky

Isit la nou gen yon ekip pwodwi ki te ekri ke pwodwi yo gen pwoblèm ak Postgres. An menm tan an, mèt nan tèt li pa ka jwenn aksè, paske li pa disponib atravè SSH. Ak autofile a pa rive tou.

Lame sa a te oblije rdemare. Akòz rdemare a, yon oto-fichye te rive, byenke li te posib fè yon manyèl oto-fichye, jan mwen konprann kounye a. Epi apre rdemare a, nou deja pral wè sa nou te gen ak mèt aktyèl la.

Patroni Failure Stories oswa Ki jan fè aksidan gwoup PostgreSQL ou a. Alexey Lesovsky

An menm tan, nou te konnen davans ke nou te gen pwoblèm ak disk, sa vle di, nou te deja konnen nan siveyans ki kote yo fouye ak sa yo dwe chèche.

Patroni Failure Stories oswa Ki jan fè aksidan gwoup PostgreSQL ou a. Alexey Lesovsky

Nou antre nan log postgres la, nou te kòmanse wè sa k ap pase la. Nou te wè komèt ki dire la pou youn, de, twa segonn, ki pa nòmal ditou. Nou te wè ke autovacuum nou an kòmanse trè dousman ak etranj. Epi nou te wè dosye tanporè sou disk la. Sa vle di, sa yo se tout endikatè pwoblèm ak disk.

Patroni Failure Stories oswa Ki jan fè aksidan gwoup PostgreSQL ou a. Alexey Lesovsky

Nou gade nan sistèm nan dmesg (boutik nwayo). Epi nou te wè ke nou gen pwoblèm ak youn nan disk yo. Sou-sistèm ki gen kapasite a te lojisyèl Raid. Nou te gade /proc/mdstat epi nou te wè ke nou te manke yon sèl kondwi. Sa vle di, gen yon Raid nan 8 disk, nou manke youn. Si ou gade ak anpil atansyon nan glise a, Lè sa a, nan pwodiksyon an ou ka wè ke nou pa gen sde la. Nan nou, kondisyonèl pale, disk la te tonbe soti. Sa a te deklanche pwoblèm disk, ak aplikasyon yo te gen pwoblèm tou lè w ap travay ak gwoup Postgres la.

Patroni Failure Stories oswa Ki jan fè aksidan gwoup PostgreSQL ou a. Alexey Lesovsky

Ak nan ka sa a, Patroni pa ta ede nou nan okenn fason, paske Patroni pa gen travay pou kontwole eta a nan sèvè a, eta a nan disk la. Epi nou dwe kontwole sitiyasyon sa yo pa siveyans ekstèn. Nou byen vit ajoute siveyans disk nan siveyans ekstèn.

Epi te gen yon lide konsa - ta ka kloti oswa lojisyèl gadyen ede nou? Nou te panse ke li pa t ap ede nou nan ka sa a, paske pandan pwoblèm yo Patroni te kontinye kominike avèk gwoup DCS la epi li pa t wè okenn pwoblèm. Sa vle di, nan pwen de vi DCS ak Patroni, tout bagay te byen ak gwoup la, byenke an reyalite te gen pwoblèm ak disk la, te gen pwoblèm ak disponiblite baz done a.

Patroni Failure Stories oswa Ki jan fè aksidan gwoup PostgreSQL ou a. Alexey Lesovsky

Nan opinyon mwen, sa a se youn nan pwoblèm ki pi etranj ke mwen te fè rechèch pou yon tan trè lontan, mwen te li yon anpil nan mòso bwa, re-chwazi epi yo rele li yon similatè gwoup.

Patroni Failure Stories oswa Ki jan fè aksidan gwoup PostgreSQL ou a. Alexey Lesovsky

Pwoblèm lan te ke ansyen mèt la pa t 'kapab vin tounen yon kopi nòmal, sa vle di Patroni te kòmanse li, Patroni te montre ke ne sa a te prezan kòm yon kopi, men an menm tan an li pa t 'yon kopi nòmal. Koulye a, ou pral wè poukisa. Sa a se sa mwen te kenbe nan analiz la nan pwoblèm sa a.

Patroni Failure Stories oswa Ki jan fè aksidan gwoup PostgreSQL ou a. Alexey Lesovsky

Ak ki jan tout bagay te kòmanse? Li te kòmanse, tankou nan pwoblèm anvan an, ak fren disk. Nou te gen komèt pou yon segonn, de.

Patroni Failure Stories oswa Ki jan fè aksidan gwoup PostgreSQL ou a. Alexey Lesovsky

Te gen repo nan koneksyon, sa vle di, kliyan yo te chire.

Patroni Failure Stories oswa Ki jan fè aksidan gwoup PostgreSQL ou a. Alexey Lesovsky

Te gen blokaj ki gen diferan severite.

Patroni Failure Stories oswa Ki jan fè aksidan gwoup PostgreSQL ou a. Alexey Lesovsky

Epi, kòmsadwa, subsistèm nan disk se pa trè reponn.

Patroni Failure Stories oswa Ki jan fè aksidan gwoup PostgreSQL ou a. Alexey Lesovsky

Ak bagay ki pi misterye pou mwen se demann fèmen imedya ki te rive. Postgres gen twa mòd fèmen:

  • Se grasyeuz lè nou tann pou tout kliyan dekonekte poukont yo.
  • Gen vit lè nou fòse kliyan yo dekonekte paske nou pral fèmen.
  • Ak imedya. Nan ka sa a, imedyat pa menm di kliyan yo fèmen, li jis fèmen san avètisman. Ak tout kliyan, sistèm operasyon an deja voye yon mesaj RST (yon mesaj TCP ke koneksyon an entèwonp ak kliyan an pa gen anyen plis trape).

Ki moun ki voye siyal sa a? Pwosesis background Postgres pa voye siyal sa yo youn ak lòt, sa vle di sa a se touye-9. Yo pa voye bagay sa yo youn bay lòt, yo sèlman reyaji a bagay sa yo, sa vle di sa a se yon rekòmanse ijans nan Postgres. Ki moun ki voye l, mwen pa konnen.

Mwen te gade "dènye" kòmandman an epi mwen te wè yon sèl moun ki te konekte tou sou sèvè sa a avèk nou, men mwen te twò timid pou m poze yon kesyon. Petèt li te touye -9. Mwen ta wè touye -9 nan mòso bwa yo, paske Postgres di ke li te pran touye -9, men mwen pa t 'wè li nan mòso bwa yo.

Patroni Failure Stories oswa Ki jan fè aksidan gwoup PostgreSQL ou a. Alexey Lesovsky

Gade pi lwen, mwen te wè ke Patroni pa t 'ekri nan boutèy la pou yon tan long - 54 segonn. Men, si nou konpare de timestamps, pa te gen okenn mesaj pou apeprè 54 segonn.

Patroni Failure Stories oswa Ki jan fè aksidan gwoup PostgreSQL ou a. Alexey Lesovsky

Ak pandan tan sa a te gen yon autofile. Patroni te fè yon gwo travay isit la ankò. Ansyen mèt nou an pa t disponib, yon bagay te rive l. Epi eleksyon yon nouvo mèt te kòmanse. Tout bagay te mache byen isit la. pgsql01 nou an vin nouvo lidè.

Patroni Failure Stories oswa Ki jan fè aksidan gwoup PostgreSQL ou a. Alexey Lesovsky

Nou gen yon kopi ki vin yon mèt. Epi gen yon dezyèm repons. Epi te gen pwoblèm ak dezyèm kopi a. Li te eseye reconfigure. Kòm mwen konprann li, li te eseye chanje recovery.conf, rekòmanse Postgres ak konekte ak nouvo mèt la. Li ekri mesaj chak 10 segonn ke li ap eseye, men li pa reyisi.

Patroni Failure Stories oswa Ki jan fè aksidan gwoup PostgreSQL ou a. Alexey Lesovsky

Ak pandan tantativ sa yo, yon siyal imedyat-fèr rive nan ansyen mèt la. Mèt la rekòmanse. Epi tou rekiperasyon sispann paske ansyen mèt la ale nan rdemare. Sa vle di, kopi a pa ka konekte ak li, paske li se nan mòd fèmen.

Patroni Failure Stories oswa Ki jan fè aksidan gwoup PostgreSQL ou a. Alexey Lesovsky

Nan kèk pwen, li te travay, men replikasyon pa t kòmanse.

Sèl devine mwen se ke te gen yon adrès mèt fin vye granmoun nan recovery.conf. Men, lè yon nouvo mèt parèt, dezyèm kopi a toujou eseye konekte ak ansyen mèt la.

Patroni Failure Stories oswa Ki jan fè aksidan gwoup PostgreSQL ou a. Alexey Lesovsky

Lè Patroni te kòmanse moute sou dezyèm kopi a, ne la te kòmanse leve men li pa t 'kapab repwodui. Epi yo te fòme yon lag replikasyon, ki te sanble yon bagay tankou sa a. Sa vle di, tout twa nœuds yo te an plas, men dezyèm nœuds la te retade.

Patroni Failure Stories oswa Ki jan fè aksidan gwoup PostgreSQL ou a. Alexey Lesovsky

An menm tan, si ou gade nan mòso bwa yo ki te ekri yo, ou ta ka wè ke replikasyon pa t 'kapab kòmanse paske mòso tranzaksyon yo te diferan. Ak sa yo mòso bwa tranzaksyon ke mèt la ofri, ki espesifye nan recovery.conf, tou senpleman pa anfòm ne aktyèl nou an.

Patroni Failure Stories oswa Ki jan fè aksidan gwoup PostgreSQL ou a. Alexey Lesovsky

Ak isit la mwen te fè yon erè. Mwen te oblije vin wè sa ki te nan recovery.conf pou teste ipotèz mwen ke nou t ap konekte ak move mèt la. Men, Lè sa a, mwen te jis fè fas ak sa a epi li pa t 'rive nan tèt mwen, oswa mwen te wè ke kopi a te reta dèyè epi yo ta dwe ranpli, se sa ki, yon jan kanmenm mwen te travay neglijans. Sa a te jwenti mwen an.

Patroni Failure Stories oswa Ki jan fè aksidan gwoup PostgreSQL ou a. Alexey Lesovsky

Apre 30 minit, admin la te deja vini, sa vle di mwen rekòmanse Patroni sou kopi a. Mwen deja mete fen nan li, mwen te panse ke li ta dwe ranpli. Apre sa, mwen te panse - mwen pral rekòmanse Patroni, petèt yon bagay bon pral rive. Rekiperasyon an te kòmanse. Ak baz la menm louvri, li te pare yo aksepte koneksyon.

Patroni Failure Stories oswa Ki jan fè aksidan gwoup PostgreSQL ou a. Alexey Lesovsky

Replikasyon an te kòmanse. Men, yon minit pita, li te tonbe ak yon erè ke mòso bwa tranzaksyon yo pa apwopriye pou li.

Patroni Failure Stories oswa Ki jan fè aksidan gwoup PostgreSQL ou a. Alexey Lesovsky

Mwen te panse mwen ta rekòmanse ankò. Mwen rekòmanse Patroni ankò, epi mwen pa t 'rekòmanse Postgres, men rekòmanse Patroni nan espwa ke li ta majik kòmanse baz done a.

Patroni Failure Stories oswa Ki jan fè aksidan gwoup PostgreSQL ou a. Alexey Lesovsky

Replikasyon an te kòmanse ankò, men mak yo nan jounal tranzaksyon an te diferan, yo pa t menm ak tantativ kòmanse anvan an. Replikasyon sispann ankò. Ak mesaj la te deja yon ti kras diferan. Epi li pa te trè enfòmatif pou mwen.

Patroni Failure Stories oswa Ki jan fè aksidan gwoup PostgreSQL ou a. Alexey Lesovsky

Lè sa a, li rive m '- e si mwen rekòmanse Postgres, nan moman sa a mwen fè yon pòs sou mèt aktyèl la pou avanse pou pi pwen nan tranzaksyon an yon ti kras pi devan pou ke rekiperasyon kòmanse soti nan yon lòt moman? Anplis, nou te toujou gen aksyon nan WAL.

Patroni Failure Stories oswa Ki jan fè aksidan gwoup PostgreSQL ou a. Alexey Lesovsky

Mwen rekòmanse Patroni, mwen te fè yon koup nan pwen kontwòl sou mèt la, yon koup nan pwen rekòmanse sou kopi a lè li louvri. Epi li te ede. Mwen te panse pou yon tan long poukisa li te ede ak ki jan li te travay. Epi kopi a te kòmanse. Epi replikasyon pa t chire ankò.

Patroni Failure Stories oswa Ki jan fè aksidan gwoup PostgreSQL ou a. Alexey Lesovsky

Yon pwoblèm konsa pou mwen se youn nan pi misterye yo, sou ki mwen toujou devinèt sou sa ki vrèman rive la.

Ki sa ki enplikasyon yo isit la? Patroni ka travay jan sa vle di epi san okenn erè. Men, an menm tan an, sa a se pa yon garanti 100% ke tout bagay anfòm avèk nou. Replik la ka kòmanse, men li ka nan yon eta semi-k ap travay, epi aplikasyon an pa ka travay ak yon kopi konsa, paske pral gen done fin vye granmoun.

Apre sa, apre filer la, ou toujou bezwen tcheke ke tout bagay an lòd ak gwoup la, se sa ki, gen nimewo ki nesesè nan kopi, pa gen okenn lag replikasyon.

Patroni Failure Stories oswa Ki jan fè aksidan gwoup PostgreSQL ou a. Alexey Lesovsky

E letan nou pe pas atraver sa bann keksoz, mon pou fer rekomandasyon. Mwen te eseye konbine yo nan de glisad. Pwobableman, tout istwa yo ta ka konbine nan de glisad epi sèlman rakonte.

Patroni Failure Stories oswa Ki jan fè aksidan gwoup PostgreSQL ou a. Alexey Lesovsky

Lè ou sèvi ak Patroni, ou dwe gen siveyans. Ou ta dwe toujou konnen ki lè yon autofileover te fèt, paske si ou pa konnen ou te gen yon autofileover, ou pa gen okenn kontwòl sou gwoup la. E sa pa bon.

Apre chak filer, nou toujou gen manyèlman tcheke gwoup la. Nou bezwen asire nou ke nou toujou gen yon kantite kopi ajou, pa gen okenn lag replikasyon, pa gen okenn erè nan mòso bwa ki gen rapò ak replikasyon difizyon, ak Patroni, ak sistèm nan DCS.

Otomatik ka travay avèk siksè, Patroni se yon zouti trè bon. Li ka travay, men sa a pa pral pote gwoup la nan eta a vle. Men, si nou pa jwenn enfòmasyon sou li, nou pral nan pwoblèm.

Epi Patroni se pa yon bal an ajan. Nou toujou bezwen konprann ki jan Postgres travay, ki jan replikasyon travay ak ki jan Patroni travay ak Postgres, ak ki jan kominikasyon ant nœuds yo bay. Sa a se nesesè yo nan lòd yo kapab ranje pwoblèm ak men ou.

Patroni Failure Stories oswa Ki jan fè aksidan gwoup PostgreSQL ou a. Alexey Lesovsky

Kouman pou mwen apwoche pwoblèm nan dyagnostik? Li te rive ke nou travay ak kliyan diferan epi pèsonn pa gen yon pil ELK, epi nou dwe regle mòso bwa yo lè nou louvri 6 konsola ak 2 onglè. Nan yon sèl tab, sa yo se mòso bwa Patroni yo pou chak ne, nan lòt tab la, sa yo se mòso bwa Konsil yo, oswa Postgres si sa nesesè. Li trè difisil pou fè dyagnostik sa a.

Ki apwòch mwen te pran? Premyèman, mwen toujou gade lè filer la te rive. E pou mwen sa a se yon basen vèsan. Mwen gade sa ki te pase anvan filer la, pandan filer la ak apre filer la. Fileover a gen de mak: sa a se tan an kòmanse ak fen.

Apre sa, mwen gade nan mòso bwa yo pou evènman anvan filer la, ki anvan filer la, sa vle di mwen gade pou rezon ki fè filer la te rive.

Ak sa a bay yon foto nan konpreyansyon sa ki te pase ak sa ki ka fè nan lavni pou ke sikonstans sa yo pa rive (e kòm yon rezilta, pa gen okenn filer).

Ak ki kote nou konn gade? mwen gade:

  • Premyèman, nan mòso bwa yo Patroni.
  • Apre sa, mwen gade mòso Postgres yo, oswa mòso bwa DCS yo, tou depann de sa yo te jwenn nan mòso bwa Patroni yo.
  • Ak mòso bwa sistèm yo tou pafwa bay yon konpreyansyon sou sa ki te lakòz filer la.

Patroni Failure Stories oswa Ki jan fè aksidan gwoup PostgreSQL ou a. Alexey Lesovsky

Kouman mwen santi mwen konsènan Patroni? Mwen gen yon trè bon relasyon ak Patroni. Dapre mwen, sa a se pi bon an ki genyen jodi a. Mwen konnen anpil lòt pwodwi. Sa yo se Stolon, Repmgr, Pg_auto_failover, PAF. 4 zouti. Mwen te eseye yo tout. Patroni se pi renmen m.

Si yo mande m ': "Èske mwen rekòmande Patroni?". Mwen pral di wi, paske mwen renmen Patroni. Apre sa, mwen panse ke mwen te aprann ki jan yo kwit li.

Si w enterese wè ki lòt pwoblèm ki genyen ak Patroni anplis pwoblèm mwen site yo, ou ka toujou tcheke paj la. pwoblèm sou GitHub. Gen anpil istwa diferan ak anpil pwoblèm enteresan yo diskite la. Epi kòm yon rezilta, kèk pinèz yo te prezante ak rezoud, se sa ki, sa a se yon lekti enteresan.

Gen kèk istwa enteresan sou moun ki tire tèt yo nan pye a. Trè enfòmatif. Ou li epi konprann ke li pa nesesè pou fè sa. Mwen make tèt mwen.

Apre sa, mwen ta renmen di yon gwo mèsi pou Zalando pou devlope pwojè sa a, sètadi Alexander Kukushkin ak Alexey Klyukin. Aleksey Klyukin se youn nan ko-otè yo, li pa travay nan Zalando ankò, men sa yo se de moun ki te kòmanse travay ak pwodui sa a.

E mwen panse ke Patroni se yon bagay trè fre. Mwen kontan ke li egziste, li enteresan avè l. Ak yon gwo mèsi a tout kontribitè yo ki ekri patch bay Patroni. Mwen espere ke Patroni ap vin pi matirite, fre ak efikas ak laj. Li deja fonksyonèl, men mwen espere ke li pral vin pi byen toujou. Se poutèt sa, si ou fè plan yo sèvi ak Patroni, Lè sa a, pa bezwen pè. Sa a se yon solisyon bon, li ka aplike ak itilize.

Se tout. Si w gen kesyon, mande.

Patroni Failure Stories oswa Ki jan fè aksidan gwoup PostgreSQL ou a. Alexey Lesovsky

Kesyon ou yo

Mèsi pou rapò a! Si apre yon filer ou toujou bezwen gade la ak anpil atansyon, Lè sa a, poukisa nou bezwen yon filer otomatik?

Paske se bagay nouvo. Nou te sèlman avèk li pou yon ane. Li pi bon pou w an sekirite. Nou vle antre epi wè ke tout bagay reyèlman te mache jan li ta dwe. Sa a se nivo defye granmoun - li se pi bon tcheke doub ak wè.

Pou egzanp, nou te ale nan maten an epi gade, dwa?

Pa nan maten an, anjeneral nou aprann sou otofile a prèske imedyatman. Nou resevwa notifikasyon, nou wè ke yon autofile te fèt. Nou prèske imedyatman ale epi gade. Men, tout chèk sa yo ta dwe pote nan nivo siveyans. Si ou jwenn aksè nan Patroni atravè API REST, gen yon istwa. Dapre istwa ou ka wè timestamps yo lè filer la te pase. Ki baze sou sa a, siveyans ka fè. Ou ka wè istwa a, konbyen evènman ki te la. Si nou gen plis evènman, Lè sa a, yon autofile te fèt. Ou ka ale wè. Oswa automatisation siveyans nou an tcheke ke nou gen tout kopi yo an plas, pa gen okenn lag ak tout bagay anfòm.

Mèsi!

Mèsi anpil pou bèl istwa a! Si nou te deplase gwoup DCS a yon kote lwen gwoup Postgres la, Lè sa a, gwoup sa a bezwen tou fè sèvis detanzantan? Ki pi bon pratik ke kèk moso nan gwoup DCS la bezwen fèmen, yon bagay ki fè ak yo, elatriye? Ki jan tout estrikti sa a siviv? E ki jan ou fè bagay sa yo?

Pou yon konpayi, li te nesesè pou fè yon matrice de pwoblèm, sa k rive koukouloukou si yonn nan konpozan ou plizyè konpozan echwe. Dapre matris sa a, nou sekans ale nan tout eleman yo epi bati senaryo nan ka echèk nan eleman sa yo. An konsekans, pou chak senaryo echèk, ou ka gen yon plan aksyon pou rekiperasyon. Ak nan ka DCS, li vini kòm yon pati nan enfrastrikti estanda a. Ak admin la administre li, epi nou deja konte sou admin yo ki administre li ak kapasite yo nan ranje li nan ka ta gen aksidan. Si pa gen okenn DCS ditou, Lè sa a, nou deplwaye li, men an menm tan nou pa patikilyèman kontwole li, paske nou pa responsab pou enfrastrikti a, men nou bay rekòmandasyon sou ki jan ak ki sa yo dwe kontwole.

Sa vle di, èske mwen konprann kòrèkteman ke mwen bezwen enfim Patroni, enfim filer la, enfim tout bagay anvan ou fè anyen ak tout pouvwa a?

Sa depann de konbyen nœuds nou genyen nan gwoup DCS la. Si gen anpil nœuds epi si nou enfim sèlman youn nan nœuds yo (replik la), lè sa a gwoup la kenbe yon kowòm. Ak Patroni rete operasyonèl. E pa gen anyen ki deklanche. Si nou gen kèk operasyon konplèks ki afekte plis nœuds, absans ki ka ruine kowòm nan, lè sa a - wi, li ta ka fè sans pou mete Patroni sou poz. Li gen yon kòmandman korespondan - patronictl pause, patronictl rezime. Nou jis pran yon poz ak autofiler la pa travay nan moman sa a. Nou fè antretyen sou gwoup DCS a, Lè sa a, nou retire poz la epi kontinye viv.

Mèsi anpil!

Mèsi anpil pou rapò ou a! Ki jan ekip pwodwi a santi sou done yo te pèdi?

Ekip pwodwi yo pa pran swen, epi dirijan ekip yo enkyete.

Ki garanti ki genyen?

Garanti yo trè difisil. Alexander Kukushkin gen yon rapò "Ki jan yo kalkile RPO ak RTO", sa vle di tan rekiperasyon ak konbyen done nou ka pèdi. Mwen panse ke nou bezwen jwenn diapositives sa yo epi etidye yo. Osi lwen ke mwen sonje, gen etap espesifik sou kòman yo kalkile bagay sa yo. Konbyen tranzaksyon nou ka pèdi, konbyen done nou ka pèdi. Kòm yon opsyon, nou ka itilize replikasyon synchrone nan nivo Patroni, men sa a se yon epe de bò: swa nou gen fyab done, oswa nou pèdi vitès. Gen replikasyon synchrone, men li tou pa garanti 100% pwoteksyon kont pèt done.

Alexey, mèsi pou gwo rapò a! Nenpòt eksperyans ak itilize Patroni pou pwoteksyon nivo zewo? Sa vle di, an konjonksyon avèk sibstiti synchrone? Sa a se premye kesyon an. E dezyenm kestyon. Ou te itilize solisyon diferan. Nou te itilize Repmgr, men san autofiler, epi kounye a nou ap planifye pou enkli autofiler. E nou konsidere Patroni kòm yon solisyon altènatif. Kisa ou ka di kòm avantaj konpare ak Repmgr?

Premye kesyon an te sou kopi synchrone. Pa gen moun ki sèvi ak replikasyon synchrone isit la, paske tout moun pè (Plizyè kliyan yo deja itilize li, an prensip, yo pa t 'avi pwoblèm pèfòmans - Note Speaker). Men, nou te devlope yon règ pou tèt nou ke ta dwe gen omwen twa nœuds nan yon gwoup replikasyon synchrone, paske si nou gen de nœuds epi si mèt la oswa kopi echwe, Lè sa a, Patroni chanje nœud sa a nan mòd Otonòm pou aplikasyon an kontinye. travay. Nan ka sa a, gen yon risk pou yo pèdi done yo.

Konsènan dezyèm kesyon an, nou te itilize Repmgr e nou toujou fè ak kèk kliyan pou rezon istorik. Kisa ki ka di? Patroni vini ak yon autofiler soti nan bwat la, Repmgr vini ak autofiler kòm yon karakteristik adisyonèl ki bezwen aktive. Nou bezwen kouri daemon Repmgr sou chak ne ak Lè sa a, nou ka configured autofiler la.

Repmgr tcheke si nœuds Postgres yo vivan. Pwosesis Repmgr tcheke pou egzistans youn ak lòt, sa a se pa yon apwòch trè efikas. ka gen ka konplèks nan izolasyon rezo kote yon gwo gwoup Repmgr ka dekonpoze an plizyè lòt ki pi piti epi kontinye travay. Mwen pa swiv Repmgr depi lontan, petèt li te ranje ... oswa petèt pa. Men, retire enfòmasyon sou eta a nan gwoup la nan DCS, kòm Stolon, Patroni fè, se opsyon ki pi solid.

Alexey, mwen gen yon kesyon, petèt yon sèl lamer. Nan youn nan premye egzanp yo, ou deplase DCS soti nan machin lokal la nan yon lame aleka. Nou konprann ke rezo a se yon bagay ki gen karakteristik pwòp li yo, li viv poukont li. Ak sa k ap pase si pou kèk rezon gwoup DCS a vin pa disponib? Mwen pa pral di rezon ki fè yo, ka gen yon anpil nan yo: soti nan men yo kwochi nan rezo a pwoblèm reyèl.

Mwen pa t 'di li byen fò, men gwoup DCS a dwe tou failover, sa vle di li se yon kantite enpè nan nœuds, nan lòd pou yon kowòm yo dwe satisfè. Kisa k ap pase si gwoup DCS a pa disponib, oswa si yon kowòm pa ka satisfè, sa vle di si gen yon kalite fann rezo oswa echèk ne? Nan ka sa a, gwoup Patroni a ale nan mòd li sèlman. Gwoup Patroni a pa ka detèmine eta gwoup la ak sa pou yo fè. Li pa ka kontakte DCS la epi estoke nouvo eta gwoup la la, kidonk tout gwoup la antre nan lekti sèlman. Epi tann swa pou entèvansyon manyèl nan men operatè a oswa pou DCS refè.

Apeprè pale, DCS vin tounen yon sèvis pou nou enpòtan menm jan baz la li menm?

Wi Wi. Nan anpil konpayi modèn, Service Discovery se yon pati entegral nan enfrastrikti a. Li ap aplike menm anvan menm te gen yon baz done nan enfrastrikti a. Relativman pale, enfrastrikti a te lanse, deplwaye nan DC a, epi nou imedyatman gen Service Discovery. Si li se Konsil, Lè sa a, DNS ka bati sou li. Si sa a se Etcd, Lè sa a, ka gen yon pati nan gwoup la Kubernetes, nan ki tout lòt bagay yo pral deplwaye. Mwen sanble ke Service Discovery se deja yon pati entegral nan enfrastrikti modèn. Apre sa, yo panse sou li pi bonè pase sou baz done.

Mèsi!

Sous: www.habr.com

Add nouvo kòmantè