Modelimi i klastereve resiliente mbi bazën e PostgreSQL dhe Pacemaker

Hyrje

Pak sa kohë më parë më është dhënë detyra për të zhvilluar një grup klaster të qëndrueshëm për PostgreSQL, që punon në disa qendra të të dhënave të lidhura me fibra optike brenda një qyteti, dhe në gjendje të përballojë dështimin (p.sh., çmendje të energjisë) të një qendre të të dhënave. Si softuer që përgjigjet për qëndrueshmërinë, kam zgjedhur Pacemaker, sepse kjo është zgjidhja zyrtare nga RedHat për krijimin e grupeve klaster të qëndrueshme. Ajo është e mirë sepse RedHat ofron mbështetje për të, dhe sepse kjo zgjidhje është universale (modulare). Me ndihmën e saj do të jetë e mundur të sigurohet qëndrueshmëria jo vetëm për PostgreSQL, por edhe për shërbime të tjera, duke përdorur module standarde ose duke i krijuar ato për nevoja specifike.

Në këtë zgjidhje ka lindur një pyetje e arsyeshme: sa e qëndrueshme do të jetë klasteri i qëndrueshëm? Për ta shqyrtuar këtë, kam zhvilluar një platformë testuese që imiton dështime të ndryshme në nyjat e klasterit, pret rikthimin në funksionim, rikthen nyjën e dështuar dhe vazhdon testimin në cikël. Fillimisht ky projekt ishte quajtur hapgsql, por me kalimin e kohës më është bërë e mërzitshme emri, në të cilin kishte vetëm një zanore. Prandaj, bazat e të dhënave të qëndrueshme (dhe IP e peshkuar të cilat i tregojnë ato) fillova t'i quaj krogan (karakter nga një lojë kompjuterike, ku të gjithë organet e rëndësishme janë të dyfishuara), ndërsa nyjat, klasteret dhe vetë projekti janë quajtur tuchanka (planeti ku jetojnë kroganët).

Tani drejtuesit lejuan ndërtimin e projektit për komunitetin open source nën licencën MIT. README do të përkthhet në anglisht së shpejti (sepse pritet që konsumatorët kryesorë të jenë zhvilluesit e Pacemaker dhe PostgreSQL), dhe versioni i vjetër në rus të README e kam vendosur ta organizoj (pjesërisht) në formën e këtij artikulli.

Modelimi i klastereve resiliente mbi bazën e PostgreSQL dhe Pacemaker

Klasterët krijohen në virtualka VirtualBox. Në total do të krijohen 12 virtualka (në total 36GiB), të cilat do të formojnë 4 grupe klaster të qëndrueshme (versione të ndryshme). Dy klasterët e parë përbëhen nga dy servera PostgreSQL, të cilët vendosen në qendra të ndryshme të të dhënave, dhe një server i përbashkët witness c quorum device (i vendosur në një virtualke të lirë në qendrën e tretë të të dhënave), i cili zgjidh pasigurinë 50%/50%, duke i dhënë votën e tij njërit nga palët. Klasteri i tretë është në tre qendra të të dhënave: një master, dy skllavë, pa quorum device. Klasteri i katërt përbëhet nga katër serverë PostgreSQL, dy në çdo qendër të të dhënave: një master dhe të tjerët replika, dhe gjithashtu përdor witness c quorum device. Katri i katërt mbulon dështimin e dy serverëve ose të një qendre të të dhënave. Ky zgjidhje mund të zgjeroheshe në një numër më të madh replikash, nëse është e nevojshme.

Shërbimi i kohës së saktë ntpd gjithashtu është konfigurue për qëndrueshmëri, por atje përdoren metoda e vet ntpd (orphan mode). Serveri i përgjithshëm witness luan rolin e serverit qendror NTP, duke shpërndarë kohën e tij për të gjithë klasterët, duke sinkronizuar kështu të gjithë serverët mes tyre. Nëse witness dështon ose është i izoluar, atëherë një nga serverët e klasterit do të fillojë të shpërndajë kohën e tij (brenda klasterit). Një HTTP proxy gjithashtu është ngritur në witness, me ndihmën e të cilës virtualkat e tjera kanë qasje në depozitë Yum. Në realitet, shërbime të tilla si koha e saktë dhe proxy, me siguri do të vendosen në serverë të dedikuar, por në skenë ato janë vendosur në witness vetëm për kursimin e numrit të virtualkave dhe hapësirës.

