运维工程师是从一个呆逼进化为苦逼再成长为牛逼的过程,前提在于你要能忍能干能拼,还要具有敏锐的嗅觉感知前方潮流变化。如:今年大数据,人工智能比较火……(相对表示就是 Python 比较火)

之前写过运维基础篇,发现对很多人收益挺大,接下来也写下关于这4年多的运维实践经验,从事了2年多游戏运维,1年多安全运维,1年大数据运维,相关行业信息不能算非常精通,但是熟悉和熟练还是相对可以的。

初级篇

linux运维人员常用工具拓扑详见:

1.rsync工具

很多地方经常会用到rsync工具,实施几台服务器的同步效果。我们公司就是使用这个工具完成服务器的游戏的服务端和客户端同步,有几个文章例子:

  • rsync 强化技术(手动修改端口开启防火墙的情况下)并且通过脚本只同步需要的服务器http://chenhao6.blog.51cto.com/6228054/1322579
  • inotify+rsync+mutt+msmtp 实现linux文件或者目录自动更新并且实现发邮件给管理员http://chenhao6.blog.51cto.com/6228054/1298375

2.网络服务

服务有很多种,每间公司都会用到不同的,但基础的服务肯定要掌握,如FTP、DNS、SAMBA、邮件, 这几个大概学一下就行,LAMP和LNMP是必须要熟练,我所指的不是光会搭建,而是要很熟悉里面的相当配置才行,因为公司最关键的绝对是Web服务器, 所以Nginx和Apache要熟悉,特别是Nginx一定要很熟悉才行,至少有些公司还会用Tomcat,这个也最好学一下。

其实网络服务方面不用太担心,一般公司的环境都已经搭建好,就算有新服务器或让你整改,公司会有相应的文档让你参照来弄,不会让你乱来的,但至少相关的配置一定要学熟,而且肯定是编译安装多,那些模块要熟悉一下他的作用,特别是PHP那些模块。

这面2点只是基础,也是必要条件,不能说是工具,以下才是真正的要掌握的工具。

  • Samba文件共享服务(共享脚本 让你工作更轻松)http://chenhao6.blog.51cto.com/6228054/1218028
  • Linux web服务安装apache 思路 (源码编译,自己定义服务)http://chenhao6.blog.51cto.com/6228054/1223484
  • FTP(持虚拟用户,并且每个虚拟用户可以具有独立的属性配置)http://chenhao6.blog.51cto.com/6228054/1219713
  • linux 下构建DHCP服务器http://chenhao6.blog.51cto.com/6228054/1217232

3.脚本语言

Shell脚本和另一个脚本语言,Shell是运维人员必须具备的,不懂这个连入职都不行,至少也要写出一些系统管理脚本,最简单也得写个监控 CPU,内存比率的脚本吧,这是最最最基本了,别以为会写那些猜数字和计算什么数的,这些没什么作用,只作学习意义,写系统脚本才是最有意义,而另一个脚 本语言是可选的,一般是3P,即Python、Perl和PHP,PHP就不需要考虑了,除非你要做开发,我个人建议学Python会比较好,难实现自动 化运维,Perl是文本处理很强大,反正这两个学一个就行了。

  • Shell(一) 入门到复杂 自己做的各种脚本实例与解释http://chenhao6.blog.51cto.com/6228054/1230337
  • Shell(二)入门到复杂 脚本实例(计算器)http://chenhao6.blog.51cto.com/6228054/1232070

4.sed和awk工具

这两个工具必须要掌握,同时还要掌握正则表达式,这个就痛苦了,正则是最难学的表达式,但结合到sed和awk中会很强大,在处理文本内容和过滤Web内容时十分有用,不过在学Shell的同时一般会经常结合用到的,所以学第3点就会顺便学第4点。

  • sed 简明教程https://coolshell.cn/articles/9104.html

5.文本处理命令

sort 、tr、cut、paste、uniq、tee等必学,也是结合第3点脚本语言时一并学习的。

6.数据库

