事件回顾
一个gitlab公司的同学, 为线上的数据库进行负载均衡的操作。 碰巧这个时候,被OODS工具,导致数据库各种数据飙高。由于这个异常的攻击导致某个备用的数据库落后于主库4GB。 在尝试了多个方法无效之后,原来希望启动一个新的实例,结果错误的删除了整个实例。最后通过手动复制代码,花了6个小时,将所有被删除的数据复制了回来。
说人话,就是一个工程师,由于在一次日常工作中,由于被攻击和长时间的加班导致脑子不清楚, 错误的将一个备份数据文件删除了。差一点从删库到跑路成为现实。
注:GitLab 是世界上最著名源码代管服务网站
事件问题分析
我觉得这个事件是一个小概率的事件凑在一起才能发生的。因为gitlab号称有5个备份机制,但是在这一次事件中全部失效。但是小概率事件的发生肯定有原因的。
- 最大的问题是不应该让这种线上的操作存在可以清空这个数据库的操作。
- 其次是数据的回滚和备份需要经常测试验证,而不是留下一堆不可用的脚本和文档
- 对于数据选型,应该选择具有良好的运维能力的技术体系, 从整个过程看, 很有可能对于PostgreSQL 的特性熟悉程度不够。
公司系统如何更好避免类似问题
多机房备份
对于任何一个分布式的系统来说, 数据备份,数据可用都是构建一个高可用的系统的基础。
- 是需要保证系统服务的稳定性。
- 是系统的数据能够通过异地备份的方式进行存储。
- 是备份的数据同步出问题之后的回补机制的验证需要经过比较严密的测试,保证线上可用。
减少黑屏操作
很多程序员, 特别是新人程序员, 会觉得在黑色的命令行屏幕上敲敲命令行完成操作是一件很酷的行为。 但是我想说, 这绝对是电影看多了。直接使用命令行操作,虽然效率高, 但是存在很多不可控的风险。所以现在很多公司都必须有自己的运维系统,通过点击系统(白屏)来完成相关的操作(最少删除的时候, 会有一个弹出那个提示), 避免了手动敲击命令行(黑屏)之类的相关操作。
少加点班,减少疲劳驾驶
据不完全统计, 用于疲劳驾驶导致的事故排名很高。同理,由于批劳操作, 肯定会存在很多的误操作,因为联系工作了十多个小时之后, 很有可能头脑不清晰,随便l乱操作就出错了。 更合理的是, 对于运维同学能够通过倒班的形式而不是持续加班的形式, 可以解决不少的问题。
个人数据备份
- 对于个人来说, 所有的重要的文件, 无论是代码还是数据问题,照片都是需要进行定时的备份, 养成数据备份的习惯,例如使用iCloud进行自动备份可能更好。
- 所有的云端存储最好是进行多公司存储, 因为现在无论腾讯还是百度, 各个大公司都提供了云存储的服务,将数据保存在不同公司的服务器上,可以极大提高数据的安全性,毕竟几个大公司一起出问题的概率很小
- 如果个人是一个标准的技术宅, 可能考虑自己搭建一套NAS,为自己量身订造一套家庭数据中西, 也是一个很赞的选择。
结语
小心使得万年船,对于任何的线上系统都要保持足够的敬畏, 避免用户出现各种意外, 是一个工程师的基本素质。 同时持续使用系统和产品而非人肉的操作来代替运维的工作,可以少点背锅的人。
版权申明 本文为林炎小宝原创,转载请联系