系统故障,对于 DBA或是运维人员来说,都是心中永远的痛。而避免故障的原则却是有章可循,现列如下,与各兄弟行共勉:
1、变更操作需先在同样的环境测试过,并要可回滚
我行科技条线员工时常调侃:佛说:每次创伤、都是一次成熟,这便是运维人员的真实写照。变更出现不明原因故障后,就心里哼唱:“如果时光可以倒流......”虽说从某种意义上讲、运维是一门经验的学科、是一门试错的学科。对于那些陌生而没有做过的东西、总是会给你不期而遇的痛击,所以在此提醒大家请务必保护现场,让变更有回头的机会。
2、对破坏性的操作谨慎小心、慎之又慎
何谓破坏性的操作?比如:对 Oracle 而言:truncate table_name、delete table_name、drop table_name,这些语句执行起来轻松简单也惬意极了、但记住!即便数据可被回滚、代价也是非常大!
对 Linux 而言:rm -r 所有当前及其子目录的所有数据都将被删除。经历过这种故障的人、大多会给 rm 上个别名。
alias rm='rm -i'
同理,cp 和 mv 也可以有同样的选项:
alias cp='cp -i'
alias mv='mv -i'
3、设置好命令提示
在所有操作之前、请务必理清你所在的是主库、备库?当前目录?哪个 schema?session?时间?这些看似简单的东西,但却是最最重要的步骤,细节决定成败。
比如:对 Oracle 来讲:
[plain] view plaincopy
idle> set sqlprompt 'RAC-node1-primary@10g>>'
RAC-node1-primary@10g>>
当然、你也可以在 glogin.sql 里面设置。
对于 Linux 而言、bash 环境的提醒可设置 PS1 来知道当前目录、登陆用户名和主机信息等;
对 PS1 更多理解、请见:man PS1
4、定期备份并验证备份的有效性
人非圣贤、岂能无过?机器总有计划内或计划外崩溃的一天。怎么办?备份!!!相信大家备份肯定会做,但是备份的作用是在紧急情况下的及时恢复,所以备份的有效性就显得尤为重要。
备份的学问很大、按照不同的维度可以分:冷备和热备;实时和非实时;物理和逻辑。OLTP 7*24 在线业务、DB 就需要有实时热备。这样就可以了吗?
如果开发人员的一个不带任何条件的 delete 误删所有数据,此时你除了实时、还需要有非实时的备份、把 DB 从逻辑错误中恢复出来。
总有那么几次、备份无法保证 100% 恢复,简单的验证方法就是找个空库恢复出来。运维工作不仅要求我们有备份的能力,还要有遇到故障,让备份在短时间内继续恢复的能力。
5、对生产环境永保敬畏之心
会计人员在从业之前、都有个职业操守的训练。同理、我们认为这也应该是运维人员进入行业首先需要具备的素养。举例:
于 Oracle而言、你可以跑一个 RDA巡检 DB的健康状况;
于 Linux 而言、是否有 password aging、隔离外网等。
6、交接和休假最容易出故障、变更请谨慎
接手别人的工作要一而再、再而三的确认变更方案。请教人并不见得就是能力不行的表现;
休假前最好各种可以做好的事情,最好能够准备一份文档,指明在什么情况下怎么做和联系哪些人;
在别人放假的时候接手工作,“能拖则拖”,实在需要执行:必须不厌其烦的跟原运维者确认各个操作细节。
7、搭建报警、及时获取出错信息;搭建性能监控、预测趋势
运维人员赖于生存的工具就是报警和监控。
报警可以让你及时知道系统出现了什么异常、以便及时跟进、把故障扼杀于摇篮;
监控可以让你了解系统的历史性能信息、以历为鉴、可以知兴替嘛、早做优化。
报警和优化是衣宽带水的好兄弟、相铺相成、互相促进。
8、自动切换需谨慎
比如:Oracle 存储级的HA方案:Data Guard,主库提交了一笔订单,结果发生了 switchover,这笔订单没有同步到备库,那么商户损失了一个销售单、对客户、对公司都是损失。
9、变更操作不是一个简单的动作,一定要全流程考虑
做一个变更的时候,可以提前一两周发送邮件并电话手机通知相关涉及变更配合操作人员;并在测试机上写好脚本,召集大家 review 操作步骤和脚本;测试完成以后拷贝到生产环境;录对应机器,“打开,关闭,打开,关闭”该脚本;跟相关人员再次确认执行的操作、顺序、时间点,可能的影响和回滚是否都准备好了;
行前还要退出这个机器,然后再登录进去,“打开,关闭”脚本;
后才在后台运行脚本,同时在另外一个窗口登录着,随时ps和查看结果输出。
10、面对新系统架构、新脚本等新兴事物,请谨记简单即是美
这虽说这有点禅的意境、但和 GNU/Linux 的思想不谋而合。
实际生产运维过程中,我们总面临各种诱惑:新的系统架构,新的更智能的命令和工具,最新的硬件平台,功能更全的HA软件,与之对应是高效、快捷,听起来非常诱人,你可以在线下安装,测试,怎么做都行。但是如果想要在生产环境下使用起来、请三思!!
能够使用系统内置命令的话,就不用考虑其他要专门下载安装的软件了,因为使用内置命令不仅安全、而且可以规避后期防病毒、漏扫等工作纷至沓来。
脚本本身就能完成的功能,就没有必要专门找一个功能丰富的软件来做Linux本身自带的字符界面比那些复杂的图形界面要简洁方便
运维工作是一项任重而道远的工作,接起运维意味着深深地重担压在肩头,只有我们时刻保持警惕之心,长悬达摩克利斯之剑,才能保证少出故障。
供稿|山西省分行信息科技部