作为一个长期在运维岗的我,想做些什么来帮助大家学习运维,全是干货,绝不卖货。 一、什么是运维工程师 运维工程师(Operations),负责维护并确保整个服务的高可用性,同时不断优化系统架构提升部署效率、优化资源利用率提高整体的ROI(百度百科)。通俗一点讲我们就是园丁,而系统就是一个花园,我们只有尽心尽职地伺候好花园里的花花草草,整个花园才能长期稳定的吸引客流量。 二、运维工程师的工作内容 顾名思义,运维工程师的主要内容是运维。运维主要是保障一个系统长期稳定的工作下去。主要有以下几点: 1、问题发现:当系统出现异常时,需要尽可能快速的恢复业务,保障系统的可用性。这里我们可以借助于监控平台和告警平台,通过短信、邮件等方式通知自己,系统出故障了。 2、问题处理:设计开发一些处理工具。当系统出现故障时,工具可以快速且自行解决掉这些故障,从而恢复系统。 3、问题跟踪:通过故障发生时的一些表象(日志、监控、告警)来找到问题的根源,该开发修复的找开发,配置原因的修改配置,第三方原因的找第三方。 4、配置管理:一个系统会有多个模块和多个版本,我们可以通过配置管理工具管理这些不同模块和版本的配置,确保这些配置发布到生产环境上后,系统能够正常运行。 三、能力要求 我们先来看下某招聘网站上运维工程师的任职要求 第一个 1、计算机相关专业,全日制统招专科以上学历,2年以上相关工作经验; 2、了解Linux系统原理,掌握Linux操作系统常用命令,有Linux常用HA集群(HAProxy/Keeplived/Ngnix/Apache/Tomcat/Redis等)故障排查经验; 3、了解Tomcat/Apache/ActiveMQ/Kafka等中间件、Web服务器和消息队列产品; 4、熟悉至少一种Zabbix/Nagios/Catci监控工具,并利用工具进行初步问题定位和故障分析; 第二个 1. 大专以上学历 2.具备1年以上Linux操作系统运维经验; 3.熟悉linux,docker,以及Tomcat,Mysql,Redis,Nginx,ELK等安装部署; 4.熟练掌握常用命令、Shell脚本编程,docker容器的使用; 5.熟悉Linux系统高可用技术、负载均衡、集群等技术方案; 第三个 1、2年以上系统运维、监控运维等相关工作经验。 2、熟练掌握Linux系统操作。 3、熟悉常用监控及日志工具使用,如Zabbix、Prometheus、ELK等,有APM使用经验优先。 4、较强的沟通协调和语言表达能力,善于团队合作,工作细致并谨慎。 归类下来就是Linux基础、容器、监控工具和数据库。除了这些,我认为还需要了解Shell/Python等编程语言、网络知识。除了技术能力同时还要具备责任心、细心、进取心和安全意识这些软素质。 四、Linux基础 Linux基础包含了Linux整体理解和命令使用。 了解Linux:推荐《鸟哥的Linux私房菜:基础学习篇》,个人认为这是一本适合小白的入门书。 命令使用:运维常用的命令一般涉及到CPU、Device Drivers、DRAM、IP、Port、Application、DB等。 五、容器 常见的容器有Apache、Tomcat、Nginx、Weblogic、docker等等。个人建议可以在本地搭建一套环境练练手,我参与的项目使用Tomcat偏多,这里还是推荐《鸟哥的Linux私房菜:服务器架设篇》 六、监控工具 目前常用的有Zabbix、Catci、Nagios、Puppet等等,这个视情况可以选择性地熟悉,我参与的几个项目用的监控工具都不一样,基本都是换汤不换药,监控CPU,内存,日志,吞吐量等等信息。 七、数据库 常用的数据库有MySQL、Oracle、PgSQL、MSSQL等,作为运维不能只会简单地增删改查,还需要参与安装、巡检、性能调优、备份等工作,不同的数据库在语法上大同小异,牢记相应的关键词就行。比如查当前时间,MySQL用now,oracle用sysdate。 八、编程语言 学习编程语言是为了更快速的定位和解决系统故障。举个例子,我曾经参与过的一个项目,做的是服开系统。我们系统发送开通指令给外部网元时,需要外部网元回复成功或者失败。当外部网元回复第三种情况时(实际回复的是成功,换了格式)我们系统就无法识别了,这时候就会报错,出现工单无法竣工的情况。我当时用python写了一个工具,定时扫描出这类工单,模拟通知成功,让工单可以正常竣工。 九、网络知识 熟练使用抓包工具tcpdump、fiddler等,了解防火墙、IP、Port之类,推荐《TCP/IP协议详解》 十、软素质 一个好的运维,软素质是必不可少的。 责任心:对所负责的工作要有owner意识,遇到告警要第一时间响应,而不是等着别人去处理;遇到无法处理的,要第一时间请求同时的协助。我对底下兄弟的要求是10分钟响应,30分钟解决,2小时上报。在运维岗,尤其是驻场运维手上的活会很多,但是要记住客户就是上帝,客户的问题就是第一位的,你可以先响应再去解决,不要给客户一种你不重视他的感觉。当问题出现2小时以上都无法解决的时候,需要上报领导层,让领导协调售前团队安抚客户,售后团队提供解决方案。 细心:运维是可以直接操作生产环境的,你的任何一个操作都有可能造成系统故障,从而影响到业务。所以在每个操作前都要细心,确认再三。你命令敲的再快也就节省那么一点时间,一旦出了问题,就是一个长久的影响。举个例子,2017年某省的项目上线,因为命令敲的快,没有确认执行的目录,将主备数据全部清空了,造成了当地2小时业务中断,手机全无信号。 进取心:运维所需要掌握的技能比较广泛,需要不断的学习,提升自我。遇到问题,做好分析记录,好记性不如烂笔头,记录整理也是自我提升的一个过程。 安全意识:运维的权限是很大的,通常会有服务器的root权限,某个api的私钥等等。针对这些数据最好使用加密存储在本地,一定不能存储在网络云盘中,生产环境高于一切。 十一、结束语 以上观点均为个人见解,有不正确的地方欢迎指正。在后面的篇幅中,我会详细介绍技术的学习,如Linux的常用命令、容器的加固等等、同时会搜集一些大厂的相关面试题。