首选MySQL,别问我为什么不学SQL Server和Oracle,因为Linux用得最多绝对是MySQL,增删改查必学,特别要学熟查,其它方面可能不太需要,因为运维人员使用最多还是查,哪些优化和开发语句不会让你弄的。

  • MySQL(手动编译详细思路,以及增删改查、授权、备份还原)http://chenhao6.blog.51cto.com/6228054/1225129

7.防火墙

防火墙也算是个难点,说难不难,说易不易,最重要弄懂规则,如果学过CCNA的朋友可能会比较好学,因为iptables也有NAT表,原理是一样的,而FILTER表用得最多,反正不学就肯定不合格。

  • 防火墙(一)主机型防火墙http://chenhao6.blog.51cto.com/6228054/1239306
  • 防火墙(二)SNAT和DNAThttp://chenhao6.blog.51cto.com/6228054/1240714

8.监控工具

我个人建议,最好学这3个:Cacti,Nagios,Zabbix,企业用得最多应该是Nagios和 Zabbix,反正都学吧,但Nagios会有点难,因为会涉及到用脚本写自动监控,那个地方很难。

  • CentOS 6.2+Nginx+Nagios,手机短信和QQ邮箱提醒http://chenhao6.blog.51cto.com/6228054/1323192
  • 服务器集中检测Cactihttp://chenhao6.blog.51cto.com/6228054/1249302

9.集群和热备

这个很重要,肯定要懂的,但到了公司就不会让你去弄,因为新手基本不让你碰,集群工具有很多,最好学是LVS,这是必学,最好也学Nginx集群、 反向代理,还有热备,这个就更多工具能实现了,像我公司是自己开发热备工具的。MySQL热备也要学,就是主从复制,这个要学懂整个流程一点也不容易,只 照着做根本没意思。

  • MySQL主从同步,双主同步,如果服务器意外挂机,不同步怎么办http://chenhao6.blog.51cto.com/6228054/1325247
  • MySQL高性能压力测试(总结了好久)http://chenhao6.blog.51cto.com/6228054/1314418
  • Nginx 缓存配置及报错解决http://chenhao6.blog.51cto.com/6228054/1329106

10.数据备份

工具有很多,但至少要把RAID的原理弄懂,特别是企业最常用的1+0或0+1,自己做实验也要弄出来,备份工具有很多,如tar、dump,最好多了解一下。

学会以上10点,应该可以入门了,有些技术会比较难学,例如Apache和Nginx中还有些很重要的技术,如系统调优、服务优化、程序优化,这些 在没接触工作前很难学习到的,所以先把这10点学了吧,估计要学熟至少3个月不止,脚本部分会交很吃力了,我建议是先学熟shell,等工作后再学另一门 脚本语言,这样会比较好。

以上就是踏入linux运维工程师需要掌握的工具,还有很多工具要掌握的,但在学习环境中是很难学到,最后我再提醒一下,这里所指的工具相当于技 能,而不是像Windows或Ubuntu的图形化工具,还有学linux就别装图形界面,这样虚拟机就不用吃太多内存,而且绝对不建议在真机上装 Linux,根本达不到学习效果。

中级篇

这部分来自我自己的面试经历和面试别人的经历总结。先附上运维思路拓扑图:

有些人认为,其实运维就是部署某个软件,设置些基础功能,就算会运维了。

举个例子:安装LAMP,LNMP,就感觉部署方法我都掌握了。其实网上大多数都有一键安装脚本啥的根本没有啥 技术含量,在面试官眼里,这些都不是你的亮点。基本到了公司一般环境架构都是部署好的,很少需要你去变动环境架构。就算你安装好 LNMP 架构你熟悉里面的原理吗?熟悉 Nginx 优化吗?熟悉 MySQL 优化吗?

再举个例子:我面试遇到的问题,面试官问你既然熟悉 LNMP 架构,那么 Nginx 反向代理的作用。

你应该不是说出懂这个软件和配置,你尽可能的说怎么优化,怎么深入提高网站性能。

  • 使用反向代理可以理解为7层应用层的负载均衡,使用负载均衡之后可以非常便捷的横向扩展服务器集群,实现集群整体并发能力、抗压能力的提高。
  • 通常反向代理服务器会带有本地 Cache 功能,通过静态资源的 Cache,有效的减少后端服务器所承载的压力,从而提高性能。

