运维是数据中心生命周期中持续时间最长的一部分,随着数据中心建设规模和复杂度的增加,运维的工作变得更加繁琐。在运维的工作中,有相当大部分工作都是重复性的指令行操作。所以,不少的运维工程师研究出不少提升工作效率方法,减少人力成本,这就是脚本。将一些重复性的、逻辑关系明确的操作工作通过脚本下发来完成,这样可节省很大一部分人力,同时还能避免人为操作的失误,这就是脚本的力量。在运维的工作中,脚本正扮演者越来越重要的角色。
脚本语言代表了简单,快速,易重用的开发。不需要编译可以直接执行。不需要管理内存。脚本语言易于理解,越往后的开发将越来越简单,复杂的东西将被丢掉。开发将越来越能利于普通人使用,这是一种必然的发展趋势。运维工程师经常重复性做一个变更,他就会想写个脚本自动完成,久而久之输出越来越多个执行脚本,当要进行变更时,找到对应的变更脚本自动执行即可,不仅效率极高,而且不会变错。当然,数据中心是不断更新变化的,脚本也要随之更新,不然执行起来就会犯错,一旦错误的脚本执行起来,结果就不好预测了,往往比人工破坏力更大,所以设计脚本的人一定要对数据中心系统相当了解,或者将脚本已经在模拟测试环境中反复验证没问题后,才能在承载业务的数据中心系统上运行。
脚本的种类也多,数据中心里常用的脚本有:监控脚本(监控运行设备的各种状态)、备份脚本(备份数据库、设备配置)、部署脚本(游戏环境安装脚本、设备新业务部署、系统初始化脚本)、业务脚本(游戏日志合并脚本、查询数据库脚本)等等,不同种类的脚本可以使用相同的脚本语言,相同种类的脚本也可以使用不同种类的脚本语言,这完全取决于运维人员的技能水平,使用哪种脚本语言得心应手。一个数据中心规模越大,承载的业务种类越多,脚本也就越复杂。不同的数据中心,使用的脚本差异会相当大,相互之间可借鉴性不大,所以一个数据中心的脚本基本都是一部数据中心成长史的缩影,脚本的种类和内容会随着数据中心的运行不断增加,不断完善,是数据中心运维最为宝贵的经验。
脚本语言的涵盖范围也较广,我们知道服务器和网络设备基本都是命令行交互方式操作,这种方式执行效率高,受到广泛使用,这种方式为脚本的部署提供了天然土壤。早期的脚本有命令行复制的方式,将需要执行的脚本命令放在记事本中,当需要执行时,将这些脚本命令直接到设备上拷贝粘贴执行即可,直到现在很多的网络变更方案,还是采用这种传统方式执行。一旦发现问题,可以立即停止拷贝,进行命令删除操作进行回退。在监控中,我们常用TCL脚本或Shell脚本采集一些设备的运行状态和信息,将这些信息收集起来进行显示和分析,一旦出现异常可以及时告警,或者故障隔离。这类脚本往往有强烈的先后依赖关系,对显示信息也有判断。比如:通过脚本采集所有运行设备的CPU占用率,这样就要周期性地通过脚本登录到所有设备,收集CPU占用率的信息进行纪录,同时将采集的数据与预先设定好的阈值进行对比,如果有不符合的给出警示。通过脚本可以将数据中心里的所有运行指标监控起来,这就是自动化运维的重要部分。到了如今,perl,python,ruby,javascript等脚本语言开始走入人们的视线,这些脚本语言可以对数据中心设备进行二次开发。这些脚本语言都是基于Linux实现,Shell脚本是实现Linux系统自动管理以及自动化运维所必备的工具,Linux底层以及基础应用软件的核心大都涉及Linux脚本内容。Perl比Shell强大很多,在2010年以前很流行,但它的语法灵活、复杂,不容易读,团队协作困难,使得这个脚本语言早早消亡。Python是近几年非常流行的语言,它不但可以用于脚本程序开发,也可以实现Web程序开发,要知道知乎、豆瓣、YouTube都是用Python开发,Python语言优势在于开发复杂的运维软件、Web页面管理工具和Web业务开发,对于一键自动化安装、优化,监控报警脚本,软件启动脚本,日志分析脚本等运维监控类的功能,使用Shell脚本更加顺手,开发会更简单、更快速。Ruby是日本开发的,还不错,风格跟Python有点像,因为rubyonrails出了名,国外用的比较多,国内没戏,Python已经把它的想象空间都占死了。
由此可见,从数据中心变更、扩容、业务部署、监控、故障恢复、二次开发等方面都有脚本的身影,脚本质量的高低体现了一个数据中心的运维水平,是通向自动化运维的必要条件。我们常说要做自动化运维,很多程度上要靠脚本来打天下,通过各种复杂的运行脚本,采集运行状态和信息,及时发现隐患,出了问题也能及时收集定位,高级的脚本可以通过采集故障时的设备信息做故障诊断,根据之前存储的各种可能故障现场,来执行其对应的已经设计好的恢复操作脚本,从而实现自动化处理故障并恢复业务的能力。在数据中心里,脚本无处不在,所有的地方都体现出了脚本的力量。一个数据中心运维技术人员,只有将脚本玩好,才能成为真正的运维专家。数据中心部署脚本的目的,就是要提升运维生产力,提升运维效率,降低人为失误。通过脚本技术,把运维的能力沉淀到运维的技术平台上,让周边所有人和系统依赖脚本运维能力,而不是依赖运维的人。
编辑:Harris