学习运维之间我们要先了解什么是运维、运维的发展前景、运维的职责是什么、以及我们在公司所在的位置。
运维(Operation and maintenance)一般是指对大型组织已经建立好的bai网络软硬件的维护,其中传统的运维是指信息技术运维(IT运维)。
指单位 IT 部门采用相关的方法、手段、技术、制度、流程和文档 等,对IT 运行环境(如软硬件环境、网络环境等)、IT 业务系统和 IT 运维人员进行的综合管理。
随着信息化进程的推进,运维管理将覆盖对整个组织运行,进行支持的管理信息系统涵盖的所有内容,除了传统的IT运维,还拓展了业务运维和日常管理运维。
其参与的对象也从IT部门和人员,拓展到组织的管理层和各部门,及其相关的业务骨干。运维的最终结果是对软件运行中各种性能的维护。
`运维`通俗的理解即为`运行和维护`,来保证系统和网站的正常运行,维护它们的安全。保证`7×24小时`的正常运行,数据的稳定、不丢失,并持续进行系统及网站的优化。
负责具体的产品线运维工作,同时也需要掌握一定开发的能力,深入业务,最了解业务的痛点和问题,同时研发/优化针对产品业务需求的平台、工具和手段,能够接触到各类优秀的系统架构并有能力做出优劣对比,同时对业务的掌控决定了相应运维工程师在业务发展中的作用。长远发展是成为大型系统的架构师。
专门研发运维相关通用平台和技术,需要有一定的产品线运维经验或从产品线中拿到运维需求。对研发能力有较高的要求,对系统的设计有较严格的标准,并且能够理解用户需求,做出适合服务运维和满足运维工程师使用体验的运维产品,长远的发展是成为各个技术纵向领域的技术专家。
数据库方向是运维技术中较为特殊的一个方向,由于业务的重要性通常需要专设岗位,业界在该方向也有深厚的研究和积累。主要方向有数据库内核、云数据库等,长远发展是数据库领域的技术专家,数据库架构师。
随着容器化时代的到来,新兴的一个方向。是在普通运维上的通过容器编排来实现各个业务的部署。这需要对集群规划部署有着深刻的了解,有着严格的标准,你可能需要掌握公司所有使用到的代码,比如代码是如何进行编译的、如何正确发布、如何修改代码配置文件等。长远发展可成为k8s架构师、k8s领域技术专家
运维同学做事情的过程中通常需要协调多个RD和QA同学,对协调和推进能力要求比较高,对一些技术深度还不错,协调和推进能力比较高的同学非常适合转型管理职位,长远的发展和技术部门的管理职位一样目标是CTO、CEO。
各个方向上的工程师发展到一定阶段后,没有明确的界限,需要同时具备较强的运维、架构、编程、算法等能力,是一个要求很高要求的职业。
1、用户玩游戏登不上去、浏览网页无法访问怎么办?
运维需要保证服务器和运行的服务全年不宕机,这就需要做好监控和告警!
1、业务跑在什么上面?
网站服务器一般是apache,nginx,tomcat等。但是真正跑通流程还需要Mysql数据库来存储用户密码及其它。很多程序都要php的解析,所以LNMP、LAMP(即linux系统、nginx、apache、mysql、php)环境部署是必须掌握的技能。
2、业务出了问题怎么及时知道?
这就需要监控告警软件来邮件、短信、电话、微信等来通知你,常用的有zabbix,nagios等。报警发邮件,也得一个邮件程序呀,sendmail或postfix。
3、在家里收到报警,但服务器是内网IP,怎么也得解决问题吧?
服务器集群运行都是在内网环境运行的。在公司搭建openvpn或pptp或openswan,在家里通过VPN拨入内网。或者在公司留台电脑作为外网公司内网的跳板机,24小时解决问题。
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、有时需要手动改数据库内容?
所以要会基本的Mysql数据库增删查改命令。
2、万一数据库服务器硬件坏了怎么办?
需要有个备库以备不时之需,所以需要Mysql主从复制。
3、数据库要还原怎么办?
所以需要backup定期全备Mysql数据,以便还原使用。如果要还原到指定时间点,还要学会Mysql增量备份与恢复。
4、如果是用户上传的图片或文件服务器坏了怎么办?
定时备份可能还不够,需要使用sersync(rsync+inotfy)来实时备份。以便任一时刻主服务器坏掉,也能保障所有图片有备份可以用来恢复。
5、小心黑客,要增加服务器安全性?
ssh轻易不能让外人访问,那么就设置只允许公司的IP或跳板机IP访问,这些都通过iptables来控制。
1、公司新买100台服务器,公司竟然就1个移动U盘或光驱,一台台装系统得到什么时候?
kickstart、cobbler网络远程自动安装系统。
2、每次装完机要优化很多内容,什么文件描述符、端口、软件安装啊,手动操作不累死去?
赶紧学会shell,将解放非常多的工作量。一键优化!
3、系统装完后登陆要输入密码,这么多台啊?
使用expect吧,自动读取提示来输入密码,并执行命令。
4、要批量把新代码发布到线上服务器,怎么办?
使用saltstack或puppet或ansible吧,绝对爽歪歪。
目标:喝着茶,看着机器拼命跑!
1、新产品上线后发现有bug或者无法运行怎么办?
一台服务器测试环境:docker
每个公司基本都会有个独立的机房,部署和公司服务器相同的虚拟环境,然后先在虚拟环境进行虚拟环境压力测试,长时间运行测试等。以排除不能让产品运行的bug!可以理解为一些有体验服的游戏,体验服一般比正式服提前几个版本,以便让体验服的用户发现新产品的bug
服务器80%的问题来自人为!
公司不可能一个运维,运维人员需要权限,开发人员也要在服务器上进行代码修改。这就需要对文件和命令的限权!防止出现误操作,导致服务器宕机!
有备无患,总是没错的!!!从数据库的备份、程序的备份到系统的备份,通过备份的方式,来防止数据的丢失。以免数据的故障或其他原因,让数据都消失了,造成一场不小的“灾难”。
每一天的操作可以写个操作记录,方便以后查看!
对日常的系统进行监视和管理,避免出现不必要的问题。通常情况下,运维工程师需要根据客户系统的特点,监视各项指标。如系统资源(CPU,内存,磁盘,网络使用情况等),应用程序的响应时间即服务响应时间,日志文件及各种中间件(Apache,MySQL,Redis等等)。 全方位的监视指标,会缩短发生问题时的排查时间。
告警与监视是相连接的,在监视时候发现了问题,将问题告知于客户,现在最常见的方式就是,打电话、发短信、发邮件,现在也在逐渐发展自动化的告警系统。
当公司有新项目要上线或者版本更新时,需要我们书写上线文档,以及对上线随时会出现的问题做好应对方案。小问题线上改,大问题停止上线,平滑回滚到旧版本。优先保证服务运行。上线成功后做好实时监控和回测,进行项目二次验收!
就是对服务器系统的优化,针对现有的环境的基础上,通过技术层面或硬件设备上进行改善,对总体的系统做一个提升,提高性能及服务的响应时间。从技术层面上进行优化可以提升20%左右的性能,通过添加硬件设备得到的是100%以上的性能提升!
编写一些脚本,做一些定时任务,让机器完成一些可以自动完成的事件,可以节约大量时间,减少错误操作几率,减少损失!
运维架构完善,部署一些用起来更方便更可靠或性能更好的开源工具以及制定运维流程规范。
调制路由器、交换机。电脑装系统,部署新环境,保证虚拟环境和真实环境环境统一!
要求:
硬件基础和网络方面要有比较深的基础
懂得服务器基本的操作命令
对系统运维工作内容有一定了解
要求:
精通服务器基础操作命令
精通服务集群的搭建:熟悉Nginx、Redis、Git、MySQL、PostgreSQL、MongoDB等工具的安装和配置管理;
精通C/C++/java/python等一种或多种编程语言
精通vmwave,kvm,docker,k8s等虚拟化技术
熟悉zabbix等运维监控的安装、配置;
熟悉运维日志分析工作ELK
要求:
熟练Linux操作系统、服务器知识,具备熟练地安装、调试与维护技能;
具备常见中间件的安装、调试、优化的经验;较强的故障定位和问题解决能力;
熟悉常用虚拟化技术(kvm/Vmware),并有相关实践经验;
熟悉redis、Lnmp/Lamp、MQ、JenkinsCICD/GitlabCICD、Elasticsearch、Kafka等中间件技术;
精通grafana,prometheus,zabbix等常见运维工具;
具有一定的研发能力,偏python、PHP、shell等需要编写自动化脚本;
多并发以及大用户量下多性能拂去其系统部署和方案的制定及实施;
熟悉puppet、ansible、saltstack、 zabbix、nagios、cacti 等产品的部署和故障处理;
熟悉运维日志分析工作ELK
要求:
1、熟悉linux(redhat,centos),unix操作系统
2、精通Linux/Windows环境、两种以上的流行的数据库如Oracle,Mysql,SQLServer等设计、维护、调优及备份恢复经验;充分理解数据库设计,熟悉一定的数据架构设计,数据库分库分表规则;
3、精通主流数据库迁移过程的数据补齐方案;
4、熟悉关系型数据库设计流程及规范,精通SQL&PL/SQL的编程,并能熟练使用相关监控、分析、开发和管理工具;
5、具备ORACLE 高可用/复写技术(RAC,DataGuard,GoldenGate),MySQL主从式架构配置管理和备份恢复策略经验等;
6、有云数据库的使用经验优先。
要求:
1、熟悉TCP/IP,http,dns协议的工作原理
2、 熟悉Linux操作系统的自动化部署、维护、故障排查
3、 熟悉Linux系统下各种服务配置及工作原理,例如MySQL 、Nginx/Tengine、Tomcat、redis、Memcached、LVS、keepalived等
4、熟悉Tomcat、Java应用的配置维护及优化
5、精通docker容器技术和Kubernetes
6、熟悉Zabbix监控,并且可根据需求自定义监控项,优化误报率;
7、熟悉elk,jenkins 具有持续ci/cd经验优先;
8、熟悉Salt-Stack、Ansible批量化服务器管理工具,具有批量服务器管理能力
9、熟练掌握Shell、python、golang至少一种;
10、 熟悉混合云架构规划和业务运维场景
11、 熟悉常见应用配置及优化,如Lvs/Nginx/Haproxy/MySQL/DNS/Redis/MongoDB/kafka/Es/ZK等;
要求:
1、精通K8S容器编排基本概念和原理;
2、熟悉K8S容器编排Calico、Flannel等网络组件的工作原理;
3、熟悉K8S容器编排的基本组件,包含但不限于prometheus、grafana、efk、traefik、jenkins、helm等;
4、熟悉Golang或Python语言之一,有实际项目或工具开发经验;
5、了解istio、native、tekton,对智能运维有自我认知和理解;
6、了解ceph分布式存储系统,有实际运维经验优先。
7、从事过应用大规模容器化并具有应用编排经验。
ps:上面都是在boss直聘和拉钩招聘上找到的,好奇的可以自己去看看了解一下。因地域不同、资薪可能有些出入。互联网运维行业是一个不看资历的地方,他看中就是你的工作能力。你的能力越高,会的越多。你得到的就越多!