写点什么

疲劳、垃圾邮件、备份缺失,拖垮了 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:003200

评论

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

观点碰撞燃爆会场|2023开放原子全球开源峰会区块链分论坛圆满落幕

开放原子开源基金会

区块链 开源 开放原子全球开源峰会 开放原子

如何在 Apifox 中正确指定 query 参数?

Apifox

Java 程序员 Apifox API 接口工具

可观测性最佳实践 | 警惕!未知的风险正在摧毁你的系统

观测云

可观测性 运维监控 观测云 云原生可观测 可观测性用观测云

Seata Saga 模式快速入门和最佳实践

阿里巴巴云原生

阿里云 云原生 seata

四大技巧,教你如何加速手动UI测试

龙智—DevSecOps解决方案

UI测试 用户界面测试

即时通讯技术文集(第17期):社交软件红包技术专题 [共12篇]

JackJiang

网络编程 即时通讯 IM

用简单的描述带你理解运算放大器

矜辰所致

运算放大器 6 月 优质更文活动

华为云邓明昆:云原生时代,以开源赋能数字化转型

华为云开源

开源 云原生 数字化

强化学习从基础到进阶-常见问题和面试必知必答[1]:强化学习概述、序列决策、动作空间定义、策略价值函数、探索与利用、Gym强化学习实验

汀丶人工智能

人工智能 深度学习 强化学习 深度强化学习 6 月 优质更文活动

618夏日“折”学家活动上线!开通表盘会员解锁百变腕间风格

最新动态

LED透明屏和LED玻璃屏的区别

Dylan

分辨率 视频 图像 屏幕亮度 LED

GPT-4满分通过MIT本科数学考试!这套提示词火了

Openlab_cosmoplat

算法 ChatGPT

ModelBox实战开发:RK3568实现摄像头虚拟背景

华为云开发者联盟

人工智能 华为云 华为云开发者联盟 企业号 6 月 PK 榜

龙智携手Atlassian亮相DevOps国际峰会:释放团队潜力,以协作挑战不可能

龙智—DevSecOps解决方案

DevOps ITSM ITSM软件 工作管理

openGemini:顺势而动,蓄势而发

华为云开源

数据库 开源

海南正规等级保护测评单位有哪些?叫什么名字?

行云管家

等保 等级保护 海南 等保测评单位

赋能中国软件,共筑开放生态|2023开放原子全球开源峰会软硬协同开源分论坛成功举办

开放原子开源基金会

开源 开放原子全球开源峰会 开放原子 软硬协同开源

【参考设计】2KW AC/DC数字电源方案

元器件秋姐

设计 电路 方案 电源 数字电源

IT自动化运维工具用哪款?需要考虑哪些因素?

行云管家

IT运维 自动化运维 IT自动化运维

基于双层缓存(DLC)机制解决热点缓存并发重建问题

xfgg

Java' 6 月 优质更文活动

Typora绿化版

源字节1号

开源 软件开发 前端开发 后端开发 小程序开发

优化开发工作流的三大实用技巧,助力效率提升

龙智—DevSecOps解决方案

版本控制 版本管理

高性能网络 SIG 月度动态:联合 IBM 就 SMC v2.1 协议升级达成一致,ANCK 率先完成支持

OpenAnolis小助手

开源 ibm 高性能网络 anck 龙蜥sig

浅谈API安全

权说安全

API 安全

模型当道 开源聚力|2023开放原子全球开源峰会开源大模型分论坛圆满收官

开放原子开源基金会

开源 大模型 开放原子全球开源峰会 开放原子

详解4种模型压缩技术、模型蒸馏算法

华为云开发者联盟

人工智能 华为云 华为云开发者联盟 企业号 6 月 PK 榜

强化学习从基础到进阶-案例与实践[1]:强化学习概述、序列决策、动作空间定义、策略价值函数、探索与利用、Gym强化学习实验

汀丶人工智能

人工智能 深度学习 强化学习 深度强化学习 6 月 优质更文活动

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