原文地址:http://www.javashuo.com/article/p-yxclekrn-mo.htmlhtml
初级篇java
linux运维人员经常使用工具拓扑详见:python
1rsync工具linux
不少地方常常会用到rsync工具,实施几台服务器的同步效果。咱们公司就是使用这个工具完成服务器的游戏的服务端和客户端同步,有几个文章例子:ios
http://chenhao6.blog.51cto.com/6228054/1322579web
http://chenhao6.blog.51cto.com/6228054/1298375面试
2网络服务正则表达式
服务有不少种,每间公司都会用到不一样的,但基础的服务确定要掌握,如FTP、DNS、SAMBA、邮件, 这几个大概学一下就行,LAMP和LNMP是必需要熟练,我所指的不是光会搭建,而是要很熟悉里面的至关配置才行,由于公司最关键的绝对是Web服务器,因此Nginx和Apache要熟悉,特别是Nginx必定要很熟悉才行,至少有些公司还会用Tomcat,这个也最好学一下。shell
其实网络服务方面不用太担忧,通常公司的环境都已经搭建好,就算有新服务器或让你整改,公司会有相应的文档让你参照来弄,不会让你乱来的,但至少相关的配置必定要学熟,并且确定是编译安装多,那些模块要熟悉一下他的做用,特别是PHP那些模块。
这面2点只是基础,也是必要条件,不能说是工具,如下才是真正的要掌握的工具。数据库
http://chenhao6.blog.51cto.com/6228054/1218028
http://chenhao6.blog.51cto.com/6228054/1223484
http://chenhao6.blog.51cto.com/6228054/1219713
http://chenhao6.blog.51cto.com/6228054/1217232
3脚本语言
Shell脚本和另外一个脚本语言,Shell是运维人员必须具有的,不懂这个连入职都不行,至少也要写出一些系统管理脚本,最简单也得写个监控CPU,内存比率的脚本吧,这是最最最基本了,别觉得会写那些猜数字和计算什么数的,这些没什么做用,只做学习意义,写系统脚本才是最有意义,而另外一个脚本语言是可选的,通常是3P,即Python、Perl和PHP,PHP就不须要考虑了,除非你要作开发,我我的建议学Python会比较好,难实现自动化运维,Perl是文本处理很强大,反正这两个学一个就好了。
http://chenhao6.blog.51cto.com/6228054/1230337
http://chenhao6.blog.51cto.com/6228054/1232070
4sed和awk工具
这两个工具必需要掌握,同时还要掌握正则表达式,这个就痛苦了,正则是最难学的表达式,但结合到sed和awk中会很强大,在处理文本内容和过滤Web内容时十分有用,不过在学Shell的同时通常会常常结合用到的,因此学第3点就会顺便学第4点。
https://coolshell.cn/articles/9104.html
5文本处理命令
sort 、tr、cut、paste、uniq、tee等必学,也是结合第3点脚本语言时一并学习的。
6数据库
首选MySQL,别问我为何不学SQL Server和Oracle,由于Linux用得最多绝对是MySQL,增删改查必学,特别要学熟查,其它方面可能不太须要,由于运维人员使用最多仍是查,哪些优化和开发语句不会让你弄的。
http://chenhao6.blog.51cto.com/6228054/1225129
7防火墙
防火墙也算是个难点,说难不难,说易不易,最重要弄懂规则,若是学过CCNA的朋友可能会比较好学,由于iptables也有NAT表,原理是同样的,而FILTER表用得最多,反正不学就确定不合格。
http://chenhao6.blog.51cto.com/6228054/1239306
http://chenhao6.blog.51cto.com/6228054/1240714
8监控工具
我我的建议,最好学这3个:Cacti,Nagios,Zabbix,企业用得最多应该是Nagios和 Zabbix,反正都学吧,但Nagios会有点难,由于会涉及到用脚本写自动监控,那个地方很难。
http://chenhao6.blog.51cto.com/6228054/1323192
http://chenhao6.blog.51cto.com/6228054/1249302
9集群和热备
这个很重要,确定要懂的,但到了公司就不会让你去弄,由于新手基本不让你碰,集群工具备不少,最好学是LVS,这是必学,最好也学Nginx集群、反向代理,还有热备,这个就更多工具能实现了,像我公司是本身开发热备工具的。MySQL热备也要学,就是主从复制,这个要学懂整个流程一点也不容易,只照着作根本没意思。
http://chenhao6.blog.51cto.com/6228054/1325247
http://chenhao6.blog.51cto.com/6228054/1314418
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 反向代理的做用。
你应该不是说出懂这个软件和配置,你尽量的说怎么优化,怎么深刻提升网站性能。
下面说说运维在工做中须要掌握的核心技术。注意,这是在工做中掌握的,在学习中很难掌握。
1第一条最主要的排错
查看剩余内存:
free -m
#-/+ buffers/cache: 6458 1649
#6458M为真实使用内存 1649M为真实剩余内存(剩余内存+缓存+缓冲器)
#linux会利用全部的剩余内存做为缓存,因此要保证linux运行速度,就须要保证内存的缓存大小
系统信息:
硬件信息:
日志管理经常使用命令:
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安全意识
运维人员的权限很大,因此必定要保证账号/私钥的安全。
2磨刀意识
关于任何操做配置,最好先搞明白操做或配置的原理,而后再去操做。应一句话叫作“磨刀不误砍柴功”,并且对于相似的操做能够触类旁通。
3计划意识
复杂的变动操做好比多台主机以及牵涉到san存储,最好先做 操做计划,写计划文档,详细致每条命令,而后请高手帮忙审核。 这样能最大程度使整个操做过程安全。若是是重要的客户业务系统,操做最好有回退方案,而一旦变动失败,客户能够在短期内将业务回退。
4记录分享意识
遇到本身认为较特殊的案例时,记得要写案例过程及分析的文档。也方便本身之后翻看,或者和其余兄弟分享,做知识的传播以便于你们之后都能少走弯路。
5监控意识
运维来讲,监控是很是重要的,监控是发现系统各类异常的眼睛,因此运维应该和监控紧密配合。
6业务意识
尽可能了解维护的各主机上业务类型,以及各主机业务之间的关联性。由于任何维护工做都是为主机能提供业务服务的,当某业务中断,能最快的知道与此业务相关的主机群,从而缩小故障排查范围,最快定位故障。
并非你技术很牛,学的技术不少很熟,就不表明你不须要运维意识,其实领导很看重运维意识的,例若有没有作好备份、权限分配问题、平台测试状况、故障响应时间等,这些都是意识,而不是你学了不少技术自认大牛了,平台发现故障你又没什么大不子,觉得很简单的问题喜欢处理就处理,不须要向其它部门反馈等,领导不是看你的技术如何,而是看你的运维意识如何,你没运维意识,技术再牛也没用,只会让其它部门的人跟你不协调。
要知道作IT这行是苦逼的,须要无尽的学习,不学习只会被淘汰,不想被年轻的淘汰,就只能不断增值本身,否则不是你工资没法提高,而是你没法再从事这行。
这个世界,在悄悄惩罚不改变的人……