Versionet

v0. Punon me CentOS 7 dhe PostgreSQL 11 në VirtualBox 6.1.

Struktura e klasterëve

Të gjitha klasterët janë të destinuar për t'u vendosur në disa qendra të të dhënave, të lidhura në një rrjet të sheshtë dhe duhet të mbështesin dështimin ose izolimin rrjetor të një qendre të të dhënave. Prandaj nuk është i mundur përdoret për të mbrojtur nga split-brain teknologji standarde Pacemaker, e quajtur STONITH (Shoqërimi i Një Njësie Tjetër në Kokë) ose fencing. Esenca e saj është: nëse nyjet në klaster fillojnë të dyshojnë se ndonjë nyje ka ndodhur diçka e çuditshme, nuk përgjigjet ose sillen në mënyrë jo korrekte, ato e çaktivizojnë atë përmes pajisjeve 'të jashtme', për shembull, kartën kontrolluese IPMI ose UPS. Por kjo do të funksionojë vetëm në rastet kur, në rast dështimi të vetëm të serverit, IPMI ose UPS vazhdojnë të funksionojnë. Këtu, gjithashtu parashikohet mbrojtja nga një dështim shumë më katastrofik, kur dështojnë (p.sh. dështojnë në energji) e gjithë qendra e të dhënave. Në rast të një dështimi të tillë, të gjitha stonith- pajisjet (IPMI, UPS etj.) gjithashtu nuk do të funksionojnë.

Në vend të kësaj, sistemi bazohet në idenë e kvorumit. Të gjitha nyjet kanë një zë, dhe mund të punojnë vetëm ato që shohin më shumë se gjysmë në të gjitha nyjet. Ky numër 'gjysmë+1' quhet kuorum. Nëse nuk arrin të arrihet kvorumi, atëherë nyja vendos se ndodhet në izolim rrjetor dhe duhet të çaktivizojë burimet e saj, pra është një mbrojtje nga split-brain. Nëse softi që përgjigjet për këtë sjellje nuk funksionon, atëherë duhet të aktivizohet watchdog, për shembull, në bazë të IPMI.

NĂ«se numri i nyjeve Ă«shtĂ« çift (klaster nĂ« dy data center), atĂ«herĂ« mund tĂ« lindĂ« njĂ« pasiguri e tillĂ« e quajtur. 50%/50% (pesĂ«dhjetĂ« pĂ«r pesĂ«dhjetĂ«), kur izolimi rrjetor ndan klasterin pikĂ«risht nĂ« mes. Prandaj, pĂ«r numĂ«r tĂ« barabartĂ« nyjesh, shtohet. quorum device — njĂ« demon i padĂ«shirueshĂ«m, i cili mund tĂ« konceptohet nĂ« makinĂ«n virtuale mĂ« tĂ« lirĂ« nĂ« data center e tretĂ«. Ai i jep votĂ«n njĂ«rit prej segmenteve (qĂ« sheh) dhe kĂ«shtu zgjidh pasigurinĂ« 50%/50%. Serveri ku do tĂ« aktivizohet pajisja e quorum, unĂ« e quajta. witness (terminologji nga repmgr, mĂ« pĂ«lqeu).

Burimet mund tĂ« lĂ«vizin nga njĂ« vend nĂ« tjetrin, pĂ«r shembull, nga serverĂ«t e prishur nĂ« ato tĂ« rregullt, ose me urdhĂ«r nga administratoret e sistemeve. QĂ« klientĂ«t tĂ« dinĂ« se ku ndodhen burimet qĂ« u nevojiten (ku duhet tĂ« lidhen?), pĂ«rdoren. IP tĂ« lĂ«vizshme (float IP). KĂ«to janĂ« IP qĂ« Pacemaker mund t'i lĂ«vizĂ« mes nyjeve (tĂ« gjitha ndodhen nĂ« njĂ« rrjet tĂ« sheshtĂ«). Çdora njĂ« prej tyre simbolizon njĂ« burim (shĂ«rbim) dhe do tĂ« jetĂ« aty ku duhet tĂ« lidheni pĂ«r tĂ« pasur qasje nĂ« kĂ«tĂ« shĂ«rbim (nĂ« rastin tonĂ«, DB).

