写点什么

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

2017 年 2 月 28 日

在结束故障并清除了问题后,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 年 2 月 28 日 18:002276
用户头像

发布了 226 篇内容, 共 60.6 次阅读, 收获喜欢 17 次。

关注

评论

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

低/零代码平台的优点有哪些?

代码制造者

编程语言 低代码 零代码 信息化 编程开发

linux入门系列5--新手必会的linux命令

黑马腾云

Linux centos7 Shell linux命令 linux操作

Windows AD巡检报错处理

BigYoung

windows AD 报错 巡检

物流与区块链加供应链的现状与未来趋势

CECBC区块链专委会

行业资讯 区块链技术 供应链

「分布式一致性协议」从2PC、3PC、Paxos到 ZAB

海星

Linux入门系列1--环境准备及Linux安装

黑马腾云

Linux centos 运维 操作系统

彻底解决雪花算法时间回拨问题新方案

柿子

算法 雪花算法

linux入门系列2--CentOs图形界面操作及目录结构

黑马腾云

Linux centos7 操作系统 系统运维

话题讨论 | 特斯拉和拼多多杠上了,你有什么看法?

InfoQ写作平台官方

写作平台 话题讨论

《漫威复联》PC版游戏即将登陆,英特尔为其独家 CPU 合作伙伴

最新动态

不懂 ZooKeeper?没关系,这一篇给你讲的明明白白

海星

Java zookeeper 分布式

Django2.x中url路由的path()与re_path()参数解释

BigYoung

django path url re_path 参数

随着区块链技术的成熟,全球企业开始拥抱公共区块链

CECBC区块链专委会

区块链技术 公共区块链

linux入门系列4--vi/vim编辑器

黑马腾云

vim Linux centos7 操作系统 VI

吐血整理Windows电脑入侵自检大全

BigYoung

黑客 windows 日志 异常 自检

RPC原理

石刻掌纹

定义“开发者关系”

开发者关系

开发者关系 开发者运营 技术运营 开源社区

Kotlin这么火!如何快速从Java过渡到Kotlin

华章IT

Java kotlin 协程 安卓

Nginx配置80端口用于多个域名

石云升

nginx 域名配置 80端口共用

linux入门系列3--常见的linux远程登陆管理工具

黑马腾云

Linux xshell securecrt putty finallshell

CentOS 7 配置Supervisor 服务遇到的坑总结

BigYoung

centos 报错 Supervisor

Django 表单处理流程详解

BigYoung

django 表单 流程

Mac JetBrains(IDE)常用快捷键

王坤祥

JetBrains 快捷键

lgloo Software 的 Jira Cloud 转型之旅

Atlassian

项目管理 DevOps 敏捷开发 Jira Cloud

十年磨一剑-BIGO全球音视频技术解决方案

InfoQ_3597a20b53cc

人工智能 大数据 技术

CIC国信公链:做坚实的底层技术支撑,让区块链为现代农业插上腾飞的翅膀

CNG农业公链

区块链 农业发展 CIC国信公链 CNG农业链 赵其刚

9个典型的开发者关系面试题

开发者关系

开发者关系 开发者运营 技术运营 开源社区

艺术与科技的碰撞!Tristan Easton携手英特尔为漫威粉丝带来十代酷睿《复联》收藏版

最新动态

LeetCode题解:88. 合并两个有序数组,双指针+从后往前,JavaScript,详细注释

Lee Chen

LeetCode 前端进阶训练营

跟我一起基于Karma搭建一个测试环境(上)

Jack Q

前端进阶训练营 Karma 测试框架搭建

Linux之crontab命令

王坤祥

Linux crontab

海量并发场景下的缓存架构设计

海量并发场景下的缓存架构设计

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