Sikkerhetskopier fra WAL-G. Hva er det i 2019? Andrey Borodin

Jeg foreslÄr at du leser utskriften av rapporten fra begynnelsen av 2019 av Andrey Borodin "Sikkerhetskopier med WAL-G. Hva er der i 2019?"

Sikkerhetskopier fra WAL-G. Hva er det i 2019? Andrey Borodin

Hei alle sammen! Mitt navn er Andrey Borodin. Jeg er utvikler hos Yandex. Jeg har vért interessert i PostgreSQL siden 2016, etter at jeg snakket med utviklerne og de sa at alt er enkelt – du tar kildekoden og bygger den, og alt ordner seg. Og siden da kan jeg ikke stoppe - jeg skriver alle slags forskjellige ting.

Sikkerhetskopier fra WAL-G. Hva er det i 2019? Andrey BorodinEn av tingene jeg jobber med er et backup-system. WAL-G. Generelt har vi hos Yandex jobbet med sikkerhetskopieringssystemer i PostgreSQL i veldig lang tid. Og du kan finne pÄ Internett en serie pÄ seks rapporter om hvordan vi lager backup-systemer. Og hvert Är utvikler de seg litt, utvikler seg litt og blir mer pÄlitelige.

Men i dag handler rapporten ikke bare om hva vi har gjort, men ogsÄ om hvor enkelt det er og hva som er. Hvor mange av dere har allerede sett rapportene mine om WAL-G? Det er bra at ganske mange ikke sÄ pÄ, for jeg starter med det enkleste.

Sikkerhetskopier fra WAL-G. Hva er det i 2019? Andrey Borodin

Hvis du plutselig har en PostgreSQL-klynge, og jeg tror alle har et par av dem med seg, og det plutselig ikke er noe backup-system ennÄ, sÄ mÄ du fÄ en hvilken som helst S3-lagring eller Google Cloud-kompatibel lagring.

Sikkerhetskopier fra WAL-G. Hva er det i 2019? Andrey Borodin

Du kan for eksempel komme til standen vÄr og ta en kampanjekode for Yandex Object Storage, som er S3-kompatibel.

Sikkerhetskopier fra WAL-G. Hva er det i 2019? Andrey Borodin

Lag deretter en bĂžtte. Det er bare en beholder for informasjon.

Sikkerhetskopier fra WAL-G. Hva er det i 2019? Andrey Borodin

Opprett en tjenestebruker.

Sikkerhetskopier fra WAL-G. Hva er det i 2019? Andrey Borodin

Opprett en tilgangsnĂžkkel for tjenestebrukeren: aws-s3-key.

Sikkerhetskopier fra WAL-G. Hva er det i 2019? Andrey Borodin

Last ned den siste stabile utgaven av WAL-G.

Hvordan er vÄre forhÄndsutgivelser forskjellige fra utgivelser? Jeg blir ofte bedt om Ä slippe tidlig. Og hvis det ikke er noen feil i versjonen i tilstrekkelig tid, for eksempel en mÄned, slipper jeg den. Her er denne utgivelsen fra november. Og dette betyr at vi hver mÄned fant en slags feil, vanligvis i ikke-kritisk funksjonalitet, men vi har ennÄ ikke gitt ut en utgivelse. Den forrige versjonen er bare november. Det er ingen feil kjent for oss i den, det vil si at bugs ble lagt til etter hvert som prosjektet skred frem.

Sikkerhetskopier fra WAL-G. Hva er det i 2019? Andrey Borodin

NÄr du har lastet ned WAL-G, kan du kjÞre en enkel "backup list"-kommando ved Ä sende inn miljÞvariablene. Og den vil koble til Object Storage og fortelle deg hvilke sikkerhetskopier du har. FÞrst bÞr du selvfÞlgelig ikke ha sikkerhetskopier. Poenget med dette lysbildet er Ä vise at alt er ganske enkelt. Dette er en konsollkommando som godtar miljÞvariabler og utfÞrer underkommandoer.

Sikkerhetskopier fra WAL-G. Hva er det i 2019? Andrey Borodin

Etter dette kan du ta din fÞrste sikkerhetskopi. Si "backup-push" i WAL-G og spesifiser i WAL-G pgdata-plasseringen til klyngen din. Og mest sannsynlig vil PostgreSQL fortelle deg, hvis du ikke allerede har et sikkerhetskopisystem, at du mÄ aktivere "arkivmodus".

Sikkerhetskopier fra WAL-G. Hva er det i 2019? Andrey Borodin

Dette betyr at du mÄ gÄ til innstillinger og slÄ pÄ "archive_mode = on" og legge til "archive_command", som ogsÄ er en underkommando i WAL-G. Men av en eller annen grunn bruker folk ofte bar scripts om dette emnet og vikler det rundt WAL-G. Vennligst ikke gjÞr dette. Bruk funksjonaliteten som finnes i WAL-G. Hvis du mangler noe, skriv til GitHub. WAL-G antar at det er det eneste programmet som kjÞrer i archive_command.

Sikkerhetskopier fra WAL-G. Hva er det i 2019? Andrey Borodin

Vi bruker WAL-G hovedsakelig for Ă„ lage en High Availability-klynge i Yandex Database Management.

Sikkerhetskopier fra WAL-G. Hva er det i 2019? Andrey Borodin

Og det brukes vanligvis i en topologi av en Master og flere replikasjoner. Samtidig lager den en sikkerhetskopi i Yandex Object Storage.

Sikkerhetskopier fra WAL-G. Hva er det i 2019? Andrey Borodin

De vanligste scenariene er Ä lage kopier av en klynge ved Ä bruke Point in time recovery. Men i dette tilfellet er ikke ytelsen til backupsystemet sÄ viktig for oss. Vi trenger bare Ä laste opp en ny klynge fra sikkerhetskopien.

Sikkerhetskopier fra WAL-G. Hva er det i 2019? Andrey Borodin

Vanligvis trenger vi backupsystemytelse nÄr vi legger til en ny node. Hvorfor er det viktig? Vanligvis legger folk til en ny node til en klynge fordi den eksisterende klyngen ikke kan hÄndtere lesebelastningen. De mÄ legge til en ny kopi. Hvis vi legger til lasten fra pg_basebackup til masteren, kan masteren kollapse. Derfor var det veldig viktig for oss at vi raskt kunne laste opp en ny node fra arkivet, og skape minimal belastning pÄ Master.

Sikkerhetskopier fra WAL-G. Hva er det i 2019? Andrey Borodin

Og en annen lignende situasjon. Dette er behovet for Ä starte den gamle masteren pÄ nytt etter Ä ha byttet klyngemasteren fra datasenteret som tilkoblingen gikk tapt med.

Sikkerhetskopier fra WAL-G. Hva er det i 2019? Andrey Borodin

  • Som et resultat, da vi formulerte kravene til kopisystemet, innsĂ„ vi at pg_basebackup ikke er egnet for oss nĂ„r vi opererer i skyen.
  • Vi Ăžnsket Ă„ kunne komprimere dataene vĂ„re. Men nesten alle andre backup-systemer enn det som fĂžlger med i esken vil gi datakomprimering.
  • Vi Ăžnsket Ă„ parallellisere alt fordi en bruker i skyen kjĂžper et stort antall prosessorkjerner. Men hvis vi ikke har parallellitet i en eller annen operasjon, blir et stort antall kjerner ubrukelig.
  • Vi trenger kryptering fordi dataene ofte ikke er vĂ„re og kan ikke lagres i klartekst. Forresten, vĂ„rt bidrag til WAL-G begynte med kryptering. Vi fullfĂžrte krypteringen i WAL-G, hvoretter vi ble spurt: "Kanskje en av oss vil utvikle prosjektet?" Og siden den gang har jeg jobbet med WAL-G i mer enn ett Ă„r.
  • Vi trengte ogsĂ„ struping av ressurser, for over tid ved bruk av skyen fant vi ut at noen ganger har folk en viktig dagligvarebelastning om natten, og denne belastningen kan ikke forstyrres. Derfor la vi til ressursregulering.
  • Samt notering og ledelse.
  • Og verifisering.

Sikkerhetskopier fra WAL-G. Hva er det i 2019? Andrey Borodin

Vi sÄ pÄ mange forskjellige verktÞy. Heldigvis har vi et enormt utvalg i PostgreSQL. Og overalt manglet vi noe, en liten funksjon, en liten funksjon.

Sikkerhetskopier fra WAL-G. Hva er det i 2019? Andrey Borodin

Og etter Ä ha undersÞkt de eksisterende systemene, kom vi til den konklusjon at vi vil utvikle WAL-G. Det var et nytt prosjekt da. Det var ganske enkelt Ä pÄvirke utviklingen mot skyinfrastrukturen til backupsystemet.

Sikkerhetskopier fra WAL-G. Hva er det i 2019? Andrey Borodin

Hovedideologien vi holder oss til er at WAL-G skal vĂŠre like enkel som en balalaika.

Sikkerhetskopier fra WAL-G. Hva er det i 2019? Andrey Borodin

WAL-G har 4 kommandoer. Dette:

WAL-PUSH – arkiver skaftet.

WAL-FETCH – fĂ„ et skaft.

BACKUP-PUSH – ta en sikkerhetskopi.

BACKUP-FETCH – fĂ„ en sikkerhetskopi fra backup-systemet.

Sikkerhetskopier fra WAL-G. Hva er det i 2019? Andrey Borodin

Faktisk har WAL-G ogsÄ administrasjon av disse sikkerhetskopiene, det vil si Ä liste og slette filer og sikkerhetskopier i historikken som ikke lenger er nÞdvendig for Þyeblikket.

Sikkerhetskopier fra WAL-G. Hva er det i 2019? Andrey Borodin

En av de viktige funksjonene for oss er funksjonen med Ă„ lage deltakopier.

Deltakopier gjÞr at vi ikke lager en fullstendig sikkerhetskopi av hele klyngen, men kun de endrede sidene til de endrede filene i klyngen. Det ser ut til at dette funksjonelt sett er veldig likt muligheten til Ä gjenopprette ved hjelp av WAL. Men vi kan rulle opp en WAL enkelt-trÄdet delta backup parallelt. FÞlgelig, nÄr vi har en grunnleggende sikkerhetskopi pÄ lÞrdag, delta backup daglig, og pÄ torsdag vi mislykkes, mÄ vi rulle opp 4 delta backup og 10 timer WAL. Det vil ta omtrent samme tid fordi delta-backupene ruller parallelt.

Sikkerhetskopier fra WAL-G. Hva er det i 2019? Andrey Borodin

LSN-baserte deltaer - dette betyr at nÄr vi oppretter en sikkerhetskopi, mÄ vi kombinere hver side og sjekke dens LSN med LSN for forrige sikkerhetskopi for Ä forstÄ at den har endret seg. Enhver side som potensielt kan inneholde endrede data bÞr vÊre til stede i delta-sikkerhetskopien.

Sikkerhetskopier fra WAL-G. Hva er det i 2019? Andrey Borodin

Som sagt ble det lagt ganske stor vekt pÄ parallellitet.

Sikkerhetskopier fra WAL-G. Hva er det i 2019? Andrey Borodin

Men arkiv-APIet i PostgreSQL er konsekvent. PostgreSQL arkiverer én WAL-fil og ber om én WAL-fil nÄr den gjenopprettes. Men nÄr databasen ber om én WAL-fil ved Ä bruke kommandoen "WAL-FETCH", kaller vi kommandoen "WAL-PREFETCH", som forbereder de neste 8 filene til Ä hente data fra objektlageret parallelt.

Sikkerhetskopier fra WAL-G. Hva er det i 2019? Andrey BorodinOg nÄr databasen ber oss om Ä arkivere én fil, ser vi pÄ archive_status og ser om det finnes andre WAL-filer. Og vi prÞver ogsÄ Ä laste ned WAL parallelt. Dette gir en betydelig ytelsesforsterkning og reduserer avstanden betydelig i antall uarkiverte WAL-er. Mange utviklere av sikkerhetskopieringssystem mener at dette er et sÄ risikabelt system fordi vi stoler pÄ vÄr kunnskap om innsiden av koden som ikke er PostgreSQL API. PostgreSQL garanterer ikke tilstedevÊrelsen av mappen archive_status for oss og garanterer ikke semantikken, tilstedevÊrelsen av beredskapssignaler for WAL-filer der. Likevel studerer vi kildekoden, vi ser at det er slik og vi prÞver Ä utnytte den. Og vi kontrollerer retningen PostgreSQL utvikler seg i; hvis denne mekanismen plutselig brytes, vil vi slutte Ä bruke den.

Sikkerhetskopier fra WAL-G. Hva er det i 2019? Andrey Borodin

I sin rene form krever LSN-basert WAL delta lesing av alle klyngefiler hvis modustid i filsystemet har endret seg siden forrige sikkerhetskopiering. Vi levde med dette lenge, nesten ett Är. Og til slutt kom vi til den konklusjonen at vi har WAL-deltaer.

Sikkerhetskopier fra WAL-G. Hva er det i 2019? Andrey BorodinDette betyr at hver gang vi arkiverer WAL pÄ Master, komprimerer vi den ikke bare, krypterer den og sender den til nettverket, men vi leser den samtidig. Vi analyserer og leser postene i den. Vi forstÄr hvilke blokker som har endret seg og samler deltafiler.

En deltafil beskriver et visst utvalg av WAL-filer, beskriver informasjon om hvilke blokker som ble endret i dette omrÄdet av WAL. Og sÄ blir ogsÄ disse deltafilene arkivert.

Sikkerhetskopier fra WAL-G. Hva er det i 2019? Andrey Borodin

Her stÄr vi overfor det faktum at vi parallelliserte alt ganske raskt, men vi kan ikke lese en sekvensiell historie parallelt, fordi vi i et bestemt segment kan mÞte slutten pÄ den forrige WAL-rekorden, som vi ikke har noe Ä koble til ennÄ, fordi parallelllesing fÞrte til at vi fÞrst analyserer fremtiden, som ennÄ ikke har en fortid.

Sikkerhetskopier fra WAL-G. Hva er det i 2019? Andrey Borodin

Som et resultat mÄtte vi legge inn uforstÄelige deler i _delta_partial-filer. Som et resultat, nÄr vi gÄr tilbake til fortiden, vil vi lime bitene av WAL-posten til en, etter det vil vi analysere den og forstÄ hva som endret seg i den.

Hvis det i historien til akselparsingen vÄr er minst ett punkt hvor vi ikke forstÄr hva som skjedde, vil vi fÞlgelig under neste sikkerhetskopiering bli tvunget til Ä lese hele klyngen pÄ nytt, akkurat som vi gjorde med en vanlig LSN -basert delta.

Sikkerhetskopier fra WAL-G. Hva er det i 2019? Andrey Borodin

Som et resultat fÞrte all vÄr lidelse til det faktum at vi Äpnet WAL-G-parsing-biblioteket. SÄ vidt jeg vet er det ingen som bruker det ennÄ, men hvis noen vil, skrive og bruke det, er det offentlig eiendom. (Oppdatert lenke https://github.com/wal-g/wal-g/tree/master/internal/walparser)

Sikkerhetskopier fra WAL-G. Hva er det i 2019? Andrey Borodin

Som et resultat ser all informasjonsflyt ganske komplisert ut. VÄr Mester arkiverer skaftet og arkiverer deltafiler. Og replikaen som lager sikkerhetskopien mÄ motta deltafiler i lÞpet av tiden som har gÄtt mellom sikkerhetskopieringene. I dette tilfellet mÄ deler av historien legges til i bulk og analyseres, fordi ikke hele historien passer inn i store segmenter. Og fÞrst etter dette kan replikaen arkivere en full delta backup.

Sikkerhetskopier fra WAL-G. Hva er det i 2019? Andrey Borodin

PÄ grafene ser alt mye enklere ut. Dette er en nedlasting fra en av vÄre virkelige klynger. Vi har LSN-basert, laget pÄ en dag. Og vi ser at den LSN-baserte delta-backupen kjÞrte fra tre om morgenen til fem om morgenen. Dette er belastningen i antall prosessorkjerner. WAL-delta tok oss ca 20 minutter her, det vil si at det ble betydelig raskere, men samtidig ble det en mer intens utveksling over nettet.

Sikkerhetskopier fra WAL-G. Hva er det i 2019? Andrey Borodin

Siden vi har informasjon om hvilke blokker som ble endret og pÄ hvilket tidspunkt i databasens historie, gikk vi videre og bestemte oss for Ä integrere funksjonalitet - en PostgreSQL-utvidelse kalt "pg_prefaulter"

Sikkerhetskopier fra WAL-G. Hva er det i 2019? Andrey Borodin

Dette betyr at nÄr standby-basen utfÞrer gjenopprettingskommandoen, forteller den WAL-G Ä hente neste WAL-fil. Vi forstÄr omtrent hvilke datablokker WAL-gjenopprettingsprosessen vil fÄ tilgang til i nÊr fremtid og starter en leseoperasjon pÄ disse blokkene. Dette ble gjort for Ä Þke ytelsen til SSD-kontrollere. Fordi WAL-rullen kommer til siden som mÄ endres. Denne siden er pÄ disk og er ikke i sidebufferen. Og han vil vente synkront pÄ at denne siden kommer. Men i nÊrheten er WAL-G, som vet at i lÞpet av de neste hundre megabyte med WAL vil vi trenge visse sider og samtidig begynner Ä varme dem opp. Starter flere disktilganger slik at de kjÞres parallelt. Dette fungerer bra pÄ SSD-stasjoner, men dessverre er det absolutt ikke aktuelt for en harddisk, fordi vi bare forstyrrer den med vÄre meldinger.

Dette er det som stÄr i koden nÄ.

Sikkerhetskopier fra WAL-G. Hva er det i 2019? Andrey Borodin

Det er funksjoner vi Ăžnsker Ă„ legge til.

Sikkerhetskopier fra WAL-G. Hva er det i 2019? Andrey Borodin

Dette bildet viser at WAL-deltaet tar relativt kort tid. Og dette er Ă„ lese endringene som skjedde i databasen i lĂžpet av dagen. Vi kunne gjĂžre WAL-delta ikke bare om natten, fordi det ikke lenger er en betydelig kilde til belastning. Vi kan lese WAL-delta hvert minutt fordi det er billig. PĂ„ ett minutt kan vi skanne alle endringene som har skjedd i klyngen. Og dette kan kalles "instant WAL-delta".

Sikkerhetskopier fra WAL-G. Hva er det i 2019? Andrey Borodin

Poenget er at nÄr vi gjenoppretter klyngen, reduserer vi antallet historier som vi mÄ rulle opp sekvensielt. Det vil si at mengden WAL som PostgreSQL ruller bÞr reduseres, fordi det tar betydelig tid.

Men det er ikke alt. Hvis vi vet at en blokk vil bli endret til et punkt for sikkerhetskopiering, kan vi ikke endre det tidligere. Det vil si at nÄ har vi fil-for-fil-optimalisering av WAL-delta-videresending. Dette betyr at hvis, for eksempel pÄ tirsdag, en tabell ble fullstendig slettet eller noen filer ble slettet helt fra tabellen, vil vi ikke engang opprette disse dataene nÄr delta ruller over pÄ mandag og lÞrdagens pg_basebackup gjenopprettes.

Vi Þnsker Ä utvide denne teknologien til sidenivÄ. Det vil si at hvis en del av filen endres pÄ mandag, men vil bli overskrevet pÄ onsdag, sÄ nÄr vi gjenoppretter til et punkt pÄ torsdag, trenger vi ikke Ä skrive de fÞrste versjonene av sidene til disken.

Men dette er fortsatt en idé som diskuteres aktivt i oss, men den har ennÄ ikke nÄdd koden.

Sikkerhetskopier fra WAL-G. Hva er det i 2019? Andrey Borodin

Vi Þnsker Ä lage en funksjon til i WAL-G. Vi Þnsker Ä gjÞre det utvidbart fordi vi trenger Ä stÞtte ulike databaser og Þnsker Ä kunne nÊrme oss sikkerhetskopiering pÄ samme mÄte. Men problemet er at MySQL API-ene er radikalt forskjellige. I MySQL er PITR ikke basert pÄ den fysiske WAL-loggen, men pÄ binloggen. Og vi har ikke et arkiveringssystem i MySQL som vil fortelle et eksternt system at denne binloggen er ferdig og mÄ arkiveres. Vi mÄ stÄ et sted i cron med databasen og sjekke om det er noe klart?

Og pÄ samme mÄte, under en MySQL-gjenoppretting, er det ingen gjenopprettingskommando som kan fortelle systemet at jeg trenger slike og slike filer. FÞr du begynner Ä gjenoppbygge klyngen din, mÄ du vite hvilke filer du trenger. Du mÄ selv gjette hvilke filer du trenger. Men disse problemene kan kanskje omgÄs pÄ en eller annen mÄte. (Forklaring: MySQL stÞttes allerede)

Sikkerhetskopier fra WAL-G. Hva er det i 2019? Andrey Borodin

I rapporten Þnsket jeg ogsÄ Ä snakke om de tilfellene der WAL-G ikke passer for deg.

Sikkerhetskopier fra WAL-G. Hva er det i 2019? Andrey Borodin

Hvis du ikke har en synkron kopi, garanterer ikke WAL-G at det siste segmentet vil bli bevart. Og hvis arkivering henger etter de siste delene av historien, er det en risiko. Hvis det ikke er noen synkron kopi, vil jeg ikke anbefale Ă„ bruke WAL-G. Likevel er den hovedsakelig designet for en skyinstallasjon, noe som innebĂŠrer en High Availability-lĂžsning med en synkron replika, som er ansvarlig for sikkerheten til de siste bytene som ble forpliktet.

Sikkerhetskopier fra WAL-G. Hva er det i 2019? Andrey Borodin

Jeg ser ofte folk som prÞver Ä kjÞre bÄde WAL-G og WAL-E samtidig. Vi stÞtter bakoverkompatibilitet i den forstand at WAL-G kan gjenopprette en fil fra WAL-E og kan gjenopprette en sikkerhetskopi laget i WAL-E. Men siden begge disse systemene bruker parallell wal-push, begynner de Ä stjele filer fra hverandre. Hvis vi fikser det i WAL-G, vil det fortsatt forbli i WAL-E. I WAL-E ser den pÄ arkivstatus, ser de ferdige filene og arkiverer dem, mens andre systemer rett og slett ikke vil vite at denne WAL-filen eksisterte, fordi PostgreSQL ikke vil prÞve Ä arkivere den en gang til.

Hva skal vi fikse her pÄ WAL-G-siden? Vi vil ikke informere PostgreSQL om at denne filen ble overfÞrt parallelt, og nÄr PostgreSQL ber oss om Ä arkivere den, vil vi allerede vite at en slik fil med denne modus-tiden og med denne md5 allerede er arkivert, og vi vil ganske enkelt si PostgreSQL - OK, alt er klart uten Ä gjÞre noe.

Men dette problemet blir neppe lÞst pÄ WAL-E-siden, sÄ det er for Þyeblikket umulig Ä lage en arkivkommando som vil arkivere filen i bÄde WAL-G og WAL-E.

I tillegg er det tilfeller der WAL-G ikke passer for deg nÄ, men vi vil definitivt fikse det.

Sikkerhetskopier fra WAL-G. Hva er det i 2019? Andrey BorodinFor det fÞrste har vi for Þyeblikket ikke innebygd sikkerhetskopiering. Vi har ikke verifisering verken under sikkerhetskopiering eller gjenoppretting. Dette er selvfÞlgelig implementert i skyen. Men dette implementeres ganske enkelt ved Ä forhÄndssjekke, ganske enkelt ved Ä gjenopprette klyngen. Jeg vil gjerne gi denne funksjonaliteten til brukerne. Men ved verifisering antar jeg at det i WAL-G vil vÊre mulig Ä gjenopprette klyngen og starte den, og kjÞre rÞyktester: pg_dumpall til /dev/null og amcheck indeksverifisering.

Sikkerhetskopier fra WAL-G. Hva er det i 2019? Andrey Borodin

For Þyeblikket i WAL-G er det ingen mÄte Ä utsette en sikkerhetskopi fra WAL. Det vil si at vi stÞtter et eller annet vindu. For eksempel lagring av de siste syv dagene, lagring av de siste ti sikkerhetskopiene, lagring av de siste tre fullstendige sikkerhetskopiene. Ganske ofte kommer folk og sier: "Vi trenger en sikkerhetskopi av det som skjedde pÄ nyttÄr, og vi vil beholde det for alltid." WAL-G vet ennÄ ikke hvordan dette skal gjÞres. (Merk - Dette er allerede fikset. Les mer - Backup-merke alternativ i https://github.com/wal-g/wal-g/blob/master/PostgreSQL.md)

Sikkerhetskopier fra WAL-G. Hva er det i 2019? Andrey Borodin

Og vi har ikke sidesjekksummer og integritetssjekker for alle akselsegmenter nÄr vi validerer PITR.

Sikkerhetskopier fra WAL-G. Hva er det i 2019? Andrey Borodin

Fra alt dette satte jeg sammen et prosjekt for Google Summer of Code. Hvis du kjenner smarte studenter som Þnsker Ä skrive noe i Go og fÄ flere tusen dollar fra ett selskap med bokstaven "G", sÄ anbefal prosjektet vÄrt til dem. Jeg skal fungere som mentor for dette prosjektet, de kan gjÞre det. Hvis det ikke er elever, sÄ tar jeg det og gjÞr det selv til sommeren.

Sikkerhetskopier fra WAL-G. Hva er det i 2019? Andrey Borodin

Og vi har mange andre smÄproblemer som vi etter hvert jobber med. Og noen ganske merkelige ting skjer.

Hvis du for eksempel gir WAL-G en tom sikkerhetskopi, vil den rett og slett falle. For eksempel hvis du forteller ham at han trenger Ä sikkerhetskopiere en tom mappe. Pg_control-filen vil ikke vÊre der. Og han vil tro at han ikke forstÄr noe. I teorien mÄ du i dette tilfellet skrive en vanlig melding til brukeren for Ä forklare ham hvordan du bruker verktÞyet. Men dette er ikke engang en funksjon ved programmering, men en funksjon av et godt, forstÄelig sprÄk.

Vi vet ikke hvordan vi gjÞr offline backup. Hvis databasen lyver, kan vi ikke sikkerhetskopiere den. Men alt er veldig enkelt her. Vi kaller backup av LSN nÄr det startet. LSN for den underliggende basen mÄ leses fra kontrollfilen. Og dette er en sÄ urealisert funksjon. Mange backup-systemer kan ta backup av en underliggende database. Og det er praktisk.

Vi kan for Þyeblikket ikke hÄndtere mangelen pÄ reserveplass pÄ riktig mÄte. For vi jobber vanligvis med store sikkerhetskopier hjemme. Og de kom ikke til det. Men hvis noen Þnsker Ä programmere i Go akkurat nÄ, legg til hÄndtering for feil pÄ plass i bÞtten. Jeg skal definitivt se nÊrmere pÄ pull-forespÞrselen.

Og det viktigste som bekymrer oss er at vi Þnsker sÄ mange docker-integrasjonstester som mulig som sjekker ulike scenarier. Akkurat nÄ tester vi bare grunnleggende scenarier. PÄ hver commit, men vi Þnsker Ä sjekke commit-by-commit all funksjonaliteten vi stÞtter. Spesielt vil vi for eksempel ha nok stÞtte for PostgreSQL 9.4-9.5. Vi stÞtter dem fordi fellesskapet stÞtter PostgreSQL, men vi sjekker ikke commit-by-commit for Ä sikre at alt ikke er Þdelagt. Og det virker for meg som om dette er en ganske alvorlig risiko.

Sikkerhetskopier fra WAL-G. Hva er det i 2019? Andrey Borodin

Vi har WAL-G som kjÞrer pÄ mer enn tusen klynger i Yandex Database Management. Og den sikkerhetskopierer flere hundre terabyte med data hver dag.

Vi har mye TODO i koden vÄr. Hvis du vil programmere, kom, vi venter pÄ pull requests, vi venter pÄ spÞrsmÄl.

Sikkerhetskopier fra WAL-G. Hva er det i 2019? Andrey Borodin

spÞrsmÄl

God kveld! Takk skal du ha! Min gjetning er at hvis du bruker WAL-delta, er du sannsynligvis avhengig av helsidesskrivinger. Og i sÄ fall, kjÞrte du tester? Du viste en vakker graf. Hvor mye vakrere blir det hvis FPW er slÄtt av?

Helsideskriving er aktivert for oss, vi har ikke prĂžvd Ă„ deaktivere det. Det vil si at jeg som utvikler ikke har prĂžvd Ă„ skru den av. Systemadministratorer som har undersĂžkt har sannsynligvis undersĂžkt dette problemet. Men vi trenger FPW. Nesten ingen deaktiverer det, for ellers er det umulig Ă„ ta en sikkerhetskopi fra en kopi.

Takk for rapporten! Jeg har to spÞrsmÄl. Det fÞrste spÞrsmÄlet er hva som vil skje med tablespaces?

Vi venter pÄ en pull-forespÞrsel. Databasene vÄre lever pÄ SSD- og NMVE-disker, og vi trenger egentlig ikke denne funksjonen. Jeg er ikke klar til Ä bruke seriÞs tid akkurat nÄ pÄ Ä gjÞre det bra. Jeg gÄr helhjertet inn for at vi stÞtter dette. Det er folk som stÞttet det, men stÞttet det pÄ en mÄte som passer dem. De laget en gaffel, men de gjÞr ikke pull-forespÞrsler. (Lagt til i versjon 0.2.13)

Og det andre spÞrsmÄlet. Du sa helt i begynnelsen at WAL-G antar at den fungerer alene og at det ikke trengs innpakninger. Jeg bruker selv omslag. Hvorfor skal de ikke brukes?

Vi vil at det skal vÊre sÄ enkelt som en balalaika. Dette betyr at du ikke trenger noe annet enn en balalaika. Vi Þnsker at systemet skal vÊre enkelt. Hvis du har funksjonalitet som du trenger Ä gjÞre i et skript, sÄ kom og fortell oss - vi gjÞr det i Go.

God kveld! Takk for rapporten! Vi klarte ikke Ä fÄ WAL-G til Ä fungere med GPG-dekryptering. Den krypterer normalt, men Þnsker ikke Ä dekryptere. Er det noe som ikke fungerte for oss? Situasjonen er deprimerende.

Opprett et problem pÄ GitHub og la oss finne ut av det.

Det vil si at du ikke har vĂŠrt borti dette?

Det er en funksjon i feilrapporten at nÄr WAL-G ikke forstÄr hva slags fil det er, spÞr den: "Kanskje den er kryptert?" Kanskje problemet ikke er kryptering i det hele tatt. Jeg Þnsker Ä forbedre loggingen pÄ dette emnet. Han mÄ tyde det. Vi jobber for tiden med dette emnet i den forstand at vi egentlig ikke liker hvordan systemet for Ä skaffe offentlige og private nÞkler er organisert. Fordi vi kaller ekstern GPG slik at den gir oss nÞklene. Og sÄ tar vi disse nÞklene og overfÞrer dem til den interne GPG, som er Äpen PGP, som er kompilert for oss inne i WAL-G, og der kaller vi kryptering. I denne forbindelse Þnsker vi Ä forbedre systemet og Þnsker Ä stÞtte Libsodium-kryptering (Lagt til i versjon 0.2.15). SelvfÞlgelig skal dekoding fungere, la oss finne ut av det - du trenger mer et symptom enn et par ord. Du kan samles pÄ hÞyttalerens rom en gang og se pÄ systemet. (PGP-kryptering uten ekstern GPG - v0.2.9)

Hallo! Takk for rapporten! Jeg har to spÞrsmÄl. Jeg har et merkelig Þnske om Ä logge inn pg_basebackup og WAL pÄ to leverandÞrer, det vil si at jeg vil gjÞre en sky og en annen. Er det noen mÄte Ä gjÞre dette pÄ?

Dette eksisterer ikke nÄ, men det er en interessant idé.

Jeg stoler bare ikke pÄ én leverandÞr, jeg vil ha den samme hos en annen, i tilfelle.

Ideen er interessant. Teknisk sett er dette slett ikke vanskelig Ä gjennomfÞre. For Ä forhindre at ideen blir borte, kan jeg be deg om Ä lage et problem pÄ GitHub?

Ja, selvfĂžlgelig.

Og sÄ, nÄr elevene kommer til Google Summer of Code, vil vi legge dem til i prosjektet slik at det blir mer arbeid for Ä fÄ mer ut av dem.

Og det andre spÞrsmÄlet. Det er et problem pÄ GitHub. Jeg tror den allerede er stengt. Det er panikk under gjenoppretting. Og for Ä beseire det, laget du en egen forsamling. Det er rett i saker. Og det er et alternativ for Ä gjÞre et variabelt miljÞ i en trÄd. Og det er derfor det gÄr veldig sakte. Og vi stÞtt pÄ dette problemet, og det er ikke lÞst ennÄ.

Problemet er at lagringen (CEPH) av en eller annen grunn tilbakestiller forbindelsen nÄr vi kommer til den med hÞy samtidighet. Hva kan gjÞres med dette? ForsÞkslogikken pÄ nytt ser slik ut. Vi prÞver Ä laste ned filen pÄ nytt. I ett pass hadde vi en rekke filer som ikke ble lastet ned, vi vil lage en andre for alle de som ikke logget pÄ. Og sÄ lenge minst én fil er lastet per iterasjon, gjentar vi og gjentar og gjentar. Vi forbedret logikken for Ä prÞve pÄ nytt - eksponentiell backoff. Men det er ikke helt klart hva man skal gjÞre med det faktum at forbindelsen rett og slett bryter pÄ lagringssystemsiden. Det vil si at nÄr vi laster opp til én strÞm, bryter den ikke disse forbindelsene. Hva kan vi forbedre her? Vi har nettverksregulering, vi kan begrense hver tilkobling med antall byte den sender. Ellers vet jeg ikke hvordan jeg skal hÄndtere det faktum at objektlagring ikke tillater oss Ä laste ned eller laste ned fra det parallelt.

Ingen SLA? Er det ikke skrevet for dem hvordan de lar seg plage?

Poenget er at folk som kommer med dette spÞrsmÄlet vanligvis har sitt eget hvelv. Det vil si at ingen kommer fra Amazon eller Google Cloud eller Yandex Object Storage.

Kanskje spÞrsmÄlet ikke lenger er for deg?

SpÞrsmÄlet her i denne saken spiller ingen rolle for hvem. Hvis det er noen ideer om hvordan vi skal hÄndtere dette, la oss gjÞre det i WAL-G. Men sÄ langt har jeg ingen gode ideer om hvordan jeg skal hÄndtere dette. Det er noen objektlagring som stÞtter oppfÞring av sikkerhetskopier pÄ en annen mÄte. Du ber dem om Ä liste objekter, og de legger til mappe der. WAL-G blir redd av dette - det er en slags ting her som ikke er en fil, jeg kan ikke gjenopprette den, noe som betyr at sikkerhetskopien ikke ble gjenopprettet. Det vil si at du faktisk har en fullstendig gjenopprettet klynge, men den gir deg en feilstatus fordi Object Storage returnerte noe merkelig informasjon som den ikke helt forsto.

Dette er en ting som skjer i Mail-skyen.

Hvis du kan bygge en reproduser...

Det er konsekvent gjengitt...

Hvis det er en gjengivelse, sÄ tror jeg vi vil eksperimentere med strategier for Ä prÞve pÄ nytt og finne ut hvordan vi kan prÞve pÄ nytt og forstÄ hva skyen krever av oss. Kanskje det vil vÊre stabilt for oss pÄ tre forbindelser og vil ikke bryte forbindelsen, da nÄr vi forsiktig tre. For nÄ avbryter vi forbindelsen veldig raskt, det vil si at hvis vi startet en gjenoppretting med 16 trÄder, vil det etter fÞrste forsÞk pÄ nytt vÊre 8 trÄder, 4 trÄder, 2 trÄder og en. Og sÄ vil den trekke filen inn i én strÞm. Hvis det er noen magiske verdier som 7,5 trÄder er de beste for pumping, vil vi dvele ved dem og prÞve Ä lage ytterligere 7,5 trÄder. Her er en idé.

Takk for rapporten! Hvordan ser en komplett arbeidsflyt for arbeid med WAL-G ut? For eksempel i det dumme tilfellet nÄr det ikke er delta pÄ tvers av sider. Og vi tar og fjerner den fÞrste sikkerhetskopien, sÄ arkiverer vi skaftet til vi er blÄ i ansiktet. Her er det, slik jeg forstÄr det, et sammenbrudd. PÄ et tidspunkt mÄ du lage en delta backup av sider, det vil si at en ekstern prosess driver dette eller hvordan skjer dette?

Delta backup API er ganske enkelt. Det er et tall der – maks deltatrinn, det heter det. Den er som standard null. Dette betyr at hver gang du gjĂžr en backup-push, laster den ned en fullstendig sikkerhetskopi. Hvis du endrer det til et positivt tall, for eksempel 3, sĂ„ ser den pĂ„ historikken til tidligere sikkerhetskopier neste gang du gjĂžr en backup-push. Han ser at du ikke overskrider kjeden av 3 deltaer og lager et delta.

Det vil si at hver gang vi starter WAL-G, prĂžver den Ă„ lage en fullstendig sikkerhetskopi?

Nei, vi kjĂžrer WAL-G, og den prĂžver Ă„ lage et delta hvis retningslinjene tillater det.

Grovt sett, hvis du kjĂžrer den med null hver gang, vil den oppfĂžre seg som pg_basebackup?

Nei, den vil fortsatt kjĂžre raskere fordi den bruker kompresjon og parallellitet. Pg_basebackup vil legge skaftet ved siden av deg. WAL-G forutsetter at du har konfigurert arkivering. Og den vil gi en advarsel hvis den ikke er konfigurert.

Pg_basebackup kan kjĂžres uten aksler.

Ja, da vil de oppfÞre seg nesten likt. Pg_basebackup kopierer til filsystemet. Vi har forresten en ny funksjon som jeg glemte Ä nevne. Vi kan nÄ sikkerhetskopiere til filsystemet fra pg_basebackup. Jeg vet ikke hvorfor dette er nÞdvendig, men det er der.

For eksempel pÄ CephFS. Ikke alle Þnsker Ä konfigurere objektlagring.

Ja, det er sannsynligvis derfor de stilte et spÞrsmÄl om denne funksjonen slik at vi kunne gjÞre det. Og vi klarte det.

Takk for rapporten! Det er bare et spÞrsmÄl om kopiering til filsystemet. Ut av esken, stÞtter du nÄ kopiering til ekstern lagring, for eksempel hvis det er en hylle i datasenteret eller noe annet?

I denne formuleringen er dette et vanskelig spÞrsmÄl. Ja, vi stÞtter, men denne funksjonaliteten er ikke inkludert i noen utgivelser ennÄ. Det vil si at alle forhÄndsutgivelser stÞtter dette, men det gjÞr ikke utgivelsesversjonene. Denne funksjonaliteten ble lagt til i versjon 0.2. Det vil definitivt bli utgitt snart, sÄ snart vi fikser alle kjente feil. Men akkurat nÄ kan dette bare gjÞres i pre-release. Det er to feil i forhÄndsutgivelsen. Problem med WAL-E-gjenoppretting, vi har ikke fikset det. Og i den siste forhÄndsutgivelsen ble det lagt til en feil om delta-backup. Derfor anbefaler vi alle Ä bruke utgivelsesversjonene. SÄ snart det ikke er flere feil i forhÄndsutgivelsen, kan vi si at vi stÞtter Google Cloud, S3-kompatible ting og fillagring.

Hei, takk for rapporten. Slik jeg forstÄr det, er ikke WAL-G et slags sentralisert system som barmen? Har du planer om Ä bevege deg i denne retningen?

Problemet er at vi har beveget oss bort fra denne retningen. WAL-G lever pÄ baseverten, pÄ klyngeverten og pÄ alle verter i klyngen. Da vi flyttet til flere tusen klynger hadde vi mange bartenderinstallasjoner. Og hver gang noe faller fra hverandre i dem, er det et stort problem. Fordi de mÄ repareres, mÄ du forstÄ hvilke klynger som nÄ ikke har sikkerhetskopier. Jeg har ikke tenkt Ä utvikle WAL-G i retning av fysisk maskinvare for backup-systemer. Hvis fellesskapet vil ha litt funksjonalitet her, har jeg ikke noe imot det i det hele tatt.

Vi har team som har ansvar for oppbevaring. Og vi har det sÄ bra at det ikke er oss, at det er spesielle personer som legger filene vÄre der filene er trygge. De gjÞr all slags smart koding der for Ä motstÄ tap av et visst antall filer. De er ansvarlige for nettverksbÄndbredden. NÄr du har en bartender, kan du plutselig finne ut at det har samlet seg smÄ databaser med mye trafikk pÄ samme server. Du ser ut til Ä ha mye plass pÄ den, men av en eller annen grunn passer ikke alt gjennom nettverket. Det kan vise seg omvendt. Det er mange nettverk der, det er prosessorkjerner, men det er ingen disker her. Og vi ble lei av dette behovet for Ä sjonglere noe, og vi gikk over til at datalagring er en egen tjeneste, som egne spesialpersoner er ansvarlige for.

PS En ny versjon har blitt utgitt 0.2.15, der du kan bruke .walg.json-konfigurasjonsfilen, som ligger i postgres-hjemmekatalogen som standard. Du kan forlate bash-skript. Eksempel .walg.json er i denne utgaven https://github.com/wal-g/wal-g/issues/545

Video:

Spill av video


Kilde: www.habr.com