做运维也快四年多了,就像游戏打怪升级,升级后知识体系和运维体系也相对变化挺大,学习了很多新的知识点。
运维工程师是从一个呆逼进化为苦逼再成长为牛逼的过程,前提在于你要能忍能干能拼,还要具有敏锐的嗅觉感知前方潮流变化。如:今年大数据,人工智能比较火……(相对表示就是 Python 比较火)
之前写过运维基础篇,发现对很多人收益挺大,接下来也写下关于这 4 年多的运维实践经验,从事了 2 年多游戏运维,1 年多安全运维,1 年大数据运维,相关行业信息不能算非常精通,但是熟悉和熟练还是相对可以的。
初级篇
8 张 Linux 知识图谱,帮你读懂相关技术和性能
详解Linux运维工程师入门级必备技能:http://chenhao6.blog.51cto.com/6228054/1341458
01rsync工具
很多地方经常会用到 rsync 工具,实施几台服务器的同步效果。我们公司就是使用这个工具完成服务器的游戏的服务端和客户端同步。
有几个文章例子:
rsync 强化技术(手动修改端口开启防火墙的情况下)并且通过脚本只同步需要的服务器:http://chenhao6.blog.51cto.com/6228054/1322579
inotify+rsync+mutt+msmtp 实现 Linux 文件或者目录自动更新并且实现发邮件给管理员:http://chenhao6.blog.51cto.com/6228054/1298375
02网络服务
服务有很多种,每间公司都会用到不同的,但基础的服务肯定要掌握,如 FTP、DNS、SAMBA、邮件,这几个大概学一下就行,LAMP 和 LNMP 是必须要熟练。
我所指的不是光会搭建,而是要很熟悉里面的相当配置才行,因为公司最关键的绝对是 Web 服务器,所以 Nginx 和 Apache 要熟悉,特别是 Nginx 一定要很熟悉才行,至少有些公司还会用 Tomcat,这个也最好学一下。
其实网络服务方面不用太担心,一般公司的环境都已经搭建好,就算有新服务器或让你整改,公司会有相应的文档让你参照来弄,不会让你乱来的,但至少相关的配置一定要学熟,而且肯定是编译安装多,那些模块要熟悉一下它的作用,特别是 PHP 那些模块。
上面两点只是基础,也是必要条件,不能说是工具,以下才是真正的要掌握的工具:
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
03脚本语言
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
04sed 和 awk 工具
这两个工具必须要掌握,同时还要掌握正则表达式,这个就痛苦了,正则是最难学的表达式,但结合到 sed 和 awk 中会很强大。
在处理文本内容和过滤 Web 内容时十分有用,不过在学 Shell 的同时一般会经常结合用到的,所以学第 3 点就会顺便学第 4 点。
sed 简明教程:
https://coolshell.cn/articles/9104.html
05文本处理命令
sort 、tr、cut、paste、uniq、tee 等必学,也是结合第 3 点脚本语言时一并学习的。
06数据库
首选 MySQL,别问我为什么不学 SQL Server 和 Oracle,因为 Linux 用得最多绝对是 MySQL,增删改查必学,特别要学熟查,其它方面可能不太需要,因为运维人员使用最多还是查,哪些优化和开发语句不会让你弄的。
MySQL(手动编译详细思路,以及增删改查、授权、备份还原):
http://chenhao6.blog.51cto.com/6228054/1225129
07防火墙
防火墙也算是个难点,说难不难,说易不易,最重要弄懂规则,如果学过 CCNA 的朋友可能会比较好学,因为 iptables 也有 NAT 表,原理是一样的,而 FILTER 表用得最多,反正不学就肯定不合格。
防火墙(一)主机型防火墙
http://chenhao6.blog.51cto.com/6228054/1239306
防火墙(二)SNAT和DNAT
http://chenhao6.blog.51cto.com/6228054/1240714
08监控工具
我个人建议,最好学这 3 个:Cacti,Nagios,Zabbix,企业用得最多应该是 Nagios 和 Zabbix,反正都学吧,但 Nagios 会有点难,因为会涉及到用脚本写自动监控,那个地方很难。
CentOS 6.2+Nginx+Nagios,手机短信和QQ邮箱提醒:
http://chenhao6.blog.51cto.com/6228054/1323192
服务器集中检测Cacti:
http://chenhao6.blog.51cto.com/6228054/1249302
09集群和热备
这个很重要,肯定要懂的,但到了公司就不会让你去弄,因为新手基本不让你碰,集群工具有很多,最好学是 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,有效的减少后端服务器所承载的压力,从而提高性能。
下面说说运维在工作中需要掌握的核心技术。需要注意的是,这是在工作中掌握的,在学习中很难掌握。
01第一条最主要的排错
- 分析部分程序不能运行或没有按预想结果运行的原因,对程序运行跟踪,查看系统调用的过程。
- 较深入的系统瓶颈点分析。
查看剩余内存:
- free -m
- #-/+ buffers/cache: 6458 1649
- #6458M为真实使用内存 1649M为真实剩余内存(剩余内存+缓存+缓冲器)
- #linux会利用所有的剩余内存作为缓存,所以要保证linux运行速度,就需要保证内存的缓存大小
系统信息:
- uname -a # 查看Linux内核版本信息
- cat /proc/version # 查看内核版本
- cat /etc/issue # 查看系统版本
- lsb_release -a # 查看系统版本 需安装 centos-release
- locale -a # 列出所有语系
- locale # 当前环境变量中所有编码
- hwclock # 查看时间
- who # 当前在线用户
- w # 当前在线用户
- whoami # 查看当前用户名
- logname # 查看初始登陆用户名
- uptime # 查看服务器启动时间
- sar -n DEV 1 10 # 查看网卡网速流量
- dmesg # 显示开机信息
- lsmod # 查看内核模块
硬件信息:
- more /proc/cpuinfo # 查看cpu信息
- lscpu # 查看cpu信息
- cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c # 查看cpu型号和逻辑核心数
- getconf LONG_BIT # cpu运行的位数
- cat /proc/cpuinfo | grep 'physical id' |sort| uniq -c # 物理cpu个数
- cat /proc/cpuinfo | grep flags | grep ' lm ' | wc -l # 结果大于0支持64位
- cat /proc/cpuinfo|grep flags # 查看cpu是否支持虚拟化 pae支持半虚拟化 IntelVT 支持全虚拟化
- more /proc/meminfo # 查看内存信息
- dmidecode # 查看全面硬件信息
- dmidecode | grep "Product Name" # 查看服务器型号
- dmidecode | grep -P -A5 "Memory\s+Device" | grep Size | grep -v Range # 查看内存插槽
- cat /proc/mdstat # 查看软raid信息
- cat /proc/scsi/scsi # 查看Dell硬raid信息(IBM、HP需要官方检测工具)
- lspci # 查看硬件信息
- lspci|grep RAID # 查看是否支持raid
- lspci -vvv |grep Ethernet # 查看网卡型号
- lspci -vvv |grep Kernel|grep driver # 查看驱动模块
- modinfo tg2 # 查看驱动版本(驱动模块)
- ethtool -i em1 # 查看网卡驱动版本
- ethtool em1
- 使用分析系统分析 Web 日志(如逆火软件)
- 分析系统性能瓶颈点(IO/Memory/CPU,常用工具,top 命令中 shift 组合键的特殊用 Sar/vmstat/iostat/ipcs)
日志管理常用命令:
- history # 历时命令默认1000条
- HISTTIMEFORMAT="%Y-%m-%d %H:%M:%S " # 让history命令显示具体时间
- history -c # 清除记录命令
- cat $HOME/.bash_history # 历史命令记录文件
- lastb -a # 列出登录系统失败的用户相关信息 清空二进制日志记录文件 echo > /var/log/btmp
- last #