前言:转载 从事安全运维向的前辈文章。写的很好。人很是nice,遇到了问题,qq上很快就回复了我。java
大道三千 入门最难,凡事入了行,也就什么都好说了,好的天然不断努力奋斗修行,很差的天然很快就被淘汰。恭谨勤勉,时不我待~python
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------mysql
it自动化运维就是要很方便的运用各类工具进行管理维护,有效的实施服务器保护
linux运维人员经常使用工具介绍linux
rsync 强化技术(手动修改端口开启防火墙的状况下)而且经过脚本只同步须要的服务器ios
inotify+rsync+mutt+msmtp 实现linux文件或者目录自动更新而且实现发邮件给管理员nginx
Linux web服务安装apache 思路 (源码编译,本身定义服务)面试
FTP(持虚拟用户,而且每一个虚拟用户能够具备独立的属性配置)sql
linux 下构建DHCP服务器shell
mysql 主从同步,双主同步,若是服务器意外挂机,不一样步怎么办
以上就是踏入linux运维工程师须要掌握的工具,其实还有不少工具要掌握的,但你在学习环境中是很难学到,最后我再提醒一下,这里所指的工具至关于技能,而不是像windows或ubuntu那些图形化工具,那些工具没用的,还有,学linux就别装图形界面,这样虚拟机就不用吃太多内存,并且绝对不建议在真机上装linux,根本达不到学习效果。
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
详解 Linux 运维工程师打怪升级篇
积累经验篇
作运维也快4年多了,就像游戏打怪升级,升级后知识体系和运维体系也相对变化挺大,学习了不少新的知识点。
运维工程师 是从一个呆逼进化为苦逼再成长为牛逼的过程,前提在于你要能忍能干能拼,还要具备敏锐的嗅觉感知前方潮流变化。如:今年大数据,人工智能比较火。。。(相对表示就是 python 比较火)
前面也讲了运维基础篇,发现对不少人收益挺大,接下来也写下关于这4年多的运维实践经验,从事了2年多游戏运维,1年多安全运维,1年大数据运维,相关行业信息不能算很是精通吗,可是熟悉和熟练仍是相对能够的。
拓扑详见:
中级篇
从我后面面试经历和面试别人的经历。有些人认为,其实运维就是部署某个软件,设置些基础功能,就算会运维了。
举个例子:安装LAMP,LNMP,就感受部署方法我都掌握了。其实网上大多数都有一键安装脚本啥的根本没有啥技术含量,在面试官眼里,这些都不是你的亮点。基本到了公司通常环境架构都是部署好的,不多须要你去变更环境架构。就算你安装好 LNMP 架构你熟悉里面的原理吗,熟悉 Nginx 优化吗,熟悉 MySQL 优化吗?
再举个例子:我面试遇到的问题,面试官问你既然熟悉 LNMP 架构,那么 Nginx 反向代理的做用。
你应该不是说出懂这个软件和配置,你尽量的说怎么优化,怎么深刻提升网站性能。
一、使用反向代理能够理解为7层应用层的负载均衡,使用负载均衡以后能够很是便捷的横向扩展服务器集群,实现集群总体并发能力、抗压能力的提升。
二、一般反向代理服务器会带有本地 Cache 功能,经过静态资源的 Cache,有效的减小后端服务器所承载的压力,从而提升性能。
下面说说运维在工做中须要掌握的核心技术
注意,这是在工做中掌握的,在学习中很难掌握。
#6458M为真实使用内存 1649M为真实剩余内存(剩余内存+缓存+缓冲器)
#linux会利用全部的剩余内存做为缓存,因此要保证linux运行速度,就须要保证内存的缓存大小
系统信息:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
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
# 查看内核模块
|
硬件信息:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
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)
日志管理经常使用命令:
1
2
3
4
5
6
7
8
9
10
|
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日志
|
二、优化
优化能够说是运维最吃香的技能,基本会优化的运维广泛工资很高,并且优化是要承担风险的,并非网上搜个文章改一下配置文件或者参数就叫优化了,这样很容易形成宕机。
优化是根据实际的现场环境硬件各个参数进行部分优化,提升软件性能和网站性能。这个我只能讲半知半解,当时优化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
内存调优:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
"C:\Program Files\Java\jdk1.8.0_31\bin\java"
-XX:+DoEscapeAnalysis -XX:+EliminateAllocations -XX:+UseTLAB -XX:+PrintGCDetails -Didea.launcher.port=7540
"-Didea.launcher.bin.path=E:\java\IntelliJ IDEA 2016.3\bin"
-Dfile.encoding=UTF-8 -classpath
"C:\Program Files\Java\jdk1.8.0_31\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_31\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_31\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_31\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_31\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_31\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_31\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_31\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_31\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_31\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_31\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_31\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_31\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_31\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_31\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_31\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_31\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_31\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_31\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_31\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_31\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_31\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_31\jre\lib\rt.jar;E:\java\new\out\production\new;E:\java\IntelliJ IDEA 2016.3\lib\idea_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倍的结果
三、开发技能
优选 shell 和 python,如今 shell 没法知足你的需求或者效率很低,那么选择自动化 python 是最好的选择。如今广泛招聘需求要求,会写 shell 或者 python,perl 脚本,我的选择仍是选 python。
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这行是苦B的,须要无尽的学习,不学习只会被淘汰,不想被年轻的淘汰,就只能不断增值本身,否则不是你工资没法提高,而是你没法再从事这行。
这个世界,在悄悄惩罚不改变的人...
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------