下面说说运维在工作中需要掌握的核心技术。注意,这是在工作中掌握的,在学习中很难掌握。

1.第一条最主要的排错

  • 分析部分程序不能运行或没有按预想结果运行的原因,对程序运行跟踪,查看系统调用的过程。
  • 较深入的系统瓶颈点分析。

查看剩余内存:

ree -m

#-/+ buffers/cache:       6458       1649

#6458M为真实使用内存  1649M为真实剩余内存(剩余内存+缓存+缓冲器)

#linux会利用所有的剩余内存作为缓存,所以要保证linux运行速度,就需要保证内存的缓存大小

系统信息:

硬件信息:

  • 使用分析系统分析web日志(如逆火软件)
  • 分析系统性能瓶颈点(IO/Memory/CPU,常用工具,top命令中shift组合键的特殊用Sar/vmstat/iostat/ipcs)

日志管理常用命令:

2.优化

优化可以说是运维最吃香的技能,基本会优化的运维普遍工资很高,而且优化是要承担风险的,并不是网上搜个文章改一下配置文件或者参数就叫优化了,这样很容易造成宕机。

优化是根据实际的现场环境硬件各个参数进行部分优化,提高软件性能和网站性能。这个我只能讲半知半解,当时优化MySQL和Tomcat参数也是根据网上文章和官网文档查找参数在虚拟机上测试然后查看性能。

成本优化,性能优化。这里我给出 Tomcat 优化JVM参数(做过相应测试才放到现场环境的):(记住无监控不调优)

-标准参数,所有jvm都应该支持

-X 非标,每个jvm实现都不同

-XX 不稳定参数,下一版本可能会取消

serial collector 单线程 序列化

parallel collector 多线程

启动 jvisualvm.exe 监控 dump 内存溢出

-Xms:初始堆大小

-Xmx:最大堆大小

-Xss:线程栈大小

-XX:NewSize=n:设置年轻代大小

-XX:NewRatio=n:设置年轻代和年老代的比值,如3, 标示年轻代:年老代比值1:3,年轻代占整个年轻代年老代和的1/4

-XX:SurvivorRatio=n:年轻代中的eden区与2个Survivor区的比值。

-XX:MaxPermSize=n:设置持久代大小

收集器设置

-XX:+UseSerialGC:设置串行收集器

-XX:+UseParallelGC:设置并行收集器

-XX:+UseConcMarkSweepGC:设置并发收集器

回收统计信息

-XX:+PrintGC

-XX:+PrintGCDetails

-Xloggc:filename

Tocmat 优化,确认有几个JVM虚拟机

set JAVA_OPTS=

-Xms4g

-Xmx4g

-Xss512k

-XX:+AggressiveOpts 进攻型的优化选项,所有优化项都加上

-XX:+UseBiasedLocking 优化锁,基本都要选上,偏执锁

-XX:permSize=64m 原始区大小,最大300m 类多就设置大一点

-XX:MaxPermSize=300m

-XX:+DisableExplicitGC //System.gc() 不显示调用gc

-XX:+UseConcMarkSweepGC 使用cms缩短相应时间,并发收集,低停顿

-XX:+UseParNewGC   并行收集新生代的垃圾

-XX:+CMSParallelRemarkEnabled 在使用UseParNewGC的情况下,尽量减少mark的时间

-XX:+UseCMSCompactAtFullCollection 使用并发收集器时,开启对年老代的压缩,使碎片减少

-XX:LargePageSizelnBytes=128m 内存分页大小对性能的提升

-XX:+UseFastAccessorMethods get/set方法转成本地代码

-Djava awt headless=true  修复linux下tomcat处理图标时可能产生的bug

内存调优:

Tomcat 前任何参数没参加大概每秒605,调优后大概每秒435,接近3倍的结果。

3.开发技能

优选 Shell 和 Python,现在 Shell 无法满足你的需求或者效率很低,那么选择自动化 Python 是最好的选择。现在普遍招聘需求要求,会写 Shell 或者 Python、Perl 脚本,个人选择还是选 Python。

