Inžinier vymazal produkčnú databázu GitLabu. 300 gigabajtov.
31.
31. januára 2017, 23:27 UTC: inžinier GitLabu, bojujúci s nefunkčnou replikou na konci dlhej noci, odstráni dátový adresár PostgreSQL na db1 namiesto db2. db1 je primárny. Približne 300 GB databázy GitLab.com zmizne za sekundu alebo dve a z piatich zálohovacích a replikačných mechanizmov nefunguje žiadny. Postmortem: časová os od špičky spamu po nesprávny názov hostiteľa, prečo sa pg_basebackup zdalo zaseknuté, prečo pg_dump ticho zlyhávalo (binárne súbory 9.2 na databáze 9.6, e-maily o zlyhaní odrazené DMARC), 18-hodinová obnova zo 6-hodinového staging snapshotu streamovaného naživo na YouTube a kto skutočne nesie vinu. Verdikt o reakcii: SHIP IT.
Prečítajte si písanú edíciu (anglicky) ↗
Čo toto video pokrýva
- 31. januára 2017: rm -Rvf v dátovom adresári primárneho servera; ~300 GB odstránených, 4.5 GB zostalo
- 5 z 5 záloh zlyhá: prázdny S3 bucket (nesúlad verzií pg_dump), žiadne Azure snapshots na DB, vymazaná replika, denná LVM kópia bez webhookov
- 1. februára, 18:00 UTC: GitLab.com späť zo 6-hodinového manuálneho snapshotu; živý dokument, živý stream, postmortem bez viny so zoznamom opráv
Preložený prepis
Preložené z pôvodného anglického rozprávania. Dostupný zvuk a titulky sú kontrolované službou YouTube.
0:00 Inžinier v GitLabe spustí rm -rf na nesprávnom databázovom serveri, a tristo gigabajtov GitLab dot com zmizne za sekundu alebo dve, čo je približne čas potrebný na prečítanie názvu hostiteľa. 31. januára 2017, 23:27 UTC. GitLab tweetuje, že omylom vymazal produkčné dáta, sprístupní svoje poznámky o incidente internetu a streamuje obnovu na YouTube, druhý najsledovanejší živý prenos na platforme. Na druhý deň, písomne: z piatich zálohovacích techník,
0:25 žiadna nefunguje spoľahlivo. Ako sa to stalo, prečo je to možné a kto vlastne nesie vinu. Toto je The Daily Diff, postmortem. 17:20: inžinier vytvorí snapshot produkcie na otestovanie load balancera v stagingu. 19:00: spam zasiahne databázu, plus úloha natvrdo vymaže zamestnanca GitLabu, ktorého nahlásil troll za zneužívanie. 23:00: replika sa natoľko oneskorí, že primárny server už zahodil
0:48 potrebný log; jedinou opravou je vymazať repliku a znova skopírovať primárny server. pg_basebackup sa zasekne bez výstupu. V skutočnosti ticho čaká na primárny server; nikto to nevie, a v prevádzkovom manuáli sa to neuvádza. Inžinier, ktorý sa mal odhlásiť o jedenástej, rozhodne, že prázdny dátový adresár je problém a odstráni ho. Na db1. Primárnom serveri. Všimne si to o sekundu alebo dve neskôr; z približne trochsto gigabajtov,
1:11 zostane 4.5. Zálohy. Jedna: pg_dump na S3, denne. Bucket je prázdny. Cron job beží na aplikačnom serveri bez databázy, takže balík vyberie binárne súbory PostgreSQL 9.2 pre databázu 9.6, zlyhá a odošle e-mail o zlyhaní, ktorý sa odrazí kvôli chýbajúcemu DMARC. Dve: Azure disk snapshots, povolené pre súborové servery, nie pre databázy.
1:32 Tri: replika, zámerne vymazaná pred hodinou. Štyri: denný snapshot, starý 24 hodín, všetky webhooky odstránené synchronizáciou stagingu. Päť: manuálny snapshot z 17:20, pre nesúvisiaci test. Ten vyhráva. Obnova znamená skopírovanie staging disku späť do produkcie cez lacné úložisko Azure rýchlosťou šesťdesiat megabitov za sekundu: osemnásť hodín. GitLab dot com je späť 1. februára o osemnástej hodine UTC, o šesť hodín dát starší.
1:58 git blame: dva názvy hostiteľov vzdialené o jeden znak a päť zálohovacích systémov, z ktorých nikto nikdy neobnovoval. Nie inžinier. Postmortem, podpísané generálnym riaditeľom, ho udržiava v anonymite, sfarbí produkčný prompt na červeno a pridelí vlastníka trvanlivosti dát, pretože doteraz žiadneho nemala. Dosah výbuchu: osemnásť hodín výpadku, šesť hodín dát preč, približne päťtisíc projektov, päťtisíc komentárov,
2:18 sedemsto nových používateľov a päťtisíc ľudí sledujúcich ukazovateľ priebehu. Hacker News dáva živému dokumentu 1 162 bodov a cituje im jednu vetu: z piatich záloh žiadna. Verdikt, postmortem: SHIP IT, na reakcii. Incident riešia verejne, obviňujú proces a zverejňujú zoznam opráv s číslami problémov. Pondelok, akcia: obnoviť zálohu. Ak ste ju nikdy neobnovili, nemáte ju.
2:42 Pošlite mi incident, o ktorom stále nesmiete hovoriť, do komentárov, alebo na the daily diff dot dev. A to je dnešný diff. Som Niko z Axrisi. Zlučujte zodpovedne.
Zdroje
- 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



