在 2025 收官前,看清 Data + AI 的真实走向,点击查看 BUILD 大会精华版 了解详情
写点什么

疲劳、垃圾邮件、备份缺失,拖垮了 GitLab.com

  • 2017-02-09
  • 本文字数:1529 字

    阅读完需:约 5 分钟

生产环境数据丢失、数小时的宕机,这是 GitLab 给我们带来的不幸而扣人心弦的故事,这个故事告诉我们小事可以变成灾难,比如垃圾邮件、工程师疲劳状态。

整个事件是从 1 月 31 日逐渐开始的,直到一条推特的发布彻底确认了 GitLab.com 有些不对劲了:

我们不小心删除了生产环境数据,可能需要从备份恢复数据。谷歌 Doc 会有行动注解 https://t.co/EVRbHzYlk8
–GitLab.com 状态(@gitlabstatus) 2017 年 2 月 1 日

任务 IT 从业人员都不愿意听到“删除了生产环境数据”这样的话,但是这种情况又容易发生,这就是为什么备份对于任何生产环境服务来说如此重要了。不幸的是,当团队彻夜奋战尝试恢复服务时,坏消息接踵而来。

在一个帖子里面罗列了发生的事情,麻烦开始于恶意的垃圾邮件攻击,即“通过反复的创建片段方式攻击数据库,导致数据库不稳定”,导致了备份服务出现问题。3 小时之后,数据库什么都干不了了,导致 GitLab.com 站点奔溃。

一位工程师工作到深夜,他的目标是解决问题,但是最终跪倒在一个不幸的错误面前,他犯了一个错误,错误地删除了主节点机器上的数据:

2017 年 1 月 31 日晚上 11 点钟(UTC 时间),项目组成员 1 认为 pg_basebackup 不能正常工作的原因可能是由于 PostgreSQL 数据目录已经存在(即便它是空的),所以他决定去移除这个目录。很快他就意识到他的移除命令运行在 db1.cluster.gitlab.com,而不是 db2.cluster.gitlab.com。

2017 年 1 月 31 日晚上 11 点 27 分(UTC 时间),这位员工终止了移除文件夹操作,但是已经太迟了。300GB 的文件仅剩下 4.5GB。

当团队尝试去找到可用的备份文件用于恢复生产环境时,他们发现所有的可选方式都行不通。

  • LVM(逻辑卷管理)快照默认每 24 小时运行一次
  • 标准备份方式也是 24 小时运行一次,而且还没有正常工作
  • 运行在 Azure 上的磁盘快照服务不会包含数据库部分
  • AWS 的 S3 上面的备份是空的

碰巧,工程师在执行删除操作之前的 6 个小时生成了一个 LVM 快照。如果没有这个神奇的操作,我们会发现更多的数据永远找不回来了。

纵观整个事件过程,GitLab 团队保持了完全的透明化,实时发布更新内容到谷歌 Doc,这样整个社区都可以紧跟事件。此外,他们也开放了现场视频,直播工程师恢复数据的工作过程。

大约在数据库宕机 18 个小时之后,GitLab.com 恢复在线:

https://t.co/r11UmmDLDE 应该已经对外正式恢复了。
–GitLab.com 状态(@gitlabstatus) 2017 年 2 月 1 日

社区存在多种评价,包括对团队的支持和批判。一些人发帖给予慰问,并且赞扬 GitLab 的透明度。黑客新闻用户 js2 评价这种错误的感受他很熟悉:“如果你干系统管理员工作时间足够长的话,这种错误你也会犯的,你会在错误的机器上执行破坏性的命令。”另外有一些人就不那么仁慈了

即便GitLab 犯错了,他们的痛苦经历也是对社区内部关于测试备份方案重要性的一个提醒, Stack Overflow 的工程经理 David Haney 说

