在整个IT大家庭中,由于工种特点,DBA显得比较低调(闷骚),不太活跃。作为一名老DBA,非常高兴能在TCTP公众号跟大家聊一聊一些工作感悟。

你身边的WeSmart来啦~_java

一、DBA的自我修养

你身边的WeSmart来啦~_java_02

记得刚入DBA这行时,我的导师特别叮嘱我两个原则:一是保持手机7*24畅通,二是不要偷窥数据。至今,我仍将此奉为DBA的首要自我修养。

1、DBA首先是一个运维岗,即使不在一线,但因为所管理的数据库系统,是整个IT架构的核心,关联影响大且广。7*24时待机,在问题发生时,让相关同事能联系到人,即使不是数据库的问题,也有助于加快问题的分析和解决。


2、数据库里面存放的是核心的数据,这些数据很多都重要且隐私。很多时候,并不是自己要去查数据,而是碍于面子不忍拒绝别人的求助,这时候就要坚定立场:我是一名DBA。

介于近几年频频发生的“删库跑路”事件,“不删库”也得纳入自我修养了。我认为,一般遇到的还是“误操作”问题,总结一下误操作一般有如下几类:


1、“一知半解型”误操作。对系统和命令不够熟悉,想当然执行了高危操作。应对此类误操作,需要夯实基础,在测试环境先验证。


2、“疲劳驾驶型”误操作。有些老司机会栽在这个上面,回忆时常常会觉得像撞鬼了一样。这种情况,尽量避免在疲劳/烦躁/精神恍惚的情况下做生产变更。更为有效的方法是多人复核。


3、“弄错环境型”误操作。有的同学为了加快工作效率,可能会开很多窗口。在执行生产变更时,稳要比较快更重要。


4、“最后一分钟型”误操作。开会前一分钟,下班前一分钟,这些时间是最容易出现误操作的。需要合理安排变更时间,避免因为“赶时间”而误操作,也要预留check的时间。


当然,最最重要的一点的,就是备份高于一切,万事皆有plan B。

二、做DBAA,不做DBOO

要想得到提升,我们需要做DBAA(Database Administrator and Architect),不做DBOO(Database Operator Only)。


1、  在充分了解架构原理的基础上,制定合适的SOP。举一个简单的例子,MongoDB和REDIS的集群,部署架构如下:都是3台主机,存放3个分片,每个分片1主2从。

假如host1主机发生了故障,导致MongoDB和REDIS集群都发生了主备切换,shard1的主都切换到了host2上,实例分布如下:

你身边的WeSmart来啦~_java_03

这时假设host1没恢复,host3又故障了。Mongodb和Redis是不一样的:


根据MongoDB的副本集选举原理,Mongodb的在host2上的实例将变为Secondary,集群异常。


而对于REDIS集群,由于大多数master(host2上两个)都存活,主备正常切换,集群恢复。(如果不是host3故障,是host2故障,则需要人工切换)


这时假设host1已经恢复了,上面的实例也恢复了(每个实例的优先级一样)。则主从分布如图:

你身边的WeSmart来啦~_java_04

基于MongoDB和REDIS集群主从切换原理的不同,机器恢复后的操作也不同。REDIS需要将Host2上的主切回Host1上,避免下次Host2故障时,因为多数个Master实例故障导致不能自动切换。而MongoDB则不需要。


我们需要知其然知其所以然,才能在遇到问题时更“稳”。

2、上工为目标

《内经》将医生分上工与下工,张仲景说“上工不治已病治未病”。上工救其萌芽,故曰上工。下工救其已成,救其已败。DBA也类似,一个好的DBA,需要在架构设计,性能优化,运维监控等方面不断的耕耘,从整体规划,调理到数据库,将可能出现的问题扼杀在摇篮中。可能在外人看来,这也许不出“成绩”,但让自己不忙于救火,也是一种所得。

3、举一反三

  虽然IT技术越来也细分,更迭也越来越快,但仔细理解原理,很多都是想通的。比如Oracle database resource manager有很多设计理念,我们可以借鉴到WeRedis平台的多租户隔离上。Mongodb集群与Tidb集群在物理架构和运维管理中可以互相借鉴。就更不用说,多种分布式产品,在多IDC的多副本设计和管理了。


仔细聆听其他同事的工作进展和分析,认真思考,会对自己的工作有大启发。

三、Work Smart

Work Smart是一个仁者见仁智者见智的事情,有很多的方法论,我们都在不停的探索。在此,我分享三个小感悟。


1、  TODO LIST

作为DBA,必须要有一个TODO LIST,记录事情的紧急性、重要程度、进展、deadline、联系人等。用什么工具不重要,重要的是避免自己陷入“谁催得急就赶谁的活”,避免“忙中出错”。

尤其重要的是,要跟自己的领导或相关项目的负责人确定重点和风险,并定期沟通和反馈。


2、  不重复造轮子

在从传统数据库进入到开源数据库这个浪潮中,编程成为了DBA必备技能。DBA也很乐于开发一些工具来帮助自己的工作,这时候就要避免陷入“重复造轮子”的境地。有时候拿来主义也许更smart一些。


3、及时复盘,定期总结

  正所谓“吾日三省吾身”,反思自己工作上存在的问题和不足,并深度思考,做好规划,持续成长。