写点什么

调查报告深入揭示了 GitLab.com 服务中断 18 小时的根本原因

  • 2017-02-28
  • 本文字数:1116 字

    阅读完需:约 4 分钟

在结束故障并清除了问题后,GitLab 给出一个帖子,总结了导致长达 18 小时服务中断的原因、他们计划如何继续发展,以及整个事故是如何发生的。

数据库的高负载在一开始被诊断为大量垃圾邮件的涌入。但是在进一步审查后,明确了是由于无事生非的家伙将一位 GitLab 员工举报为滥用,事故因此而恶化了。另一位员工在审查滥用报告时并没有意识到被举报的账号其实是团队中一位工程师的账号,因此意外地删除了该账号:

我们随后发现这一部分负载是由一个后台任务试图去移除 GitLab 员工及其相关数据所导致的。这就是他们的账号被标识为滥用并意外地被删除的结果。

根据作为当事人的工程师在故障报告中的记录,他的账号被删除是因为“我们收到来自一位用户的垃圾邮件报告,该用户是在发出垃圾邮件报告的10 分钟前创建的。这就产生了人为错误,删除了我的所有项目。”

由于数据库负载的加重,预写式日志 (WAL,Write-Ahead Log) 在得到从数据库处理之前就被主数据库清洗掉了,导致主数据库停止向从数据库复制。不幸的是,WAL 归档也并未被打开。WAL 归档会要求数据段在得到移除许可前被归档。

由于复制已经停止了,需要对从数据库做一次重建。启动复制需要一个空的数据目录,因此一位工程师手工清理干净了一个目录。但该目录并非是从数据库的数据目录,他意外地清除了主数据库的数据目录。

虽然主数据库的不幸损失应该只会让站点关闭一小段时间,但是对于GitLab 团队而言事情更糟。在努力恢复数据的过程中,团队发现自己的备份无法工作。作为备份的主要方法的 pg_dump 由于版本不匹配的问题而不能运行,因此并未备份任何东西。没有人知道存在这个失败,通知邮件因为不支持 DMARC 被服务器拒收。

其它的备份方法也因为各种原因而无法使用,团队并未对数据库使用 Azure 磁盘快照。即使使用了磁盘快照,在线取回数据也将花费很长的时间:

每个存储账号的限制大概为 30TB。恢复快照时使用同一存储账号中的主机通常会完成得很快。但是当用在不同存储账号中的主机时,完成该过程将需要数小时乃至数天。

唯一的方法是恢复事故发生之前六个小时的 LVM 快照。

团队在改进他们的修复恢复过程中碰上了 14 个问题,最终完成了快照的恢复。他们在事故发生后两个星期中实现了 WAL-E ,功能是将 WAL 数据段实时地归档到 AWS S3。对一次恢复的测试表明,这种备份类型在两个小时以内就可以恢复到指定的时间点。此外,他们正在实现一个自动测试PostgreSQL 备份恢复的系统。

查看英文原文: GitLab.com Postmortem Digs into Root Causes of 18 Hour Outage


感谢薛命灯对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们。

2017-02-28 18:003366
用户头像

发布了 227 篇内容, 共 86.7 次阅读, 收获喜欢 28 次。

关注

评论

发布
暂无评论
发现更多内容

Spring Boot Devtools Restarter 原理

sN0wpeak

Java spring

计算社会科学 - DAY 17

Qien Z.

5月日更

微服务注册中心:Consul——服务注册

程序员架构进阶

微服务 Consul API网关 28天写作 5月日更

探秘区块链技术在计算机取证过程中的机制与应用

CECBC

Django 之 Models(Models 模型 & 数据表关系)

若尘

django model Python编程 5月日更

一个月吃透这份阿里高级专家的《Java500道面试手册》成功拿下了腾讯offer!

Java架构之路

Java 程序员 架构 面试 编程语言

关于echarts使用geo制作地图tooltip不显示问题

孤独的西北疯

5分钟速读之Rust权威指南(十一)

wzx

rust

V8数据存储(上篇):栈和堆

梁龙先森

大前端 浏览器

GitHub连夜封杀!这份阿里 10W 字内部 Java 字面试手册到底有多强?

Java 程序员 架构 面试

外包CRUD3年,被导师一句话点醒,直接涨薪9K(Java岗)

Java架构师迁哥

高德地图只显示一个省的地图

孤独的西北疯

五一假期旅游完突然收到(余额宝)面试,四面成功拿下offer

Java架构师迁哥

week5作业

Geek_2e7dd7

架构实战营

备战 60 天,成功上岸滴滴后,我特地把金三银四备战资源库整理出来了

Java 程序员 架构 面试

区块链如何赋能企业数字化转型?

CECBC

智慧党建平台搭建,党建干部管理系统,智慧组工平台解决方案

为什么不推荐C++?

实力程序员

英特尔院士斯旺:由外而内重塑芯片设计

E科讯

C++ 协程的近况、设计与实现中的细节和决策

Linux服务器开发

c++ 线程 后端 协程 Linux服务器开发

发布引发的curator报错:instance must be started before calling this method

林一

dubbo zk 优雅停机

CompletableFuture 简单与链式的区别?

李尚智

中国数字人民币官方宣传片来袭!DCEP:开启“无现金新时代”!

CECBC

人生算法:做好自己这家公司的CEO

石云升

读书笔记 思维模型 5月日更

一场“测谎”人机对战背后的故事:度小满的技术进击之路

脑极体

密码学系列之:SAFER

程序那些事

密码学 程序那些事 SAFER

阿里人是如何设计系统抵挡亿级流量冲击的?(全彩版小册开源)

Java架构师迁哥

Dubbo 服务治理简介

青年IT男

dubbo

面向WEB开发人员的Docker(六):使用nginx部署静态网站

devpoint

Docker

代码精进之路学习笔记

escray

学习 极客时间 5月日更

【Flutter 专题】118 图解特殊利器 ShaderMask 着色器

阿策小和尚

5月日更 Flutter 小菜 0 基础学习 Flutter Android 小菜鸟

调查报告深入揭示了GitLab.com服务中断18小时的根本原因_微软_David Iffland_InfoQ精选文章