河南新华001
职责
无论做什么运维,运维工程师最基本的职责都是负责服务的稳定性,确保服务可以7*24H不间断地为用户提供服务。在此之上运维工程师的主要工作职责如下:
质量:保障并不断提升服务的可用性,确保用户数据安全,提升用户体验。
效率:用自动化的工具/平台提升软件在研发生命周期中的工程效率。
成本:通过技术手段优化服务架构、性能调优;通过资源优化组合降低成本、提升ROI。
从产品的生命周期来看:
1. 产品发布前:负责参与并审核架构设计的合理性和可运维性,以确保在产品发布之后能高效稳定的运行。
2. 产品发布阶段:负责用自动化的技术或者平台确保产品可以高效的发布上线,之后可以快速稳定迭代。
3. 产品运行维护阶段:负责保障产品7*24H稳定运行,在此期间对出现的各种问题可以快速定位并解决;在日常工作中不断优化系统架构和部署的合理性,以提升系统服务的稳定性。
工作内容
在软件产品的整个生命周期中运维工程师都需要适时地参与并发挥不同的作用,因此运维工程师的工作内容和方向非常多:
事件管理:目标是在服务出现异常时尽可能快速的恢复服务,从而保障服务的可用性;同时深入分析故障产生的原因,推动并修复服务存在的问题,同时设计并开发相关的预案以确保服务出现故障时可以高效的止损。在这方面主要工作内容有:
问题发现:设计并开发高效的监控平台和告警平台,使用机器学习、大数据分析等方法对系统中的大量监控数据进行汇总分析,以及在系统出现异常的时候可以快速的发现问题和判断故障的影响。
问题处理:设计并开发高效的问题处理平台和工具,在系统出现异常的时候可以快速/自动决策并触发相关止损预案,快速恢复服务。
问题跟踪:通过分析问题发生时系统的各种表现(日志、变更、监控)确定问题发生的根本原因,制定并开发预案工具。
变更管理:以可控的方式,尽可能高效的完成产品功能的迭代的变更工作。在这方面主要工作内容有:
配置管理:通过配置管理平台(自研、开源)管理服务涉及到的多个模块、多个版本的关系以及配置的准确性。
发布管理:通过构建自动化的平台确保每一次版本变更可以安全可控地发布到生产环境。
容量管理:在服务运行维护阶段,为了确保服务架构部署的合理性同时掌握服务整体的冗余,需要不断评估系统的承载能力,并不断优化之。在这方面主要工作内容有:
容量评估:通过技术手段模拟实际的用户请求,测试整个系统所能承担的最大吞吐;通过建立容量评估模型分析压力测试过程中的数据以评估整个服务的容量。
容量优化:基于容量评估数据,判断系统的瓶颈并提供容量优化的解决方案。比如通过调整系统参数、优化服务部署架构等方法来高效的提升系统容量。
架构优化:为了支持产品的不断迭代,需要不断的进行架构优化调整。以确保整个产品能够在功能不断丰富和复杂的条件下,同时保持高可用性。
能力要求
基础技能:
精通shell/Python/Perl等1至2种编程语言
熟练掌握常用数据结构和算法,并能灵活运用
熟悉网络基础知识
深入理解Linux操作系统
实现价值
首先说一下“运维工程师”的概念:说到运维工程师,一般人都会认为是修电脑的,其实不然,并非只是会修电脑这样简单的技能就可行的。说白了运维就是“运行维护”,那么也就可以理解运维工程师的职能就是保障业务的正常运行并在出现问题时及时维护。
运维工程师的日常分为两种情况:
第一种,运维工程师需要他们完成一个项目产品的时候,有的时候需要加班好几个星期。
他们在产品项目完成的不同阶段会发挥不同的作用。所以其实他们的工作内容很多:
产品发布前:负责参与并审核架构设计的合理性和可运维性,以确保在产品发布之后能高效稳定的运行。
产品发布阶段:负责用自动化的技术或者平台确保产品可以高效的发布上线,之后可以快速稳定迭代。
产品运行维护阶段:负责保障产品7*24H稳定运行,在此期间对出现的各种问题可以快速定位并解决;在日常工作中不断优化系统架构和部署的合理性,以提升系统服务的稳定性。
小结:
运维工程师是一个需要二十四小时在线的职业,因为你不知道什么时候系统就需要你去维护。所以就算你休假在家,需要运维工程师的时候也需要出手。
运维工程师会有着很多业务需求,如果运维工程师能够满足业务需求,或者主动挖掘业务的痛点和改进方法,就能为业务实现更多的价值。业务由于故障引起的中断一定会造成损失,所以能在发病之前就将它修理好,这才是运维工程师的核心价值。在满足业务需求时,优先面对业务快速发展非常重要的需求,例如稳定性,部署和变更效率,容量管理。
第二种,没有项目的日常,运维工程师们都在干嘛,是不是无所事事的玩手机?
当然不是了,如果你这么做的话,会被炒鱿鱼的。那运维工程师日常工作是干嘛呢?
1,每日定时对机房内的网络服务器、数据库服务器、Internet服务器进行日常巡视,检查是否正常工作,公司的网站是否能正常访问;
2,每日巡查计算机系统各个终端电脑、打印机、复印机等设备是否工作正常,是否有不正确的操作使用,是否有带故障工作的设备;
3,每天夜间在大家都下班之后对财务软件进行自动实时备份,每周做一次物理数据备份,并在备份服务器中进行逻辑备份的验证工作;
4,每周至少对文件服务器做一次物理数据备份;还有就是处理各种有关网络的突发问题。
小结:
当然每个公司的运维工程师从事的工作是大同小异的,有的公司可能还会给运维工程师安排其他的工作。
所以,正在学习从事和想要成为运维工程师的你们,对于自己想要从事的岗位工作内容有没有多一点了解?希望以后别人问起来运维工程师是干嘛的,千万别再让别人觉得你就是个修电脑的了。
爬墙去看海
运维工程师到底是做什么呢?我给大家分析一下:
1、保障业务长期稳定运行(如网站服务器、游戏服务器等)。
2、保障数据安全可靠(如用户名密码、游戏数据、博客文章、交易数据等)。
由这两句话推演运维工程师要做些什么?
一、保障业务长期稳定运行
出一点点差错,用户就要投诉了。
1、业务跑在什么上面?
网站服务器一般是apache,nginx,tomcat等。但是真正跑通流程还需要Mysql数据库来存储用户密码及其它。很多程序都要php的解析,所以LNMP、LAMP(即nginx、apache、mysql、php)环境部署是必须掌握的技能。
2、业务出了问题怎么及时知道?
这就需要监控软件来邮件或短信来通知你,常用的有zabbix,nagios等。报警发邮件,也得一个邮件程序呀,sendmail或postfix。
3、在家里收到报警,但服务器是内网IP,怎么也得解决问题吧?
在公司搭建openvpn或pptp或openswan,在家里通过VPN拨入内网,24小时解决问题…唉,半夜爬起来解决问题也没工资。
二、保障数据安全可靠
出一点点差错,领导要找你喝茶了。
1、有时需要手动改数据库内容?
所以要会基本的Mysql数据库增删查改命令。
2、万一数据库服务器硬件坏了怎么办?
需要有个备库以备不时之需,所以需要Mysql主从复制。
3、数据库要还原怎么办?
所以需要在crond中定期全备Mysql数据,以便还原使用。如果要还原到指定时间点,还要学会Mysql增量备份与恢复。
4、如果是用户上传的图片或文件服务器坏了怎么办?
定时备份可能还不够,需要使用rsync加inotify来实时备份。以便任一时刻主服务器坏掉,也能保障所有图片有备份可以用来恢复。
5、小心黑客,要增加服务器安全性?
ssh轻易不能让外人访问,那么就设置只允许公司的IP或跳板机IP访问,这些都通过iptables来控制。
三、大性能
1、越来越多的用户来访问我们的网站,一台web服务器抗不住了怎么办?
那就需要多台web服务器来负担,但多台服务器之间怎么进行负载均衡呢,这就需要用到nginx反向代理或LVS+keepalived或haproxy+heartbeat了。
2、用户注册发表的文章与评论太多,一台数据库抗不住了怎么办?
数据库压力分为读和写,如果写抗不住,需要进行分表分库到多个服务器上。如果是读压力不够了,可以使用mysql-proxy读写分离,
来分担读的压力。更简单方便的方法,把数据库里的内容放到内存上,这就用上memcache或redis了。
3、N多用户上传下载文件,磁盘抗不住了怎么办?
把多块磁盘做成raid,或者使用分布式存储文件系统如MFS,GlusterFS来提高磁盘的读写能力。
4、网站上好多图片,总有用户反应网站加载太慢,怎么办?
这时可以把网站上的图片通过squid或varnish缓存到网站前端,尽可能的增加访问速度,当然,最好是购买商业的CDN加速。
5、运营商是个大难题,他们之间的带宽好像很小,联通IP访问我电信网站怎么就这么慢呢?
这时可以使用bind自建一个DNS服务器,把网站的DNS记录指向自建DNS服务器上,配置好解析规则,以后联通IP解析到联通网站上,
电信IP解析到电信网站上,体验就会好很多啦。
四、自动化
终极目标:跑死机器,闲死人。
1、公司新买100台服务器,公司竟然就1个移动光驱,这装系统得到什么时候?
使用kickstart或cobbler来网络远程自动安装系统吧。
2、每次装完机要优化很多内容,什么文件描述符、端口、软件安装啊,手动操作不累死去?
赶紧学会shell,将解放非常多的工作量。
3、系统装完后登陆要输入密码,这么多台啊?
使用expect吧,自动读取提示来输入密码,并执行命令。
4、要批量把新代码发布到线上服务器,怎么办?
使用saltstack或puppet或ansible吧,绝对爽歪歪。
五、其他
1、搭整套测试环境需要5台服务器,但公司穷的只有一台空闲服务器?
学会xen或kvm或docker吧,虚拟出多台服务器,就能解决资源问题了。特别是docker,强烈推荐,以后某个研发人员让你部署一套新环境,分分钟帮他解决。
2、研发人员的代码控制,权限控制,总要运维人员管呀?
svn或git,这个是肯定要有的。
现在我们在回过头来思考,运维工程师平时干些啥呢?
1、 随时解决报警故障。
2、 业务程序更新。
3、 编写一些脚本,监控或完成其他可自动完成功能。
4、 运维架构完善,部署一些用起来更方便更可靠或性能更好的开源工具以及制定运维流程规范。
5、 打杂,如调交换机,装系统,部署新环境等。
这是我的回答,谢谢大家。