Python 这门语言上手比较快,容易理解。在服务器管理工具上非常丰富,配置管理(Saltstack) 批量执行(Fabric、Saltstack) 监控(Zenoss、Nagios 插件) 虚拟化管理( python-libvirt) 进程管理 (Supervisor) 云计算(OpenStack) …… 还有大部分系统 C 库都有 Python 绑定。

对于流程确定的事情,最终一定是纳入系统管理的体系,写成程序,成为系统的一部分。而不是无法复用游离与整体的各种脚本。

随着云计算时代的来临,中小型公司不需要运维了,大型公司没有工程开发能力的运维,是没有竞争力的。

最重要的学好 Python 可以涨工资,可以涨工资,可以涨工资。(重要的事情说三遍~)目前本人也是在学 Python,正在把以前 Shell 脚本的实例转换成 Python 脚本。

推荐《Python笔记:Python实例手册》

下载链接:http://down.51cto.com/data/2329173

意识篇

1.安全意识

运维人员的权限很大,所以一定要保证帐号/私钥的安全。

  • 最好使用加密工具存储。比如Truecrypt、lpassword。
  • 基于本地存储。切勿用网盘,也不建议用lastpass等
  • SSH私钥添加密码

2.磨刀意识

关于任何操作配置,最好先搞明白操作或配置的原理,然后再去操作。应一句话叫做“磨刀不误砍柴功”,而且对于类似的操作可以举一反三。

3.计划意识

复杂的变更操作比如多台主机以及牵涉到san存储,最好先作 操作计划,写计划文档,详细致每条命令,然后请高手帮忙审核。 这样能最大程度使整个操作过程安全。如果是重要的客户业务系统,操作最好有回退方案,而一旦变更失败,客户可以在短时间内将业务回退。

4.记录分享意识

遇到自己认为较特殊的案例时,记得要写案例过程及分析的文档。也方便自己以后翻看,或者和其他兄弟分享,作知识的传播以便于大家以后都能少走弯路。

5.监控意识

运维来说,监控是非常重要的,监控是发现系统各种异常的眼睛,所以运维应该和监控紧密配合。

6.业务意识

尽量了解维护的各主机上业务类型,以及各主机业务之间的关联性。因为任何维护工作都是为主机能提 供业务服务的,当某业务中断,能最快的知道与此业务相关的主机群,从而缩小故障排查范围,最快定位故障。并不是你技术很牛,学的技术很多很熟,就不代表你 不需要运维意识,其实领导很看重运维意识的,例如有没有做好备份、权限分配问题、平台测试情况、故障响应时间等,这些都是意识,而不是你学了很多技术自认 大牛了,平台发现故障你又没什么大不子,以为很简单的问题喜欢处理就处理,不需要向其它部门反馈等,领导不是看你的技术如何,而是看你的运维意识如何,你 没运维意识,技术再牛也没用,只会让其它部门的人跟你不协调。要知道做IT这行是苦逼的,需要无尽的学习,不学习只会被淘汰,不想被年轻的淘汰,就只能不 断增值自己,不然不是你工资无法提升,而是你无法再从事这行。这个世界,在悄悄惩罚不改变的人……

