【王老师说运维】:运维开发工程师在线评测:http://www.gtalent.cn/exam/interview/nsYteJ5wFfWkMdb2
因为最近我接到客户的一个高级运维开发工程师的岗位需求,索性将这个职位最近接触到的知识做了一次整理。
一般这类岗位,与我们普通人的日常肯定是非常少见的,理解的难度相对比较高。
岗位职责
Linux环境服务器调优,故障处理,日常巡检
监控体系优化,开发
制定并执行线上应用扩容、容灾方案
自动化运维系统开发
处理机房、多地公办互联网络故障
任职资格
统招本科以上学历。
熟练使用shell、python,有Django开发经验优先.有海量高并发环境下的独立运维经验,运维过的服务器规模至少在70台以上
较深度掌握linux操作系统,shell达到非常熟悉程度,在无调试环境下能写出一般的报警脚本
python开发熟练,有至少一个以上项目开发经验,熟悉django/flask web开发框架优先
安全/数据库(mysql)/虚拟化和容器/自动化运维, 至少具备二项在海量环境下的独立运维能力,并有过至少2年以上的实战经验
掌握基本网络原理,具备实际动手组网能力
熟悉一种虚拟化方案(KVM/VMWARE)或者容器(docker)方案
掌握常见开源服务nginx,tomcat,redis,mysql,zabbix,nagios,ldap的部署和配置
了解ansible,saltstack,puppet其中至少一种自动化运维工具
关键点
Python(Django/Flask)/Shell脚本
Linux操作系统
Mysql数据库
虚拟化技术
容器技术
自动化运维
70台服务器规模
海量高并发
今天所讲的运维是基于服务器软件的层次。
涉及硬件层次一般会有2类,一类叫网络运维工程师(管网络),一类叫系统运维工程师(管机房)
大约300份简历之后,大约整理了下图。
技能树
技术关键字解析
脚本:Shell是必备的,但这些年Python用的也是非常多,目前一般企业都会有Python写脚本的要求,至于后面使用Django/Flask,主要是希望能够开发完整的自动化脚本工具
自动化运维:目前比较新的是Ansible和SaltStack。前者目前使用的人群是最多的。
以Ansible为例。
官方的title是“Ansible is Simple IT Automation”——简单的自动化IT工具。这个工具的目标有这么几项:
自动化部署APP;
自动化管理配置项;
自动化的持续交互;
自动化的(AWS)云服务管理.
人话:
我们日常安装软件的时候,会选择安装路径,然后一直点击下一步。甚至有时候我们在windows7里面安装某些软件时,总是会强制我们要安装一个framework4.0之类的东西。
假设,现在有10000台win7电脑需要安装这样的软件,你是不是需要在这10000台电脑上点很多次下一步和安装framework。
Ansible相当于现在有一个工具。你只要点击按钮,就完成了10000台win7的软件安装。
作为招聘者,其实下次你可以问求职者一个问题:
请描述一个Ansible和Saltstack的区别?
为什么公司使用的是Ansible而不是Saltstack?
负载均衡、高可用、高并发
并发,是使用技术手段使得系统可以并行处理很多的请求。
假设,目前你需要从天河开车去往番禺。
每一台车的通行,就是我们据说的请求。
并发,相当于同一时间经过这条路的车辆通行。
高并发,则是要求这条路同时允许通行的车辆多一些,且不堵车(理想状)。
要做到高并发,要么把道路加宽,想当于增加服务器的配置;要么再增加一条从天河前往番禺的新路,想当于增加服务器的数量。
高可用,是系统经过专门的设计,从而减少停工时间,保证其服务的可用性。
我们平常听到某某服务器宕机之类的,就是其服务状态变成不可用了。
分享一个非常形象的例子:
2兄弟开早餐店,生意不大。每天早上7点到9点之间客户非常多,且不中断。为了保证2个小时内这个早餐铺能够持续为上班族提供服务,2兄弟用了以下几个方法:
平常老大做生意,老二休息。哪天老大突然生病或者有事,老二出来顶上。(双机热备)
平常老大做生意,老二帮工。哪天老大突然生病或者有事,老二立马顶上。(双机双工)
平常老大卖包子,老二卖豆浆。哪天老大突然生病或者有事,老二一边卖豆浆一边卖包子。(双机互备)
负载均衡:
它其实是一种算法,是实现高可用的算法。
User相当于我们的上班族,Database Server 相当于早餐店。
上图状态是,早餐店是一个人打理,如果突然生病或者有事,只能关店。这时候,就会出现类似于双11或双12,你们提交不了订单,或者提交订单错误。
相当于2兄弟开早餐的状态,双机热备状态。
相当于双机双工。
相当于双机互备。
LVS/Nginx/Haproxy:
此3者是目前使用最广泛的三种软件负载均衡软件。
目前关于网站或B/S架构的应用比较流行的架构方案是:
Web 前端采用 Nginx/HAProxy+Keepalived 作负载均衡器
后端采用 MySQL数据库一主多从和读写分离,采用 LVS+Keepalived 的架构
其实,于我们而言只要理解到负载均衡在不同业务层次里面使用不同的软件即可。
为什么会有这样的使用分层?
说白了就是Nginx,不太适合在后端使用,而LVS又不太适合在前端使用。
我们看到不论是哪个层次,都会涉及到Keepalived。
keepalived:它是集群管理中保证集群高可用的一个服务软件。以VRRP协议为实现基础的,VRRP全称Virtual Router Redundancy Protocol,即虚拟路由冗余协议。
虚拟路由冗余协议,可以认为是实现路由器高可用的协议,即将N台提供相同功能的路由器组成一个路由器组,这个组里面有一个master和多个backup,master上面有一个对外提供服务的vip(该路由器所在局域网内其他机器的默认路由为该vip),master会发组播,当backup收不到vrrp包时就认为master宕掉了,这时就需要根据VRRP的优先级来选举一个backup当master。这样的话就可以保证路由器的高可用。
zookeeper: 一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。
两者实现的作用是类似的,用于监控服务器状态,并根据状态调整服务器以更好的提供可用服务。
通俗解释:
他们相当于公司的老板。
假设Keepalived是k老板,zookeeper是z老板。他们手下分别有100个员工。
从主动被动角度来讲,keepalived是勤快老板,zookeeper是懒老板。
k老板,会经常问员工,你最近状态工作量饱和吗?如果不饱和,就会给你派活;如果过于饱和就会把你的活儿分给其他同事干。
z老板从来不过问这个问题,他的员工都每天定时会向其汇报工作,他会根据汇报情况再做调整。
从公平性性来讲,k老板会更好说话些,他会根据工作量和工作能力高低,做调整。但z老板则认为人人平等更重要。
从专业度来讲,k老板是新管理者,z老板是资深管理者。z老板电脑中存储了每名员工的数据,根据数据判断员工的能力,再做新的调整。k老板则更多的是凭感觉。
memcache:在专门的机器的内存里维护一张巨大的 hash 表,来存储经常被读写的一些数组与文件,从而极大的提高网站的运行效率。
类似于百度输入法这个懒人短语功能,把你经常使用到的短语(功能或数据)存在一个地方,方便你更快调动使用。毕竟打『现在我有点忙,稍后联系你。』这11个字的时间和点击屏幕的次数肯定远远高于你直接调出懒人短语这个功能。
监控
nagios/zabbix/cacti,这些是常用用于服务器状态监控的软件。通过这样的软件,我们可以随时看到哪台服务器的哪个地方出现异常,立马去检查故障。
这有点像是在我们自己的电脑上安装的鲁大师,随时监控我们的CPU使用情况,内存使用率,硬盘使用率等信息。
- 虚拟化、容器
先说说虚拟化中提及的几个术语,KVM/VMWare/Xen,这实际上是三种虚拟机软件。
虚拟机实际上是在一个硬件环境(比如说电脑、服务器)用虚拟机软件虚拟一个硬件环境,这个环境和硬件环境一样,有CPU,有内存,有硬盘,有显卡,有网卡等设备。这个概念非常好理解,相当于在一台电脑上安装不同的虚拟机,这样你就可以同时使用2种不同的系统,为不同的应用提供服务。比如,使用mac电脑的小伙伴,有些人电脑上会安装virtualbox这个软件,在这个软件里面安装win系统 ,用来安装一些只能在win下面才能运行的软件。
路径类似于上图中的虚拟化模式,最终路径还是常规模式。虚拟化形式大约减少我们购买硬件的数量和维护成本。
容器在英文里面就是我们所说的docker。实际上,他相当于一个集装箱技术。一个应用程序或软件服务,对应一个容器。容器的大小和规格是固定的,要用的时候拿来即可。因为其规格统一,因此在安装和摆放的时候会比较节约空间。
当然有些时候,会虚拟化和容器同时使用。
举一个生动例子:
假设有一个码头,主要负责苹果、大米、汽车、煤炭的货物出入港口。
常规模式,相当于各种物资在实际的场地里面。货到了之后,通知工人一个一个的搬到仓库里面去。
虚拟化模式,划分了不同的物品物资摆放区域(虚拟区域),通知工人货到了,去取货。食品工人,去搬食品;汽车工人去搬汽车;煤炭工作去搬煤炭。
docker模式,每一个物品都放在一个集装箱里面。货到了之后,苹果吊车直接去把苹果集装箱搬走;大米吊车搬走大米集装箱;汽车集装箱搬走汽车集装箱;煤炭吊车搬走煤炭集装箱。
虚拟化+docker,则相当于把对应的集装箱放在指定的区域,避免4台吊车同时过来影响大家的工作。
K8S:
全称kubernetes,其实是容器的管理工具,用来更好的管理容器的安装、布置。
它和容器之间的关系,类似于zookeeper/keepalived与服务器之间的关系。
其他的技术名词相对来说,大家日常工作中接触得也比较多。
关于企业在招聘这类岗位时有个小建议。
类似运维更注重实战经验,因此学历其实往往并不会对这类人才有太大的影响,反而很多大专毕业出来的人,其实战能力比较强,解决问题的能力会更好。因此,建议不要过于纠结于第一学历是否为统招本科,而错过了一些优秀的人,反而招一些绣花枕头。
【王老师说运维】:运维之linux基础入门实战