Tuchanka1 (skema me ngjeshje)

Struktura

Modelimi i klastereve resiliente mbi bazën e PostgreSQL dhe Pacemaker

Ideja ishte që kishim shumë baza të vogla të dhënash me ngarkesë të ulët, për të cilat nuk është e leverdishme të mbash një server të dedikuar slave në modalitetin hot standby për transaksionet read only (nuk ka nevojë për një shpërdorim të tillë burimesh).

Në çdo qendër të të dhënave ka një server. Në çdo server ka dy instanca PostgreSQL (në terminologjinë e PostgreSQL ato quhen klastere, por për të shmangur konfuzionin do t'i quaj instanca (në përputhje me DB të tjera), ndërsa klastere do t'i quaj vetëm klasteret Pacemaker). Një instancë punon si master dhe vetëm ajo ofron shërbime (vetëm ajo ka IP flotante). Instanca tjetër punon si skllave për qendrën e dytë të të dhënave dhe do të ofrojë shërbime vetëm nëse masteri bie. Duke qenë se për të shumtën e kohës do të ofrohet shërbim (do të ekzekutohen kërkesa) vetëm nga një instancë nga dy (master), të gjitha burimet e serverit optimizohen për master (kapaciteti dedikohet për kesh shared_buffers etj.), por gjithashtu kur është e nevojshme, ka burime të mjaftueshme edhe për instancën tjetër (edhe nëse për një punë jo optimale përmes keshit të sistemit të skedarëve) për rastin e dështimit të njërit nga qendrat e të dhënave. Skllavi nuk ofron shërbime (nuk ekzekuton kërkesa vetëm për lexim) gjatë funksionimit normal të klasterit, për të shmangur luftën për burimet me masterin në të njëjtin server.

Në rastin e dy nyjave, qëndrueshmëria ndaj dështimeve është e mundur vetëm me replikim asinkron, sepse në rastin e replikimit sinkron, dështimi i skllavit do të çonte në ndalimin e masterit.

Dështimi i witness

Modelimi i klastereve resiliente mbi bazën e PostgreSQL dhe Pacemaker

Dështimi i witness (quorum device) do ta shqyrtoj vetëm për klasterin Tuchanka1, me të gjitha të tjerët do të jetë e njëjta histori. Në rast dështimi të witness, struktura e klasterit nuk do të ndryshojë, gjithçka do të vazhdojë të funksionojë siç ka punuar. Por kvorumi do të bëhet 2 nga 3, dhe për këtë arsye çdo dështim tjetër do të bëhet fatal për klasterin. Sidoqoftë, do të duhet të riparoni urgjentisht.

Dështimi i Tuchanka1

Modelimi i klastereve resiliente mbi bazën e PostgreSQL dhe Pacemaker

Dështimi i njërit nga qendrat e të dhënave për Tuchanka1. Në këtë rast witness i jep votën e tij nyjës së dytë në qendrën e dytë të të dhënave. Atje, skllavi i dikurshëm shndërrohet në master, si rezultat, të dy masterët punojnë në të njëjtin server dhe të dy IP-të e tyre flotante i drejtohen atyre.

Tuchanka2 (klasike)

Struktura

Modelimi i klastereve resiliente mbi bazën e PostgreSQL dhe Pacemaker

Schema klasike me dy nyja. NĂ« njĂ« nyje punon masteri, nĂ« tĂ« tjerĂ«n skllavi. TĂ« dy mund tĂ« ekzekutojnĂ« kĂ«rkesa (skllavi vetĂ«m kĂ«rkesa pĂ«r lexim), ndaj tĂ« dy i drejtohen IP flotante: krogan2 — pĂ«r master, krogan2s1 — pĂ«r skllavin. Do tĂ« ketĂ« qĂ«ndrueshmĂ«ri ndaj dĂ«shtimeve pĂ«r tĂ« dy, masterin dhe skllavin.

