|
日前,Gitlab.com产生了一个大事,某同学误删了数据库,这个事看似是个初级错误,不外,因为Gitlab把整个进程的细节都全部袒暴露来了,所以,可以看到许多对象,而对付雷同这样的工作,我本身以前也干过,而在最近的两公司中我也见过(Amazon中见过一次,阿里中见过至少四次),正好通过这个事来说说一下本身的一些感触和概念吧。我先放个概念:你以为有备份系统就不会丢数据了吗? 事件回首 整个事件的回首Gitlab.com在第一时间就放到了Google Doc上,过后,又发了一篇Blog来说明这个事,在这里,我简朴的回首一下这个事件的进程。 首先,一个叫YP的同学在给gitlab的线上数据库做一些负载平衡的事情,在做这个事情时的时候突发了一个环境,Gitlab被DDoS进攻,数据库的利用飙高,在block完进攻者的IP后,发明有个staging的数据库(db2.staging)已经落伍出产库4GB的数据,于是YP同学在Fix这个staging库的同步问题的时候,发明db2.staging有各类问题都和主库无法同步,在这个时候,YP同学已经事情的很晚了,在实验过多个要领后,发明db2.staging都hang在哪里,无法同步,于是他想把db2.staging的数据库删除了,这样全新启动一个新的复制,功效呢,删除数据库的呼吁错误的敲在了出产情况上(db1.cluster),功效导致整个出产数据库被误删除。(陈皓注:这个失败根基上就是 “事情时间过长” + “在大都终端窗口中切换中迷失掉了”) 在规复的进程中,他们发明只有db1.staging的数据库可以用于规复,而其它的5种备份机制都不行用,第一个是数据库的同步,没有同步webhook,第二个是对硬盘的快照,没有对数据库做,第三个是用pg_dump的备份,发明版本差池(用9.2的版本去dump 9.6的数据)导致没有dump出数据,第四个S3的备份,完全没有备份上,第五个是相关的备份流程是问题百出的,只有几个粗拙的人肉的剧本和糟糕的文档,也就是说,不单是是人肉的,并且照旧完全不行执行的。(陈皓注:就算是这些备份机制都work,其实也有问题,因为这些备份大大都根基上都是24小时干一次,所以,要从这些备份规复也必然是是要丢数据的了,只有第一个数据库同步才会及时一些) 最终,gitlab从db1.staging上把6个小时前的数据copy返来,功效发明速度很是的慢,备份结点只有60Mbits/S,拷了很长时间(陈皓注:为什么不把db1.staging给直接酿成出产机?因为那台呆板的机能很差)。数据此刻的规复了,不外,因为规复的数据是6小时前的,所以,有如下的数据丢失掉了: 大致预计,有4613 的项目, 74 forks, 和 350 imports 丢失了;可是,因为Git客栈还在,所以,可以从Git客栈反向推导数据库中的数据,可是,项目中的issues等就完全丢失了。 约莫有±4979 提交记录丢失了(陈皓注:预计也可以用git客栈中反向规复)。 大概有 707 用户丢失了,这个数据来自Kibana的日志。 在1月31日17:20 后的Webhooks 丢失了。 因为Gitlab把整个事件的细节果真了出来,所以,也获得了许多外部的辅佐,2nd Quadrant的CTO – Simon Riggs 在他的blog上也宣布文章 Dataloss at Gitlab 给了一些很是不错的发起: 关于PostgreSQL 9.6的数据同步hang住的问题,大概有一些Bug,正在fix中。 PostgreSQL有4GB的同步滞后是正常的,这不是什么问题。 正常的遏制从结点,会让主结点自动释放WALSender的链接数,所以,不该该从头设置主结点的 max_wal_senders 参数。可是,遏制从结点时,主结点的复数毗连数不会很快的被释放,而新启动的从结点又会耗损更多的链接数。他认为,Gitlab设置的32个链接数太高了,凡是来说,2到4个就足够了。 别的,之前gitlab设置的max_connections=8000太高了,此刻降到2000个是公道的。 pg_basebackup 会先在主结点上建一个checkpoint,然后再开始同步,这个进程约莫需要4分钟。 手动的删除数据库目次长短常危险的操纵,这个事应该交给措施来做。推荐利用刚release 的 repmgr 规复备份也长短常重要的,所以,也应该用相应的措施来做。推荐利用 barman (其支持S3) 测试备份和规复是一个很重要的进程。 看这个样子,预计也有必然的原因是——Gitlab的同学对PostgreSQL不是很熟悉。 随后,Gitlab在其网站上也开了一系列的issues,其issues列表在这里 Write post-mortem (这个列表大概还会在不绝更新中)
从上面的这个列表中,我们可以看到一些改造法子了。挺好的,不外我以为还不是很够。 相关的思考 |