GitLab 处理方式是正确的,可以作为企业的一个很好的案例和学习经验,而不是让别人感觉到神秘的宕机,以及完全没有对外沟通的处理方式。我打赌,这周会进行很多的灾备措施测试,而且这是大家以往并没有想的。所有这一切都是因为 GitLab 的意外事件带来了的连锁反应。

也有一些人调侃说 2 月 1 日应该设立为备份检查日

GitLab 创立于 2011 年,它是 GitHub 的开源替代版本。它是一个在 GitLab.com 上的托管版本,包含自服务的社区版本和企业版本。只有 GitLab.com 的托管服务收到本次意外事件的影响。

参考英文原文 Fatigue, Spam, and Lack of Backups Take Down GitLab.com


感谢木环对本文的审校。

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

2017-02-09 18:003212

评论

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

docker安装WordPress(一)

蜗牛也是牛

简单时序逻辑电路

芯动大师

Verilog 11月月更 锁存器

[力扣] 剑指 Offer 第三天 - 左旋转字符串

陈明勇

Go 数据结构与算法 力扣 11月月更

2022-11-17:组合两个表。请写出sql语句,执行结果是{“headers“: [“first_name“, “last_name“, “city“, “state“], “values“: [

福大大架构师每日一题

数据库 福大大

应用链如何成为 Web3 的“潜力链”

One Block Community

区块链 开发者 区块链应用 云存储 web3

【愚公系列】2022年11月 微信小程序-app.json配置属性之其他属性

愚公搬代码

11月月更

动态路由协议(二)

我叫于豆豆吖.

11月月更

MUI框架的上拉加载的深入探索和实战运用

恒山其若陋兮

mui 11月月更

对于Ajax在MUI框架中的用运以及单 webview 模式中的下拉刷新功能探究

恒山其若陋兮

mui 11月月更

uni-app 性能优化实战之逻辑层条件编译的生产环境

恒山其若陋兮

11月月更 uni

L1、L2范数理解--Ridge以及Lasso回归

Studying_swz

深度学习 11月月更

2022下半年《软考-系统架构设计师》备考经验分享

劼哥stone

软考 系统架构师

东方通Tongweb中间件Linux环境部署

@下一站

技术 中间件 linux 文件权限控制 Java core 11月月更

【下】提高组件库Level必做好这六件事

小鑫同学

前端 组件库 11月月更

「Go实战」一文带你搞懂从单队列到优先级队列的实现

Go学堂

golang 开源 程序员 优先级队列 11月月更

分布式系统中的哈希算法

骑牛上青山

数据结构 分布式 算法 哈希

流程表单初体验

江南一点雨

Java spring springboot flowable

动态路由协议(一)

我叫于豆豆吖.

11月月更

【上】提高组件库Level必做好这六件事

小鑫同学

前端 组件库 11月月更

Postman工具介绍

阿泽🧸

Postman 11月月更

冷冷清清的双十一,电商促销节为何被消费者逐渐抛弃

石头IT视角

Redis LRU 内存淘汰算法大有玄机

码哥字节

LRU Redis 6.0

融云「百幄」之数字人,升级交互体验的「新同事」

融云 RongCloud

AI 通信 数字化

链路状态路由协议 OSPF (一)

我叫于豆豆吖.

11月月更

算法题学习---单链表的排序

桑榆

算法题 11月月更

2022昇腾AI创新大赛圆满收官,看这届评委怎么说?

极客天地

为什么要做用户留存分析

穿过生命散发芬芳

用户留存 11月月更

Flowable 外置的 HTML 表单怎么玩?

江南一点雨

Java spring flowable JavaEE

通过阅读源码解决项目难题:GToken替换JWT实现SSO单点登录

王中阳Go

Go golang 高效工作 学习方法 11月月更

jvm(二)内存管理与虚拟机执行子系统

想要飞的猪

java对象内存布局 jvm加载子系统

疲劳、垃圾邮件、备份缺失,拖垮了GitLab.com_Linux_David Iffland_InfoQ精选文章