Në rastin e dy nyjave, qëndrueshmëria ndaj dështimeve është e mundur vetëm me replikim asinkron, sepse në rastin e replikimit sinkron, dështimi i skllavit do të çonte në ndalimin e masterit.

Dështimi i Tuchanka2

Modelimi i klastereve resiliente mbi bazën e PostgreSQL dhe Pacemaker

Në rastin e dështimit të njërit nga qendrat e të dhënave witness votimi për të dytin. Në qendrën e vetme funksionale të të dhënave do të ngrihet masteri, dhe të dy IP-të fluturues do të tregojnë në të: masteri dhe skllavi. Sigurisht, instance duhet të jetë e konfiguruar në një mënyrë që të ketë burime të mjaftueshme (për kufizimet nën lidhje etj.) për të pranuar në të njëjtën kohë të gjitha lidhjet dhe kërkesat nga masteri dhe skllavi. Prandaj, gjatë funksionimit normal, ai duhet të ketë një rezervë të mjaftueshme për kufizimet.

Tuchanka4 (shumë skllevër)

Struktura

Modelimi i klastereve resiliente mbi bazën e PostgreSQL dhe Pacemaker

Kjo është një tjetër ekstrem. Ka Baza të Dhënash ku ka shumë kërkesa read-only (rasisti tipik i një uebi me ngarkesë të lartë). Tuchanka4 është situata kur skllevër mund të jenë tre ose më shumë për të trajtuar këto kërkesa, por për të mos pasur shumë. Kur ka një numër shumë të madh skllevër, do të duhet të shpikni një sistem hierarkik replikimi. Në rastin minimal (në figurë) në secilën prej dy qendrave të të dhënave ndodhen nga dy serverë, në secilin prej të cilëve ka nga një instance PostgreSQL.

Një veçori tjetër e kësaj skeme është se këtu mund të organizohet një replikim i njëanshëm. Ai është konfiguruar në mënyrë që të replikojë, sa më shumë të jetë e mundur, në një qendër të dhënash tjetër, dhe jo në një replikë në të njëjtën qendër të dhënash si masteri. Në master dhe në secilin skllav tregohet IP fluturuese. Në rastin ideal, mes skllevërve do të duhet të bëhet balancimi i kërkesave me ndonjë sql proxy, për shembull, në anën e klientit. Një lloj i ndryshëm klientësh mund të kërkojë një lloj të ndryshëm sql proxy, dhe vetëm zhvilluesit e klientëve e dinë se kujt i nevojitet çfarë. Kjo funksionalitet mund të realizohet si nga një demon të jashtëm, ashtu edhe nga një bibliotekë klienti (connection pool), etj. Të gjitha këto dalin jashtë kësaj teme të klasës së dhënash me tolerancë ndaj dështimit (tolerancë ndaj dështimit SQL proxy mund të realizohet në mënyrë të pavarur, së bashku me tolerancën e klientit).

Dështimi Tuchanka4

Modelimi i klastereve resiliente mbi bazën e PostgreSQL dhe Pacemaker

Kur ndodh dështimi i një qendre të dhënash (dmth. dy serverë), witness voton për të dytin. Si rezultat, në qendrën e dytë të të dhënave funksionojnë dy serverë: në një funksionon masteri, dhe në të tregohet IP fluturuese për masterin (për të pranuar kërkesa read-write); dhe në serverin e dytë funksionon skllavi me replikim të njëanshëm, dhe në të tregohet një nga IP-të flutruese të skllavit (për kërkesat read only).

E para që duhet të theksohet: IP fluturuese e skllavit do të jetë vetëm një, dhe për funksionim të duhur me të, do të nevojitet që sql proxy ka drejtonte të gjitha kërkesat në IP-në e mbetur float; dhe nëse sql proxy jo, mund të renditni të gjitha IP-të float të skllevërve me presje në URL për lidhje. Në këtë rast me libpq lidhja do të jetë me IP-në e parë punuese, ashtu siç është bërë në sistemin e testimit automatik. Ndoshta, në biblioteka të tjera, si JDBC, kjo nuk do të funksionojë dhe është e nevojshme sql proxy. Kjo është bërë sepse ka një ndalim për të ngritur njëkohësisht IP-të float për skllevërit në një server, për t'i shpërndarë ato në mënyrë të barabartë në serverët e skllevërve, nëse punohet me disa.

