在本文中,我们将研究开发人员的错误是如何导致 GitLab从其网站上丢失六个小时的数据。我们将看到当时发生了什么,他们如何修复它以及他们从中学到了什么。对于Gitlab及其用户,此问题很糟糕。de
GitLab 是最受欢迎的平台之一。但是在 2017年1月31日上,Gitlab有一个很大的问题:他们的一位开发人员意外地消除了整个生产数据库,从Gitlab.com中删除了六个小时的数据,这是Gitlab的最伟大的噩梦之一。
。。问题:数据太多
当Gitlab看到一些坏人在Gitlab.com上制作了很多摘要(小件)时,问题开始于UTC,这使数据库非常忙碌且不稳定。 Gitlab开始通过其IP地址阻止坏人并删除用户和摘要。
在UTC下午9点左右,数据库变得越来越糟,使得很难写任何东西并使网站下降。 Gitlab看到一个用户正在使用一个项目作为CDN,使 47,000 IPS登录了同一帐户。这也使数据库也很忙。他们也删除了该用户。
在UTC大约10点左右,GitLab获得了警报,因为数据库没有将自己复制到另一个数据库,这对于备份很重要。之所以发生这种情况,是因为有太多数据要复制,而其他数据库无法跟上。 gitlab试图通过删除其数据文件夹并再次启动副本来修复其他数据库。
错误:错误命令
但是副本不起作用,给出了一些错误。 GitLab试图更改主数据库上的某些设置,但这使PostgreSQL并没有因为开放太多而开始。
在UTC下午11点左右,开发人员之一(Team-Member-1)认为,由于数据文件夹在另一个数据库上存在(即使是空),因此副本可能不起作用。他决定使用 rm -rf /var/opt/gitlab/postgresql/data/*
。
,但他犯了一个很大的错误:他在主数据库中运行了命令,而不是另一个数据库。这删除了网站数据库中的所有数据,使Gitlab.com完全没有数据。
解决方案:使用旧备份
一旦Team-Member-1知道他的所作所为,他告诉他的团队成员,并在Gitlab.com上停止了一切。他们开始寻找备份以获取数据。
他们发现他们有一些备份方法,但它们都没有效果很好:
-
磁盘快照未打开
-
找不到S3备份
-
DB转储
-
复制过程被打破
唯一工作的备份是 Team-Member-1在问题之前用手制作的。此备份中有来自Gitlab.com的大多数数据,但没有问题,合并请求,用户,评论,摘要等。
Gitlab决定使用此备份使Gitlab.com尽快再次工作。他们还要求用户通过向他们发送图片或最近工作的副本来帮助他们恢复所有丢失的数据。
备份过程花费了很长时间,并且有很多步骤:
-
将备份放在新的数据库服务器上
-
制作gitlab使用新数据库服务器
-
检查和修复备份数据
-
启动gitlab服务并测试一切是否有效
-
与用户交谈并告诉他们发生了什么
gitlab.com终于在2月1日下午6:14左右再次工作。
教训:从错误中学习
gitlab非常仔细地研究了这个问题,并写了一篇博客文章。他们发现了为什么问题发生的原因以及使情况变得更糟的原因,例如:
-
人为错误: Team-Member-1删除了错误的文件夹
-
缺乏验证:均未对任何备份方法进行测试或观察
-
缺乏文档:没有明确的方法使用备份
-
缺乏沟通:没有很好的交谈和一起工作
-
缺乏睡眠: Team-Member-1在深夜工作,很累
他们还列出了要做的事情的清单,并使得停止这种问题再次发生,例如:
-
打开磁盘快照并检查S3备份
-
制作备份文档和测试方法
-
发出警报并观察备份问题
-
进行基于角色的访问控制和数据库服务器的审核记录
-
教学并帮助PostgreSQL复制
-
创造一种无罪的文化和一种从错误中学习的方式
gitlab的问题对他们和他们的用户非常不利。这表明他们需要拥有良好和测试的备份,并以清晰的书面方式使用它们。
gitlab对这个问题很开放,诚实,他们与所有人分享了他们发现和学到的东西。他们还对用户表示抱歉,并给了他们一些数据丢失。他们得到了社区的大量反馈和支持,他们喜欢开放和工作。
结论
吉特拉布(Gitlab)搞砸了,丢失了数据,但他们将其修复并从中学到。 Gitlab的问题提醒我们所有与数据和数据库一起工作的人都要谨慎,聪明和准备就绪。我们应该始终检查命令,测试备份,写我们的方式,与团队成员交谈并从错误中学习。
参考
如果您使用的是Medium,请支持并关注我以获取有趣的文章。 Medium Profile
通过关注我,请继续使用我最新且最有趣的文章。
如果本指南对您和您的团队有所帮助,请与他人分享!