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
- GitLab, "Postmortem of database outage of January 31" (Feb 10, 2017)about.gitlab.com
- GitLab, "GitLab.com database incident" (Feb 1, 2017)about.gitlab.com
- @gitlabstatus, "We accidentally deleted production data…"twitter.com
- @gitlabstatus, emergency maintenance noticetwitter.com
- Hacker News, "GitLab Database Incident – Live Report" (1,162 points, 598 comments)news.ycombinator.com
- Hacker News, the postmortem thread (377 points)news.ycombinator.com