E dyta: madje në rastin e dështimit të qendrës së të dhënave, do të ruhet replikimi sinkron. Dhe madje nëse ndodh një dështim i dytë, domethënë në qendrën e mbetur, një nga dy serverët dështojnë, klasteri edhe pse do të ndalojë ofrimin e shërbimeve, do të ruajë informacionin për të gjitha transaksionet e angazhuara, për të cilat ai dha një konfirmim për angazhimin (nuk do të ketë humbje informacioni në rastin e dështimit të dytë).

Tuchanka3 (3 qendra të dhënash)

Struktura

Modelimi i klastereve resiliente mbi bazën e PostgreSQL dhe Pacemaker

Ky është një klaster për një situatë kur ka tre qendra të plota të të dhënave në funksionim, në secilën prej të cilave ka një server të DB në funksionim. Në këtë rast quorum device nuk është e nevojshme. Në një qendër të të dhënave punon masteri, në dy të tjera janë skllevër. Replikimi është sinkron, lloji ANY (slave1, slave2), domethënë klienti do të marrë konfirmimin e angazhimit, kur ndonjë nga skllevërit e para të përgjigjet që ka pranuar angazhimin. Burimet indikojnë një IP float për masterin dhe dy për skllevërit. Ndryshe nga Tuchanka4, të gjitha tre IP-të float janë të disponueshme. Për balancimin e kërkesave SQL read-only mund të përdorin sql proxy (me disponueshmëri të veçantë), ose të caktuar një IP float skllevër për gjysmën e klientëve, ndërsa gjysmës tjetër një IP float tjetër.

Dështimi Tuchanka3

Modelimi i klastereve resiliente mbi bazën e PostgreSQL dhe Pacemaker

Në rastin e dështimit të një nga qendrat e të dhënave, mbeten dy. Njëra ka ngritur masterin dhe IP-në float nga masteri, në tjetrën ka skllevër dhe të dyja IP-të float të skllevërve (në instancë duhet të ketë rezervë dyfish për burimet, për të pranuar të gjitha lidhjet nga të dyja IP-të float të skllevërve). Ndërmjet masterëve dhe skllevërit ekziston replikimi sinkron. Gjithashtu klasteri do të ruajë informacionin për transaksionet e angazhuara dhe të konfirmuara (nuk do të ketë humbje informacioni) në rastin e shkatërrimit të dy qendrave të të dhënave (nëse ato janë shkatërruar jo njëkohësisht).

Unë vendosa të mos përfshij një përshkrim të detajuar të strukturës së skedarëve dhe shpërndarjes. Kush do të dojë të eksperimentojë, mund ta lexojë të gjithë këtë në README. Unë po jap vetëm përshkrimin e testimit automatik.

Sistemi i testimit automatizuar

Për të verifikuar qëndrueshmërinë e klasterëve me simuluar defekte të ndryshme u krijua një sistem testimi automatik. Aktivizohet me një skript test/failure. Skripti mund të pranojë si parametra numrat e klasterëve që dëshironi të testoni. Për shembull, kjo komandë:

test/failure 2 3

do të testojë vetëm klasterin e dytë dhe të tretë. Nëse parametrat nuk janë të specifikuar, të gjitha klasterët do të testohen. Të gjitha klasterët testohen paralelisht, dhe rezultati shfaqet në panelin tmux. Tmux përdor një server të dedikuar tmux, kështu që skripti mund të aktivizohet nga tmux default, duke krijuar një tmux të brendshëm. Rekomandoj të përdorni terminalin në një dritare të madhe dhe me një shkronjë të vogël. Para fillimit të testimit, të gjitha virtualkat rikthehen në një snapshot në momentin kur skripti përfundon. setup.

Modelimi i klastereve resiliente mbi bazën e PostgreSQL dhe Pacemaker

