一、学习目标
之前从事过Linux运维工程师的工作,做的是普通的服务配置给改、负载处理、数据归档以及手工版本发布等简单的问题,所以在网上买了套教学视频学习一来是加强自己的技术基础,二来是为了提升自己的薪资水平。
二、学习方法
由于是边工作边学习,所以时间相对没那么充裕。大致学习方法如下
1)基础学习篇--加强基础知识(大约1个月)
1.每天抽至少2小时,双休学习视频(如果觉得讲师的语速慢可以调至1.5倍速看,难以理解的就正常看了)并形成相应的笔记;
2.学习Linux基础,包括计算机基础、Linux操作系统基础、Linux发行版本(CentOS、Redhat)Linux基础命令入门和帮助、Linux的文件管理,Bash Shell特性、Linux用户和组的权限等;
3.四剑客是核心,掌握并能熟练使用find、sed、grep、awk及正则表达式;
4.掌握文本编辑器vi/vim的使用,文件的打包和压缩工具,如zip、unzip,tar等;
5.学会软件包管理,rpm和yum(Centos8是dnf)包括常见的开源网站,如阿里源、网易源的配置,以及自搭建yum源仓库;
6.掌握Linux磁盘存储和文件系统(分区和挂载的使用比较重要);
7.Linux网络管理,主要了解常用的网络定义(局域网和广域网的定义)、常见网络设备(网卡、网线、网桥、交换机、路由器)、传输模式(单工、半双工、全工)。
基础知识是重中之重,有朋友曾告诉过我,Linux命令学运维的都会,但是无论是面试还是工作中记住和熟悉原理才更加方便问题定位和解决。
2)加强学习篇--基础掌握加动手实践(大约1个月)
1.了解OSI七层模型数据的封装和解封装,TCP/IP协议分层和协议栈,四层中各功能以及常涉及的协议,熟悉TCP的三次握手和四次挥手,了解IP地址和子网划分;
2.了解Linux数据处理的抓包工具tcpdump及其过程,熟练使用ps、pstree、uptime、free、top、vmstat等命令进行进程查看;
3.shell脚本(真的很重要!!!)和crontab定时任务一定要掌握;
4.了解Linux启动流程与服务、内核管理;
5.熟悉常用的软件如Apache、Tomcat、nginx、MySQL、redis等的安装(最好是源码安装);
6.了解CDN,DNS和搭建配置文件系统FastDFS,NFS。
中间涉及到的不会的问题或者各种疑难杂症找度娘,能翻墙的就Google,或者联系购买视频的讲师,要掌握或者熟悉再进入下一步,切记不要心急。
3)深入学习篇--服务架构搭建(大约2个半月)
1.涉及到LAMP、LNMP的源码搭建(编译步骤&常涉及的依赖安装)及其各项服务的配置调优,服务搭建或者运行中常见各种应用报错(4xx、5xx系列报错解决等)和故障解决(负载高、SSH连接缓慢、磁盘空间不足、封IP等);
2.nginx,LVS+keepalived、varnish,haproxy做负载均衡及其配置原理;
3.熟悉MySQL-cluster、redis-cluster原理并能搭建和配置,如MySQL主主复制、多主多从复制和读写分离(mycat和amoba),redis集群及其sentinel机制;
4.掌握MySQL数据库的增、删、改、查语句,主从故障恢复、备份(mysqldump、mysqlbackup等)以及redis的备份(RDB和AOF)原理和步骤;
5.会搭建Jenkins+gitlab实现自动化部署,并熟练使用工具进行版本发布;
6.会使用pssh、ansible进行批量部署,jumpserver堡垒机管理机器,最好能结合Shell脚本进行各种服务的批量部署减少任务量;
7.搭建常用监控服务,Zabbix,ELK,Prometheus+grafana的监控原理和常见监控配置步骤(如zabbix配置主机、模板、监控项、触发器、动作、告警媒介等);
8.了解常见云服务的操作和配置,如AWS、阿里云、腾讯云及其迁移步骤(可以去买计时的服务学习);
9.学习开源容器引擎Docker以及容器集群管理系统K8S(此处可能需要花费更多的时间学习);
这里主要学会搭建常见服务(原理、配置和调优)及其集群搭建和故障排错思路、容灾思想的培养。
4)安全&架构思维篇--持续培养
1.熟悉iptables“四表五链”,并能禁用和开启端口或IP的相关配置;
2.了解一些硬件防火墙(金盾、深信服、绿盟)和软件防火墙(360、金山);
3.了解常见攻击如DDOS攻击(SYN Flood、ACK Flood、DNS Flood等)、CC攻击、SQL注入等攻击原理、方式和防御思路(这里安利一本书《Web攻防之业务安全指南》虽然本人买了并没怎么看过);
4.个人每天抽20分钟浏览一些安全方面的资讯,即使不是从事安全方面的工作,也可以了解一下动态。本人另一篇博客推荐一些网站,有兴趣的可以看看:https://www.jianshu.com/p/37c5588e85d3
5.常涉及的服务架构的LB、HA,熟悉一些中间件(Kafka、Tomcat等)的原理、用途和配置;
6.培养自己的架构思维,能构思一定规模的公司架构(测试环境、生产环境),多少台服务器以及每台服务器的职责,如:网段划分+Jumpserver堡垒机(服务器管理)+yum仓库源+时间同步服务器(NTP或chrony)+web服务器Apache或nginx(动静分离,负载均衡,反向代理)+MQ服务器(Kafka)+数据存储MySQL(主从,读写分离)+缓存redis(集群)+监控(zabbix监控服务器和进程,ELK日志监控)+CI/CD(Jenkins+Maven+gitlab)等。
5)劳逸结合篇--Better life
1.平常要形成做笔记的习惯,以制作word或TXT文档还是思维导图类的亦或是写博客,要经常敲命令,出了故障开始一定要自己尝试解决(培养解决故障的思维、解决问题的能力);
2.网页(CSDN,51CTO,)或微信公众号看一些技术博客,多记忆和理解一些原理性的东西(这也是面试常问的);
3.学会放松,像双休这种常时间的学习可以适当放松,本人比较宅爱好是喜欢看LOL比赛(老狗杂和K杂了),然后在看比赛中边运动(握力器、臂力棒、跳绳)放松一下。甚至会出现看LOL视频而不想学习的时候;
4.即使从事了Linux运维的工作也不要停下学习的脚步,IT行业更新迭代很快。
最后就是尽量学习一门语言,运维最好学Python。后续就是简历的编写,以及尝试投递简历和面试总结,这里不再赘述。