Inženjer je obrisao GitLab-ovu produkcionu bazu podataka. 300 gigabajta.
31.
31. januar 2017, 23:27 UTC: GitLab inženjer, boreći se sa pokvarenom replikom na kraju duge noći, uklanja PostgreSQL direktorijum podataka na db1 umesto na db2. db1 je primarni. Oko 300 GB baze podataka GitLab.com-a nestaje za sekundu ili dve, a od pet mehanizama za rezervno kopiranje i replikaciju, nijedan ne radi. Postmortem: vremenska linija od skoka spama do pogrešnog imena hosta, zašto je pg_basebackup izgledao zaglavljeno, zašto pg_dump nije radio tiho (9.2 binarni fajlovi na 9.6 bazi podataka, neuspeli e-mailovi odbijeni od strane DMARC-a), 18-časovni povratak iz 6-časovnog snimka sa staging-a, strimovan uživo na YouTube-u, i ko je zaista kriv. Presuda o odgovoru: SHIP IT.
Pročitajte pisano izdanje (engleski) ↗
Šta ovaj video pokriva
- 31. jan 2017: rm -Rvf na direktorijumu podataka primarnog servera; ~300 GB uklonjeno, 4.5 GB ostalo
- 5 od 5 rezervnih kopija ne uspelo: prazan S3 bucket (neslaganje verzija pg_dump-a), nema Azure snimaka na bazi podataka, obrisana replika, dnevna LVM kopija bez webhooks-a
- 1. feb, 18:00 UTC: GitLab.com ponovo radi sa 6-časovnog starog ručnog snimka; dokument uživo, strim uživo, postmortem bez krivca sa listom popravki
Preveden transkript
Prevedeno sa originalne engleske naracije. Dostupan audio i titlovi kontrolisani su od strane YouTube-a.
0:00 Inženjer u GitLabu pokreće rm -rf na pogrešnom serveru baze podataka, i tri stotine gigabajta GitLab dot com nestaje za sekundu ili dve, otprilike koliko je potrebno da se pročita ime hosta. 31. januar 2017, 23:27 UTC. GitLab tvituje da je slučajno obrisao produkcione podatke, otvara svoje beleške o incidentu internetu i strimuje oporavak na YouTube-u, drugi najgledaniji prenos uživo na platformi. Sledećeg dana, u pisanoj formi: od pet tehnika rezervnog kopiranja,
0:25 nijedna ne radi pouzdano. Kako se to dešava, zašto je to moguće i ko je zapravo kriv. Ovo je The Daily Diff, postmortem. 17:20: inženjer pravi snimak produkcije za testiranje balansa opterećenja u stagingu. 19:00: spam udara u bazu podataka, plus posao koji trajno briše zaposlenog GitLaba, jer ga je trolova prijavio za zloupotrebu. 23:00: replika toliko zaostaje da je primarni server već odbacio
0:48 dnevnik koji mu je potreban; jedina popravka je brisanje replike i ponovno kopiranje primarnog servera ponovo. pg_basebackup se zaglavljuje bez izlaza. Zapravo čeka, tiho, primarni; niko to ne zna, a runbook to ne kaže. Inženjer, koji je trebalo da se odjavi u jedanaest, odlučuje da je prazan direktorijum podataka problem i uklanja ga. Na db1. Primarni. Primećuje sekund ili dve kasnije; od otprilike trista gigabajta,
1:11 4.5 ostaje. Rezervne kopije. Jedna: pg_dump na S3, dnevno. Kanta je prazna. Cron job se pokreće na app serveru bez baze podataka, tako da paket bira PostgreSQL 9.2 binarne datoteke za 9.6 bazu podataka, ne uspeva i šalje e-poštu o neuspehu, koja se odbija zbog nedostajućeg DMARC-a. Dva: Azure disk snimci, omogućeni za fajl servere, ne baze podataka.
1:32 Tri: replika, namerno obrisana pre sat vremena. Četiri: dnevni snimak, star 24 sata, svaki webhook uklonjen sinhronizacijom staging-a. Pet: ručni snimak od 17:20, za nepovezan test. Taj pobeđuje. Vraćanje znači kopiranje staging diska nazad u produkciju preko Azure-ovog jeftinog skladišta brzinom od šezdeset megabita u sekundi: osamnaest sati. GitLab dot com ponovo radi 1. februara u 18 časova. UTC, šest sati starijih podataka.
1:58 git blame: dva imena hosta udaljena jedan karakter, i pet sistema za rezervno kopiranje sa kojih niko nikada nije vršio oporavak. Ne inženjer. Postmortem, potpisan od strane CEO-a, čuva njegovu anonimnost, boji produkcioni prompt crveno i daje vlasnika trajnosti podataka, jer do sada ga nije imala. Radijus eksplozije: osamnaest sati nefunkcionalnosti, šest sati podataka nestalo, otprilike pet hiljada projekata, pet hiljada komentara,
2:18 sedam stotina novih korisnika i pet hiljada ljudi koji gledaju traku napretka. Hacker News daje live dokumentu 1.162 poena i citira jednu rečenicu nazad njima: od pet rezervnih kopija, nijedna. Presuda, postmortem: SHIP IT, na odgovor. Oni vode incident javno, krive proces i objavljuju listu popravki sa brojevima problema. Ponedeljak akcija: vratite rezervnu kopiju. Ako je nikada niste vratili, nemate je.
2:42 Pošaljite mi incident o kojem još uvek ne smete da pričate, u komentarima, ili na thedailydiff.dev. I to je razlika za danas. Ja sam Niko iz Axrisi. 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