Terminali është ndarë në kolona në përputhje me numrin e klasterëve që po testohen, në parazgjedhje (në screenshot) ato janë katër. Unë do ta shqiptoj përmbajtjen e kolonave me shembullin Tuchanka2. Panelet në screenshot janë të numëruara:

  1. Këtu shfaqet statistika mbi testet. Kolonat:
    • failure — emri i testit (funksioni nĂ« skript), i cili simulohet njĂ« defekt.
    • reaction — koha mesatare aritmetike nĂ« sekonda, pĂ«r tĂ« cilĂ«n klasteri ka rikuperuar funksionalitetin e tij. Matet nga fillimi i punĂ«s sĂ« skriptit qĂ« simuli njĂ« defekt, deri nĂ« momentin kur klasteri rikuperon funksionalitetin e tij dhe Ă«shtĂ« nĂ« gjendje tĂ« vazhdojĂ« ofrimin e shĂ«rbimeve. NĂ«se koha Ă«shtĂ« shumĂ« e vogĂ«l, pĂ«r shembull, gjashtĂ« sekonda (ndodh nĂ« klasterĂ«t me disa skllevĂ«r (Tuchanka3 dhe Tuchanka4)), kjo do tĂ« thotĂ« se defekti ndodhi nĂ« njĂ« skllav asinkron dhe nuk ndikohet asgjĂ« nĂ« funksionalitet, nuk pati ndĂ«rrime tĂ« gjendjes sĂ« klasterit.
    • deviation — tregon shpĂ«rndarjen (saktĂ«sinĂ«) e vlerĂ«s reaction me metodĂ«n "nĂ«nshkallĂ«".
    • count — sa herĂ« Ă«shtĂ« realizuar ky test.
  2. Një ditar i shkurtër lejon vlerësimin se çfarë po bën klasteri në momentin e tanishëm. Shfaqet numri i iteracionit (testit), marka e kohës dhe emri i operacionit. Një përfundim i tejet i gjatë (> 5 minuta) tregon për një problem.
  3. heart (zemra) — koha aktuale. PĂ«r vlerĂ«sim vizual tĂ« funksionimit majstori nĂ« tabelĂ«n e tij shkruhet vazhdimisht koha aktuale duke pĂ«rdorur IP-nĂ« float tĂ« majstor. NĂ« rast suksesi, rezultati shfaqet nĂ« kĂ«tĂ« panel.
  4. rrahje (puls) — «koha aktuale», e cila mĂ« parĂ« ishte regjistruar nga skripti heart nĂ« majstor, tani lexohĂ«t nga robi pĂ«rmes IP-sĂ« sĂ« tij float. Lejon vlerĂ«simin vizual tĂ« funksionimit tĂ« rob at dhe replikimi. NĂ« Tuchanka1 nuk ka robĂ«r me IP float (nuk ka robĂ«r qĂ« ofrojnĂ« shĂ«rbime), por aty ka dy instanca (DB), prandaj kĂ«tu do tĂ« shfaqet jo rrahje, ndĂ«rsa heart instancĂ«s sĂ« dytĂ«.
  5. Monitorimi i gjendjes së klasterit duke përdorur utilitarin pcs mon. Tregon strukturën, shpërndarjen e burimeve sipas nyjeve dhe informacion tjetër të dobishëm.
  6. KĂ«tu shfaqet monitorimi sistematik nga çdo virtuale e klasterit. Ka panele tĂ« tilla dhe mĂ« shumĂ« — sa virtuale ka klasteri. Dy grafika Ngarkesa CPU (nĂ« virtuale janĂ« dy procesorĂ«), emri i virtuales, Ngarkesa e SistemĂ«s (e quajtur si Ngarkesa Mesatare, sepse Ă«shtĂ« e mesatarizuar pĂ«r 5, 10 dhe 15 minuta), tĂ« dhĂ«nat pĂ«r proceset dhe shpĂ«rndarja e memories.
  7. Gjurmimi i skriptit qĂ« kryen testet. NĂ« rast tĂ« defektit — ndalimi papritur i punĂ«s ose njĂ« cikli tĂ« pafund pritjeje — kĂ«tu mund tĂ« shihni shkakun e njĂ« sjelljeje tĂ« tillĂ«.

