泉源:51CTO博客,作者:陈浩
简介:北信源研发工程师,五年 Linux 运维工作履历,热衷运维技能研究、实践和团队分享。
http://chenhao6.blog.51cto.com/6228054/1949673
做运维也快四年多了,就像游戏打怪升级,升级后知识体系和运维体系也相对变革挺大,学习了许多新的知识点。
运维工程师是从一个呆逼进化为苦逼再发展为牛逼的过程,条件在于你要能忍醒目能拼,还要具有敏锐的嗅觉感知火线潮水变革。如:本年大数据,人工智能比力火……(相对表现就是 Python 比力火)
之前写过运维底子篇,发现对许多人收益挺大,接下来也写下关于这 4 年多的运维实践履历,从事了 2 年多游戏运维,1 年多安全运维,1 年大数据运维,相干行业信息不能算非常醒目,但是认识和纯熟照旧相对可以的。
低级篇
8 张 Linux 知识图谱,帮你读懂相干技能和性能
详解Linux运维工程师入门级必备技能:http://chenhao6.blog.51cto.com/6228054/1341458
01
rsync工具
许多地方常常会用到 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
04
sed 和 awk 工具
这两个工具必须要把握,同时还要把握正则表达式,这个就痛楚了,正则是最难学的表达式,但联合到 sed 和 awk 中会很强盛。
在处置惩罚文本内容和过滤 Web 内容时非常有效,不外在学 Shell 的同时一样平常会常常结适用到的,以是学第 3 点就会趁便学第 4 点。
sed 简明教程:http://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 "Memorys+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 # 检察登岸过的用户信息 清空二进制日记记载文件 echo > /var/log/wtmp 默认打开乱码
who /var/log/wtmp # 检察登岸过的用户信息
lastlog # 用户末了登录的时间
tail -f /var/log/messages # 体系日记
tail -f /var/log/secure # ssh日记
02
优化
优化可以说是运维最吃香的技能,根本会优化的运维广泛工资很高,而且优化是要负担风险的,并不是网上搜个文章改一下设置文件大概参数就叫优化了,如许很轻易造成宕机。
优化是根据现实的现场情况硬件各个参数举行部门优化,进步软件性能和网站性能。这个我只能讲半知半解,其时优化 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
内存调优:
"C:Program FilesJavajdk1.8.0_31injava" -XX:+DoEscapeAnalysis -XX:+EliminateAllocations -XX:+UseTLAB -XX:+PrintGCDetails -Didea.launcher.port=7540 "-Didea.launcher.bin.path=E:javaIntelliJ IDEA 2016.3in" -Dfile.encoding=UTF-8 -classpath "C:Program FilesJavajdk1.8.0_31jrelibcharsets.jar;C:Program FilesJavajdk1.8.0_31jrelibdeploy.jar;C:Program FilesJavajdk1.8.0_31jrelibextaccess-bridge-64.jar;C:Program FilesJavajdk1.8.0_31jrelibextcldrdata.jar;C:Program FilesJavajdk1.8.0_31jrelibextdnsns.jar;C:Program FilesJavajdk1.8.0_31jrelibextjaccess.jar;C:Program FilesJavajdk1.8.0_31jrelibextjfxrt.jar;C:Program FilesJavajdk1.8.0_31jrelibextlocaledata.jar;C:Program FilesJavajdk1.8.0_31jrelibext ashorn.jar;C:Program FilesJavajdk1.8.0_31jrelibextsunec.jar;C:Program FilesJavajdk1.8.0_31jrelibextsunjce_provider.jar;C:Program FilesJavajdk1.8.0_31jrelibextsunmscapi.jar;C:Program FilesJavajdk1.8.0_31jrelibextsunpkcs11.jar;C:Program FilesJavajdk1.8.0_31jrelibextzipfs.jar;C:Program FilesJavajdk1.8.0_31jrelibjavaws.jar;C:Program FilesJavajdk1.8.0_31jrelibjce.jar;C:Program FilesJavajdk1.8.0_31jrelibjfr.jar;C:Program FilesJavajdk1.8.0_31jrelibjfxswt.jar;C:Program FilesJavajdk1.8.0_31jrelibjsse.jar;C:Program FilesJavajdk1.8.0_31jrelibmanagement-agent.jar;C:Program FilesJavajdk1.8.0_31jrelibplugin.jar;C:Program FilesJavajdk1.8.0_31jrelib esources.jar;C:Program FilesJavajdk1.8.0_31jrelib t.jar;E:java ewoutproduction ew;E:javaIntelliJ IDEA 2016.3libidea_rt.jar" com.intellij.rt.execution.application.AppMain aa.T02
Heap
PSYoungGen total 38400K, used 3994K [0x00000000d5d80000, 0x00000000d8800000, 0x0000000100000000)
eden space 33280K, 12% used [0x00000000d5d80000,0x00000000d61668b8,0x00000000d7e00000)
from space 5120K, 0% used [0x00000000d8300000,0x00000000d8300000,0x00000000d8800000)
to space 5120K, 0% used [0x00000000d7e00000,0x00000000d7e00000,0x00000000d8300000)
ParOldGen total 87552K, used 0K [0x0000000081800000, 0x0000000086d80000, 0x00000000d5d80000)
object space 87552K, 0% used [0x0000000081800000,0x0000000081800000,0x0000000086d80000)
Metaspace used 3072K, capacity 4494K, committed 4864K, reserved 1056768K
class space used 329K, capacity 386K, committed 512K, reserved 1048576K
Heap
PSYoungGen total 38400K, used 1147K [0x00000000d5d80000, 0x00000000d8800000, 0x0000000100000000)
eden space 33280K, 3% used [0x00000000d5d80000,0x00000000d5e9ecb8,0x00000000d7e00000)
from space 5120K, 0% used [0x00000000d8300000,0x00000000d8300000,0x00000000d8800000)
to space 5120K, 0% used [0x00000000d7e00000,0x00000000d7e00000,0x00000000d8300000)
ParOldGen total 87552K, used 0K [0x0000000081800000, 0x0000000086d80000, 0x00000000d5d80000)
object space 87552K, 0% used [0x0000000081800000,0x0000000081800000,0x0000000086d80000)
Metaspace used 3072K, capacity 4494K, committed 4864K, reserved 1056768K
class space used 330K, capacity 386K, committed 512K, reserved 1048576K
线程当地缓存利用eden的,开启就会利用更多
Tomcat 前任何参数没到场大概每秒 605,调优后大概每秒 435,靠近 3 倍的效果。
03
开辟技能
优选 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 实例手册》下载链接:http://down.51cto.com/data/2329173
意识篇
01
安全意识
运维职员的权限很大,以是肯定要包管帐号/私钥的安全:
- 最好利用加密工具存储。好比 Truecrypt、lpassword。
- 基于当地存储。切勿用网盘,也不发起用 lastpass 等。
- SSH 私钥添加暗码。
02
磨刀意识
关于任何操纵设置,最好先搞明确操纵或设置的原理,然后再去操纵。应一句话叫做“磨刀不误砍柴功”,而且对于雷同的操纵可以闻一知十。
03
筹划意识
复杂的变动操纵好比多台主机以及扳连到 san 存储,最好先作操纵筹划,写筹划文档,具体到每条下令,然后请高手帮助考核。
如许能最大水平使整个操纵过程安全。假如是紧张的客户业务体系,操纵最好有回退方案,而一旦变动失败,客户可以在短时间内将业务回退。
04
记载分享意识
碰到本身以为较特别的案例时,记得要写案例过程及分析的文档。也方便本身以后翻看,大概和其他兄弟分享,作知识的流传以便于各人以后都能少走弯路。
05
监控意识
对运维来说,监控黑白常紧张的,监控是发现体系各种非常的眼睛,以是运维应该和监控精密共同。
06
业务意识
只管相识维护的各主机上的业务范例,以及各主机业务之间的关联性,由于任何维护工作都是为主性能提供业务服务的。
当某业务停止,能最快的知道与此业务相干的主机群,从而缩小故障排查范围,最快定位故障。
并不是你技能很牛,学的技能许多很熟,就不代表你不必要运维意识,实在向导很看重运维意识的。
比方有没有做好备份、权限分配题目、平台测试环境、故障相应时间等,这些都是意识,而不是你学了许多技能自认大牛了,平台发现故障你以为很简朴的题目喜好处置惩罚就处置惩罚,不必要向别的部分反馈等。
向导不是看你的技能怎样,而是看你的运维意识怎样,你没运维意识,技能再牛也没用,只会让别的部分的人跟你不和谐。
要知道做 IT 这行是苦逼的,必要无尽的学习,不学习只会被镌汰,不想被年轻的镌汰,就只能不停增值本身,否则不是你工资无法提拔,而是你无法再从事这行。
这个天下,在静静处罚不改变的人……
[color=rgba(96, 125, 139, 0.71)]假如你想从事网络运维,
[color=rgba(96, 125, 139, 0.71)]也想快速拥有Linux认证!
[color=rgba(96, 125, 139, 0.71)]请添加微信:SPOTO123456
[color=rgba(96, 125, 139, 0.71)]或扫一扫接洽小编!
[color=rgba(96, 125, 139, 0.71)]
为了方便广大网络运维工作者,特开设QQ群-网络运维Linux交换群161947513,本群是纯净Linux技能、Linux运维技能讨论群,接待喜好Linux、学习Linux、爱好Linux的朋侪们加群!拒绝发广告、闲聊!
|