根据莫非定律1:「凡是可能出错的事必定会出错,任何一个事件,只要具有大于零的机率,就不能够确定它不会发生。」这句看似箴言的话,想必每个运维从业人员感触非常深刻。本文从 DBA 线上操作的角度,谈谈自己的看法。
工作日,DBA 会处理大批工单;非工作日,DBA 在时刻准备着救急。亦即,DBA 每时每刻都有线上操作的需要。那么问题来了,个人的状态是不定的,包括心理状态、身体状态。时刻保证临危不乱,这是 DBA 重要的素质之一。线上故障,分秒必争,不及时的处理、不善的操作都很有可能给公司带来不同程度的损失。线上操作需要求稳,本文给出笔者的点滴思考。
© Pierre Puvis de Chavannes/The Poor Fisherman, 1881/Wikipedia2
第一,处理工单、凌晨维护、处理紧急故障之前,梳理流程,准备必要的资料。一个优秀的 DBA,不是求速度,不是求效率,而是求稳。出错的概率低,你给别人的感觉就会比较靠谱。有经验的 DBA,线上操作就是复制粘贴,宁愿相信 0 和 1,也不愿相信自己和别人。每次处理工单、凌晨维护,笔者都会养成一个习惯,梳理流程,准备线上服务器 IP 列表、需要的脚本、有可能使用到的命令、相关的文档等等。这样的好处是,心里有谱,不至于慌乱。即使遇到突发状况,也会相对从容。当然,紧急故障没有这么多时间给你准备,但至少也要准备常用的命令。这里有个小建议,使用 Evernote 保存常用的命令,当然,涉及公司敏感信息的,不能留。临场发挥,尽可能地避免手动输入,因为高度紧张的状态下,输入错误的概率比日常要高。于 DBA 而言,输入错误,带来的灾难将是毁灭性的。已经有很多类似的案例,在此不做展开。
第二,处理故障之前分析最重要。通常某个故障是不是单点的,是一个面,是一个链条。线上故障,直接受影响的就是用户,究其原因,用户层、接入层、逻辑层和数据层每一层都有可能有问题。处理故障之前,不是无谓的试错,一次不行,下次依然如故的概率相当高,然后时间就这样不知不觉地浪费了。此时应该冷静下来,思维不能单独盯在数据层,从整个技术链条考虑,这样获得的信息才是最全方位的。那么问题来了,互联网行业工作细分,DBA 很大可能没有操作数据层之外的权限,怎样做到信息相对完善,接下来就是下一个话题。
第三,学会沟通,尽可能地达到信息对称。第二点提到,DBA 更多关注的是数据层,达到整个技术链条信息的流通是相当重要的。这一点其实不是技术问题,而是一个人的软实力。关于提问的智慧3,可以参考之前笔者的文章。我们都知道,提好问题比答案本身更重要。DBA 在处理故障时,跟监控、研发、测试、产品、运维等都有可能打交道。监控会反馈受影响的范围、延时情况等等,这属于用户层;研发、测试、产品会反馈业务故障、程序日志等,这属于用户层和逻辑层;运维会反馈网络情况、流量状况、Web 服务器异常等等,这属于接入层。最后 DBA 会关注数据层,包括持久层和缓存层,然后结合不同链条的信息,综合分析,再进行相应的操作。线上操作,我们不能容忍低效甚至无效的沟通。
第四,任何操作三思而后行。DBA 应该把「备份重于一切4」铭记于心,修改任何配置文件之前先备份,慎用甚至不用 rm。对于有 DROP 和 TRUNCATE 的工单,再三审核和确认,避免无效操作。如果确实存在此类需求,应该首先确认是否有备份,备份是否可用。DBA 应该对高危操作有明确的认识,除此之外,所有的恢复操作也需要了记于心,防患于未然。
第五,事后 Review、反思、总结,形成知识库。故障是不可控的,可能是人为,可能是程序有 Bug,可能是网络故障,总之发生故障的原因千奇百怪。但故障事后的 Review、反思和总结我们可以控制。针对某个特定的故障,反思处理的流程是否有优化的地方,反思基础设施是否还有不完善的地方,反思团队出现的问题,反思和其他部门的合作是否有问题等等,然后形成会议记录、故障报告、故障总结,形成知识库,定期再次 Review,避免下次出现类似的问题。再者,还可以给新入职的员工参考,从真实案例中学习,这样进步会更快。
做好一个优秀的 DBA,技术是一方面,更重要的是个人素质。比如,你需要有良好的习惯、需要有优秀的心理素质、需要有责任心和道德、需要有良好的沟通能力……这些软实力是基石,在此基础上,拓展技术的广度和深度,这样才会有更良好的发展。
借此文章,唠嗑下最近的想法。笔者经常反思为什么会这样坚持更新博客,最近有了比较理想的答案。第一是督促自己思考,第二是为别人提供价值。先说第一点,坚持更新博客,就是在提醒自己不断思考,这样就会比别人获得更多技术之外的能力。然而,这些能力,是在枯燥的工作之作学不来的。世间的道理都很简单,大家也懂,然而真正去行动并且持之以恒的少之又少。你看了一千篇文章,读了一百本书,不去行动都是枉然。然后说说第二点,博客很重要的一点就是给读者提供价值。读者觉得你的文章能给他带来启发,这就是正向输出;读者评论你的文章、和你发邮件交流、加微信和你聊天,这就是正向反馈。你给读者提供了价值,说不定读者哪天就会给你带来意想不到的惊喜。一个长期保持高质量更新的博客,于己于他,个人认为都是瑰宝。即使现在没有兑现,将来的某个时刻会。
回到这篇文章本身,笔者时刻都在强调软实力。软实力靠的是长期的积累,需要自控力不断提高。归根结底,任何管理本质上都是对自我的管理。