linux运维升级路线的更多相关文章

  1. 其它综合-运维老鸟分享linux运维发展路线规划

    运维老鸟分享linux运维发展路线规划 linux 运维发展路线常见的就是下面两条路线: 第一条:运维应用-->系统架构-->运维开发-->系统开发 第二条:运维应用-->应用 ...

  2. linux运维需要掌握什么知识?linux运维学习路线

    linux运维需要掌握什么知识?这个问题算是老生常谈了,但是本人认为知道需要掌握什么知识不是重点,重点是我们需要知道运维是做什么的?再来根据工作需求去讨论需要学习什么知识才是正途,须知知识是学不完的, ...

  3. linux运维发展路线

  4. Linux运维工程师是什么鬼?

    第一部分:定义 运维工程师,字面理解运行维护. linux运维即linux运维工程师,集合网络.系统.数据库.开发.安全工作于一身的“复合性人才”.   除了传统IT运维部分,运维人员还是管理制度.规 ...

  5. linux 运维工程师发展路线

    linux运维发展常见的就是下面两条路线:第一条:运维应用-->系统架构-->运维开发-->系统开发第二条:运维应用-->应用dba-->架构dba-->开发DBA ...

  6. 从苦逼到牛逼,详解Linux运维工程师的打怪升级之路

    做运维也快四年多了,就像游戏打怪升级,升级后知识体系和运维体系也相对变化挺大,学习了很多新的知识点. 运维工程师是从一个呆逼进化为苦逼再成长为牛逼的过程,前提在于你要能忍能干能拼,还要具有敏锐的嗅觉感 ...

  7. Linux 运维工程师学习成长路线上要经历哪四个阶段?

    之前曾看到一篇新闻,Linux之父建议大家找一份基于Linux和开源环境的工作.今天就来聊一聊我的想法,本人8年Linux运维一线经验,呆过很多互联网公司,从一线运维做到运维架构师一职,也见证了中国运 ...

  8. Linux运维工程师成长路线及应实现的目标

    作为一名运维工程师,需要学习的东西非常多,在学习的过程中也没有任何捷径可言,必须一步一个脚印地学习.积累才能把个人技能提升到相应的高度.根据目前流行的发行版及国际流行的Linux认证,红帽认证和LPI ...

  9. Linux运维工程师学习成长路线

    不过大家的留言都很精彩,希望大家也可以去留言区逛一逛~~ 好在这不是最后一期送书,之前已经有了好多活动,小编一定继续为大家多送些福利. 希望大家可以一如既往的关注脚本之家,支持爱你们的小编,共同进步! ...

随机推荐

  1. virtualbox+vagrant学习-2(command cli)-14-vagrant reload命令

    Reload 格式: vagrant reload [vm-name] 其等价于在运行vagrant up命令后接着运行vagrant halt 要使在Vagrantfile文件中所做的更改生效,通常 ...

  2. Node.js框架之Egg.js

    Node.js是我前段时间接触的一个JavaScript的服务端语言,感觉还是挺有意思的. 也许有人说,你学这么多,学的过来吗?或者说学的太多,专而不精,有必要这样吗? 其实,我个人认为,自从我进入I ...

  3. c++——默认参数、函数占位参数

    2 默认参数 /*1 C++中可以在函数声明时为参数提供一个默认值, 当函数调用时没有指定这个参数的值,编译器会自动用默认值代替 */ void myPrint(int x = 3) { printf ...

  4. servlet使用

    一.使用IDEAL创建项目 1) 2) 3) 4) 5) 6) 7) 8) 9) 二.路径介绍: 配置文件: servlet配置文件: package ser_Test; import javax.s ...

  5. sed 替换有单引号的行

    cat test.txt $config['useragent'] = 'Roundcube Webmail'; // Hide version number//$config['username_d ...

  6. bapi获取物料的可用数量及MRP信息(MD04)

    需求:在报表里面添加可用数量字段,数据来源于MD04. 使用到的bapi:MD_STOCK_REQUIREMENTS_LIST_API 这个bapi可以查看到MRP信息以及可用数量. bapi需要的参 ...

  7. Oracle透明网关访问MySQL数据库

    针对oracle数据库不同实例之间的数据访问,我们可以直接通过dblink访问,如果oracle数据库想访问mysql/sqlserver等数据库的数据,我们可以通过配置oracle透明网关实现异构数 ...

  8. jQuery----五星好评实现

    在美团.淘宝.京东等网页上,有许多商品.服务评价页面,五星好评功能很常见,本文利用jQuery实现五星好评功能. 案例图片:                                       ...

  9. linux-2.6内核驱动学习——jz2440之按键

      //以下是学习完韦东山老师视屏教程后所做学习记录中断方式取得按键值: #include <linux/module.h> #include <linux/kernel.h> ...

  10. Scala_标识符

    用于对象,类,变量和方法的名称称为标识符.关键字不能用作标识符,标识符区分大小写. 类名首字母大写 方法名称第一个字母小写 程序文件名应该与对象名称完全匹配 1.字母数字标识符 以字母或下划线开头,后 ...