Testimi bëhet në dy etapa. Fillimisht, skripti kalon përmes të gjitha llojeve të testeve, duke zgjedhur rastësisht një virtuale, ku ky test aplikon. Pastaj kryhet një cikël të pafund testimi, virtualet dhe defekti zgjidhen çdo herë rastësisht. Ndalimi papritur i skriptit të testit (pjesa e poshtme) ose një cikël i pafund pritjeje për diçka (> 5 minuta koha e ekzekutimit të një operacioni, kjo është e dukshme në gjurmim) tregon se ndonjë test në këtë klaster ka dështuar.

Secili test përbëhet nga operacione të mëposhtme:

  1. Fillimi i funksionit, duke imituar defektin.
  2. Gati? — pritja pĂ«r rikuperimin e funksionimit tĂ« klasterit (kur ofrohen tĂ« gjitha shĂ«rbimet).
  3. Shfaqet koha e pritjes për rikuperimin e klasterit (reaction).
  4. Riparo — klasteri "po riparohet". Pas kĂ«saj, ai duhet tĂ« kthehet nĂ« njĂ« gjendje tĂ« plotĂ« funksionimi dhe gatishmĂ«ri pĂ«r defektin e ardhshĂ«m.

Ja lista e testeve me përshkrimin se çfarë bëjnë:

  • ForkBomb: krijon "Out of memory" me ndihmĂ«n e njĂ« bombĂ« fork.
  • OutOfSpace: mbush me tĂ« dhĂ«na. Por testi, nĂ« fakt, Ă«shtĂ« simbolik, duke pasur parasysh ngarkesĂ«n e vogĂ«l qĂ« krijohet gjatĂ« testimit, nĂ« rastin e mbushjes sĂ« mbajtĂ«sit nuk ndodhin zakonisht dĂ«shtime tĂ« PostgreSQL.
  • Postgres-KILL: vret PostgreSQL me komandĂ«n killall -KILL postgres.
  • Postgres-STOP: pezullon PostgreSQL me komandĂ«n killall -STOP postgres.
  • PowerOff: „ndĂ«rron energjinĂ«â€ e makinerisĂ« virtuale me komandĂ«n VBoxManage controlvm "makineri virtuale" poweroff.
  • Reset: riboton makinerinĂ« virtuale me komandĂ«n VBoxManage controlvm "makineri virtuale" reset.
  • SBD-STOP: pezullon demonin SBD me komandĂ«n killall -STOP sbd.
  • ShutDown: dĂ«rgon komandĂ«n nĂ« makinerinĂ« virtuale pĂ«rmes SSH systemctl poweroff, sistemi pĂ«rfundon punĂ«n siç duhet.
  • UnLink: izolim rrjeti, komandĂ« VBoxManage controlvm "makineri virtuale" setlinkstate1 off.

Mbyllja e testit ose me komandën standarde tmux "kill-window" Ctrl-b &, ose me komandën "detach-client" Ctrl-b d: në këtë rast testi është mbyllur, tmux mbyllet, makineritë virtuale përfundojnë.

