+− 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: GitLabov inženjer, boreći se s pokvarenom replikom na kraju duge noći, uklanja PostgreSQL podatkovni direktorij na db1 umjesto na db2. db1 je primarni. Oko 300 GB baze podataka GitLab.com nestaje za sekundu ili dvije, a od pet mehanizama za sigurnosno kopiranje i replikaciju, nijedan ne radi. Postmortem: vremenska linija od skoka spama do pogrešnog imena hosta, zašto se pg_basebackup činio zaglavljenim, zašto pg_dump nije uspio tiho (binarne datoteke 9.2 na bazi podataka 9.6, e-pošta o pogreškama odbijena od strane DMARC-a), 18-satna obnova iz 6-satne snimke staginga emitirana uživo na YouTubeu, i tko je zapravo kriv. Presuda o odgovoru: SHIP IT.

Pročitajte pisano izdanje (engleski) ↗

Što ovaj video pokriva

  • 31. siječnja 2017.: rm -Rvf na podatkovnom direktoriju primarnog poslužitelja; 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 ispravaka

Prevedeni transkript

Prevedeno iz izvornog engleskog pripovijedanja. Dostupni zvuk i titlovi kontroliraju se putem YouTubea.

0:00 Inženjer u GitLabu pokreće rm -rf na pogrešnom poslužitelju baze podataka, i tristo gigabajta GitLab.coma nestaje za sekundu ili dvije, otprilike koliko treba da se pročita ime hosta. 31. siječnja 2017., 23:27 UTC. GitLab tvita da je slučajno izbrisao produkcijske podatke, otvara bilješke o incidentu internetu i prenosi oporavak na YouTubeu, drugom live streamu 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 zapravo snosi krivnju. Ovo je The Daily Diff, postmortem. 17:20: inženjer snima produkciju za testiranje balansera opterećenja u stagingu. 19:00: spam udara bazu podataka, plus posao koji trajno briše zaposlenika GitLaba kojeg je trol prijavio za zlouporabu. 23:00: replika zaostaje toliko da je primarni već odbacio

0:48 log koji joj je potreban; jedino rješenje je obrisati repliku i ponovno kopirati primarnu ponovno. pg_basebackup se zaustavlja bez izlaza. Zapravo tiho čeka primarni poslužitelj; nitko to ne zna, a runbook to ne govori. Inženjer, koji se trebao odjaviti u jedanaest, odlučuje da je prazan podatkovni direktorij problem i uklanja ga. Na db1. Primarnom. Primjećuje sekundu ili dvije kasnije; od otprilike tristo gigabajta,

1:11 ostalo je 4,5. Sigurnosne kopije. Jedna: pg_dump na S3, dnevno. Bucket je prazan. Cron job radi na aplikacijskom poslužitelju bez baze podataka, pa paket bira 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. Dvije: Azure disk snimke, omogućene za datotečne poslužitelje, ne baze podataka.

1:32 Tri: replika, namjerno obrisana prije sat vremena. Četiri: dnevna snimka, stara 24 sata, svaki webhook uklonjen sinkronizacijom staginga. Pet: ručna snimka od 17:20, za nepovezan test. Ta pobjeđuje. Obnova 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, sa šest sati starijim podacima.

1:58 git blame: dva imena hosta s jednim znakom razlike i pet sustava za sigurnosno kopiranje iz kojih nitko nikada nije obnovio. Ne inženjer. Postmortem, potpisan od strane CEO-a, čuva njegovu anonimnost, boji produkcijski upit crvenom bojom i dodjeljuje vlasnika trajnosti podataka, jer ga do sada nije imalo. Radijus eksplozije: osamnaest sati prekida rada, šest sati izgubljenih podataka, 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: od pet sigurnosnih kopija, nijedna. Presuda, postmortem: SHIP IT, na odgovor. Incident provode javno, krive proces i objavljuju popis ispravaka s brojevima problema. Ponedjeljna radnja: obnova sigurnosne kopije. Ako je nikada niste obnovili, nemate je.

2:42 Pošaljite mi incident o kojem još uvijek ne smijete pričati, u komentarima, ili na the 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