0x00、事件描述
信息来源:https://twitter.com/gitlabstatus
2017年1月31日,上午10点左右官方公布出现问题,2017年2月1日,上午9:57 完成恢复,大约经历了24小时。
0x01、事件原因
2017/01/31 18:00 UTC 发现spammers攻击gitlab,使得数据库不稳定。
2017/01/31 21:00 UTC 发现47 000 IPs签名使用同一个账号,造成数据库高负载。(传说中的CC?)
2017/01/31 22:00 UTC 数据库集群同步被打断。DB Replication没有及时写。
2017/01/31 23:00-ish pg_basebackup拒绝数据库文件同步工作,由于PostgreSQL数据目录存在(尽管是空的),管理员决定删除该目录。 一两秒后,他注意到他在db1.cluster.gitlab.com上运行它,而不是db2.cluster.gitlab.com。导致生产数据被删除,灾难发生。
2017/01/31 23:27 管理员终止了删除,但是为时已晚。 在大约300 GB左右,只剩下约4.5 GB (妈蛋,这可是主库呀,还有和TMD rm -rf有JM关系,正常的维护,但是管理好像不懂postgresql集群工作原理。)
备份机制
定期备份似乎也只是每24小时一次,管理员还不知道在哪?
pg_dump失败,因为postgresql版本不是9.6而是9.2
Disk snapshots在微软Azure上只做NFS快照,没有postgresql快照
shell脚本做复制非常脆弱,而且日志记录很糟糕。
S3上的备份没有起作用。
发现,基本5种备份机制都失效了。
0x02、浅谈gitlab备份容灾机制
了解gitlab架构和工作原理
GitLab由以下服务构成:
nginx:静态Web服务器
gitlab-shell:用于处理Git命令和修改authorized keys列表
gitlab-workhorse:轻量级的反向代理服务器,GitLab Workhorse是一个敏捷的反向代理。它会处理一些大的HTTP请求,比如文件上传、文件下载、Git push/pull和Git包下载。其它请求会反向代理到GitLab Rails应用,即反向代理给后端的unicorn。
logrotate:日志文件管理工具
postgresql:数据库
redis:缓存数据库
sidekiq:用于在后台执行队列任务(异步执行)
unicorn:An HTTP server for Rack applications,GitLab Rails应用是托管在这个服务器上面的。
工作原理图:
系统自带备份恢复方法:
https://docs.gitlab.com/ce/raketasks/backup_restore.html#configure-cron-to-make-daily-backups
备份调研:
当然根据自己的实际需求调整参数。
系统名称
数据类型
数据量
RPO
RTO
备份周期
备份保存周期
Gitlab代码托管系统
应用数据
10G
1h
4h
每4小时全备(重复数据删除)
14天
postgresql数据库(快照方式)
30G
1h
4h
每4小时全备(重复数据删除)
14天
repositories(NFS方式)
60G
1day
1day
每天全备(重复数据删除)
14天
postgresql数据库(数据库同步)
30G
15min
15min
All time
~
安全方面:建议监控一下URL访问频率,快速发现恶意行为。不要因为安全问题,导致数据库同步失败或者滞后。
0x03、建议
从宏观上讲:
(1)备份系统建设一般都分为两个阶段,第一阶段是针对关键系统的备份建设,第二阶段是建立集中备份管理系统,把业务系统备份做成一个通用平台。
(2)确定需要备份的系统的RPO和RTO要求,最好有了备份才考虑容灾。
(3)容灾系统打算建立多大的?本地HA、active-active HA、同城容灾、两地三中心。
从微观上讲:
(1)互联网公司内部gitlab还是要根据官方给出的备份恢复建议去做。
(2)数据库集群同步要找个明白人运维。(postgresql,一般商业备份容灾软件都不支持)
还有本身gitlab的备份方式其实已经很完备,但是就是运维系统没有做备份或者数据库同步失败的告警,并且做出正确的应急处置。
本文转载于微信公众号: IT信息安全顾问(GSGSoft),更多微信文章请扫描关注公众号:
Tag标签:
本文详细介绍了2017年GitLab因遭受攻击导致的主库数据丢失事件,揭示了其备份机制的五种失效情况。讨论了GitLab的架构、工作原理,并提出了备份和容灾的建议,强调了正确维护数据库集群同步的重要性。
1568

被折叠的 条评论
为什么被折叠?