Problemet e zbuluara gjatë testimit

  • NĂ« kĂ«tĂ« moment demonin sbd pĂ«rpunon ndalimin e demonĂ«ve tĂ« monitoruar, por jo ngjalljen e tyre. Dhe, si pasojĂ«, dĂ«shtimet e papĂ«rshtatshme trajtohen nĂ« mĂ«nyrĂ« tĂ« pasaktĂ«, duke çuar nĂ« ngjallje vetĂ«m Corosync dhe Pacemaker, por pa i pezulluar sbd. PĂ«r verifikim Corosync veçse ekziston PR#83 (nĂ« GitHub te sbd), miratuar nĂ« degĂ«n master. Premtuan (nĂ« PR#83), se do tĂ« ketĂ« diçka tĂ« ngjashme edhe pĂ«r Pacemaker, shpresojmĂ« qĂ« nĂ« RedHat 8 tĂ« bĂ«het. Por kĂ«to "dĂ«shtime" janĂ« teorike, lehtĂ« mund tĂ« imitohet nĂ« mĂ«nyrĂ« artificiale duke pĂ«rdorur, pĂ«r shembull, killall -STOP corosync, por nuk ndodhin kurrĂ« nĂ« jetĂ«n reale.

  • Me Pacemaker nĂ« versionin pĂ«r CentOS 7 nuk Ă«shtĂ« vendosur saktĂ« sync_timeout i quorum device, si rezultat nĂ« rastin e dĂ«shtimit tĂ« njĂ« nyje me njĂ« probabilitet tĂ« caktuar edhe nyja tjetĂ«r, nĂ« tĂ« cilĂ«n duhet tĂ« kalonte masteri. U zgjidh me rritjen sync_timeout i quorum device gjasave gjatĂ« pĂ«rgatitjes (nĂ« skriptin setup/setup1). Ky korrigjim nuk u pranua nga zhvilluesit Pacemaker, pĂ«rkundrazi ata premtuan tĂ« rishikojnĂ« infrastrukturĂ«n nĂ« njĂ« mĂ«nyrĂ« tĂ« tillĂ« (nĂ« njĂ« tĂ« ardhme tĂ« paqartĂ«), qĂ« ky kohĂ«zgjatje tĂ« llogaritet automatikisht.

  • NĂ«se gjatĂ« konfigurimit tĂ« bazĂ«s sĂ« tĂ« dhĂ«nave, Ă«shtĂ« treguar se nĂ« LC_MESSAGES (mesazhet tekstuale) mund tĂ« pĂ«rdoret Unicode, pĂ«r shembull, ru_RU.UTF-8, atĂ«herĂ« gjatĂ« aktivizimit postgres nĂ« njĂ« ambient ku locale nuk Ă«shtĂ« UTF-8, le tĂ« themi, nĂ« njĂ« ambient tĂ« zbrazĂ«t (kĂ«tu pacemaker+pgsqlms(paf) aktivizon postgres), atĂ«herĂ« nĂ« logun e vendit tĂ« shkronjave UTF-8 do tĂ« kenĂ« shenja pyetjesh. Zhvilluesit e PostgreSQL nuk janĂ« arritur qĂ« tĂ« bien dakord se çfarĂ« tĂ« bĂ«jnĂ« nĂ« kĂ«tĂ« rast. Kjo bĂ«n qĂ« duhet tĂ« vendoset LC_MESSAGES=en_US.UTF-8 gjate konfigurimit (krijimit) tĂ« njĂ« instance tĂ« Baza e tĂ« DhĂ«nave.

  • NĂ«se Ă«shtĂ« vendosur wal_receiver_timeout (nĂ« mĂ«nyrĂ« tĂ« parazgjedhur Ă«shtĂ« 60s), atĂ«herĂ« gjatĂ« testit PostgreSQL-STOP nĂ« master nĂ« klasteret tuchanka3 dhe tuchanka4 nuk ndodh ribashkimi i replikimit me masterin e ri. Replikimi atje Ă«shtĂ« sinkron, prandaj ndalon jo vetĂ«m punĂ«tori, por edhe masteri i ri. Zgjidhet duke vendosur wal_receiver_timeout=0 gjatĂ« konfigurimit tĂ« PostgreSQL.

  • HerĂ« pas here kam vĂ«nĂ« re pezullimin e replikimit nĂ« PostgreSQL gjatĂ« testit ForkBomb (mbipakosja e memories). Pas ForkBomb ndonjĂ«herĂ« punĂ«torĂ«t mund tĂ« mos ribashkohen me masterin e ri. Kam hasur njĂ« tĂ« tillĂ« vetĂ«m nĂ« klasteret tuchanka3 dhe tuchanka4, ku pĂ«r shkak se replikimi Ă«shtĂ« sinkron, masteri ka pezulluar. Problemi kaloi vetĂ«, pas njĂ« kohe tĂ« gjatĂ« (afĂ«r dy orĂ«sh). KĂ«rkohet hetim shtesĂ« pĂ«r ta zgjidhur kĂ«tĂ«. Nga simptomat duket si njĂ« gabim i mĂ«parshĂ«m, i shkaktuar nga njĂ« arsye tjetĂ«r, por me pasoja tĂ« ngjashme.

Imazhi i kroganit është marrë nga Deviant Art me lejen e autorit:

Modelimi i klastereve resiliente mbi bazën e PostgreSQL dhe Pacemaker

Burimi: habr.com

Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster