+− THE DAILY DIFFdev & AI news
SHIP IT

Inženjer je izbrisao produkcijsku bazu podataka GitLaba. 300 gigabajta.

31.

31. siječnja 2017., 23:27 UTC: inženjer GitLaba, boreći se s pokvarenom replikom na kraju duge noći, uklanja direktorij podataka PostgreSQL-a na db1 umjesto db2. db1 je primarni. Oko 300 GB baze podataka GitLab.com nestaje u sekundi ili dvije, a od pet mehanizama za sigurnosno kopiranje i replikaciju, nijedan ne radi. Postmortem: vremenska crta od porasta neželjene pošte do pogrešnog imena hosta, zašto se pg_basebackup činio zaglavljenim, zašto pg_dump nije radio tiho (9.2 binarne datoteke na 9.6 bazi podataka, e-poruke o pogrešci odbijene od strane DMARC-a), 18-satni oporavak iz 6-satne snimke za testiranje uživo na YouTubeu i tko je zapravo kriv. Presuda o odgovoru: SHIP IT.

Pročitajte pisano izdanje (engleski) ↗

Šta ovaj video pokriva

  • 31. siječnja 2017.: rm -Rvf na direktoriju podataka primarnog servera; uklonjeno ~300 GB, ostalo 4.5 GB
  • 5 od 5 sigurnosnih kopija ne uspijeva: prazan S3 bucket (nepodudarnost verzije pg_dump), nema Azure snimki na DB-u, obrisana replika, dnevna LVM kopija bez web-hookova
  • 1. veljače, 18:00 UTC: GitLab.com se vratio iz 6-satne ručne snimke; dokument uživo, prijenos uživo, postmortem bez krivnje s popisom popravaka

Prevedeni transkript

Prevedeno iz originalne engleske naracije. Dostupan zvuk i titlovi kontroliše YouTube.

0:00 Inženjer u GitLabu pokreće rm -rf na pogrešnom serveru baze podataka, i tri stotine gigabajta GitLab.com nestaju u sekundi ili dvije, otprilike koliko je potrebno za čitanje imena hosta. 31. siječnja 2017., 23:27 UTC. GitLab tvita da je slučajno izbrisao produkcijske podatke, otvara svoje bilješke o incidentu internetu i prenosi oporavak na YouTubeu, drugi po gledanosti prijenos uživo na platformi. Sljedeći dan, pismeno: od pet tehnika sigurnosnog kopiranja,

0:25 nijedna ne radi pouzdano. Kako se to događa, zašto je to moguće i tko je zapravo kriv. Ovo je The Daily Diff, postmortem. 17:20: inženjer snima produkciju za testiranje balansa opterećenja u stagingu. 19:00: neželjena pošta napada bazu podataka, plus posao koji trajno briše zaposlenika GitLaba kojeg je troper prijavio za zlostavljanje. 23:00: replika toliko zaostaje da je primarni server već odbacio

0:48 log koji mu treba; jedini popravak je obrisati repliku i ponovno kopirati primarni server. pg_basebackup se zaglavljuje bez izlaza. Zapravo tiho čeka primarni server; nitko to ne zna, a runbook to ne navodi. Inženjer, koji se namjeravao odjaviti u jedanaest, odlučuje da je prazan direktorij podataka problem i uklanja ga. Na db1. Primarnom. Primjećuje sekundu ili dvije kasnije; od otprilike tri stotine gigabajta,

1:11 ostalo je 4.5. Sigurnosne kopije. Jedna: pg_dump na S3, dnevno. Bucket je prazan. Cron posao se pokreće na aplikacijskom serveru bez baze podataka, pa paket odabire PostgreSQL 9.2 binarne datoteke za bazu podataka 9.6, ne uspijeva i šalje e-poštu o neuspjehu, koja se odbija zbog nedostatka DMARC-a. Dva: Azure snimke diska, omogućene za datotečne servere, ne za baze podataka.

1:32 Tri: replika, namjerno obrisana prije sat vremena. Četiri: dnevna snimka, stara 24 sata, svaki webhook uklonjen sinkronizacijom za staging. Pet: ručna snimka od 17:20, za nepovezani test. Ta pobjeđuje. Vraćanje znači kopiranje staging diska natrag u produkciju preko Azureovog jeftinog skladišta pri šezdeset megabita u sekundi: osamnaest sati. GitLab.com se vraća 1. veljače u 18:00 UTC, šest sati starijih podataka.

1:58 git blame: dva imena hosta udaljena jedan znak i pet sustava za sigurnosno kopiranje s kojih nitko nikada nije obnovio podatke. Nije inženjer. Postmortem, potpisan od strane CEO-a, drži ga anonimnim, boja produkcijski prompt u crveno i daje trajnosti podataka vlasnika, jer do sada nije imala nikoga. Radijus eksplozije: osamnaest sati neaktivnosti, šest sati podataka izgubljeno, otprilike pet tisuća projekata, pet tisuća komentara,

2:18 sedam stotina novih korisnika i pet tisuća ljudi koji gledaju traku napretka. Hacker News daje live dokumentu 1.162 boda i citira jedan redak natrag njima: od pet sigurnosnih kopija, nijedna. Presuda, postmortem: SHIP IT, na odgovor. Oni vode incident javno, krive proces i objavljuju popis popravaka s brojevima problema. Akcija za ponedjeljak: vratite sigurnosnu kopiju. Ako je nikada niste vratili, nemate je.

2:42 Pošaljite mi incident o kojem još uvijek ne smijete pričati, u komentarima ili na daily diff dot dev. I to je diff za danas. Ja sam Niko iz Axrisija. Spajajte odgovorno.

Izvori

  1. GitLab, "Postmortem of database outage of January 31" (Feb 10, 2017)about.gitlab.com
  2. GitLab, "GitLab.com database incident" (Feb 1, 2017)about.gitlab.com
  3. @gitlabstatus, "We accidentally deleted production data…"twitter.com
  4. @gitlabstatus, emergency maintenance noticetwitter.com
  5. Hacker News, "GitLab Database Incident – Live Report" (1,162 points, 598 comments)news.ycombinator.com
  6. Hacker News, the postmortem thread (377 points)news.ycombinator.com

Povezani videozapisi