運維在前期是一個很苦逼的工做,可能幹着修電腦掐網線的活!時間也碎片化,各類零碎雜事圍繞着你,很難體現我的價值,漸漸對行業很迷茫。這些枯燥無味工做的確令人匱乏,從技術層面講這些實際上是基本功,對後期的運維工做會無形中帶來必定幫助。因此前期要保持積極向上的心態,持續學習。在將來某一天,相信會回報給你的!分享下高級運維工程師學習路線。mysql
系統基礎:剛開始階段須要熟悉Linux/Windows操做系統安裝,目錄結構、啓動流程等等;ios
系統管理:主要學習Linux類系統,生產環境基本都在字符界面完成工做,因此要掌握經常使用幾十個基本管理命令,包括用戶管理、磁盤分區、軟件管理、文件權限、文本處理、進程管理、性能分析工具等等;sql
網絡基礎:OSI和TCP/IP模型必定要熟悉。基本的交換機、路由器概念及實現原理須要知道;數據庫
腳本基礎:掌握Shell的基本語法結構,能編寫簡單的腳本便可。編程
網絡服務:最經常使用的網絡服務必定得會部署,好比vsftpd/NFS/Samba/DNS/DHCP等。代碼版本管理系統能夠學習下主流的SVN或者Git,能部署和簡單使用就能夠了。常常在服務器之間傳輸數據,因此要會使用:rsync或者scp。數據同步:inotify或者sersync。重複性的工做,可寫成腳本定時去運行,因此得會配置Linux下的定時任務服務crond;後端
網站服務:每一個公司基本都有網站,可以讓網站跑起來,就須要搭建網站服務平臺了。若是是用PHP語言開發的,一般要搭建LAMP/LNMP網站平臺。若是是Java語言開發,一般用Tomcat運行項目,爲了提升訪問速度,可使用Nginx反向代理Tomcat,Nginx處理靜態頁,Tomcat處理動態頁,實現動靜分離。不僅是會部署這麼簡單,還須要知道HTTP協議工做原理和簡單的性能調優;數組
SQL數據庫:數據庫選擇MySQL,它是世界上使用最普遍的開源數據庫。要會一些簡單的SQL語句、用戶管理、經常使用存儲引擎、數據庫備份與恢復。還須要會主從複製、性能優化、主流集羣方案:MHA/MGR等。NoSQL這麼流行固然少不了,學一下Redis/MongoDB這兩個就行了;緩存
網絡安全:安全很是重要,不要等到系統被入侵了,再作安全策略!因此,一臺服務器上線後應立刻作安全訪問控制策略,好比使用IPTABLES限制只容許信任源IP訪問,關閉一些無用的服務和端口。一些常見的攻擊類型必定得知道,好比CC/DDOS/ARP等;安全
監控系統:監控必不可少,它是及時發現問題和追溯問題的救命稻草。能夠選擇學習主流的Zabbix開源監控系統,功能豐富,能知足基本的監控需求。監控點包括基本服務器資源、接口狀態、服務性能、PV/UV以及日誌等方面。也能夠弄個儀表盤展現幾個實時關鍵數據,好比Grafana會很是炫酷;性能優化
腳本編程進階:Shell腳本是Linux自動完成工做的利器,必須熟練編寫,因此得進一步學習函數、數組、信號、發郵件等。文本處理三劍客得玩六,Linux下文本處理就期望它們了;
高級腳本開發:Shell腳本只能完成一些基本的任務,要完成更復雜些的任務,好比多進程等,須要學高級語言了。Python是運維領域中使用最多的語言,簡單易用!此階段掌握基礎就夠了,例如基本語法結構、文件對象操做、函數、迭代對象、異常處理、數據庫編程等。
網站靜態緩存:用戶老喊着訪問網站慢,看看服務器資源還很富裕啊!網站訪問慢也許不是服務器資源飽和致使,影響因素不少,例如網絡、轉發層數等等。對於網絡,存在南北通訊問題,之間訪問會慢,這個可以使用CDN解決,同時緩存靜態頁面,儘量將請求攔截在最上層響應,減小後端請求、響應時間。若是不使用CDN,也可使用Squid/Varnish/Nginx緩存服務實現靜態頁面緩存,放到流量的入口處;
集羣:單臺服務器的資源終究有限,抵抗高訪問量確定是沒法支撐的,解決此問題最關鍵的技術就是採用負載均衡器,水平擴展多臺Web服務器,同時對外提供服務,這樣就成倍擴展性能了。負載均衡主流開源技術有LVS/HAProxy/Nginx。必定要熟悉一兩個!網站服務器性能瓶頸解決了,數據庫則更爲關鍵,仍是採用集羣,就拿MySQL來講吧,能夠一主多從架構,在基礎上實現讀寫分離,主負責寫,多個從負責讀,從庫能夠水平擴展,前面再來個四層負載均衡器,妥妥承載千萬級PV!高可用軟件也得會,避免單點利器主流的有Keepalived/Heartbeat等。網站圖片咋這麼多!NFS共享存儲支撐不過了,處理很慢,好弄!上分佈式文件系統,並行處理任務,無單點高可靠高性能等特性,主流的有FastDFS/MFS/HDFS/Ceph/GFS等。初期的話建議學習下FastDFS,能夠知足中小規模需求;
虛擬化和容器:硬件服務器資源利用率很低,甚是浪費!能夠把空閒較多的服務器虛擬化,弄成不少個虛擬機,每一個虛擬機就是一個完整的操做系統,可很大程度提升資源利用率,建議學習開源的KVM+OpenStack。虛擬機做爲基礎平臺還能夠,可是應用業務彈性伸縮也過重量了吧!啓動好幾分鐘,文件又這麼大,快速擴展太費勁了!好說,上容器吧,容器主要特色是快速部署和環境隔離。一個服務封裝到鏡像中,分分鐘鍾可建立幾百個容器。主流的容器技術非Docker莫屬了。固然,生產環境單機Docker多數狀況下是沒法知足業務需求的,能夠部署Kubernetes/Swarm集羣化管理容器,造成一個較大的資源池,集中管理,爲基礎架構提供有力的支撐;
自動運維:重複工做不但提升不了效率,價值也得不到體現。一切運維工做的標準化,例如環境版本、目錄結構、操做系通通一。在標準化基礎上才能更方便的自動化,點點鼠標或者敲幾個命令便可完成一項複雜的工做任務。所以全部操做盡量自動化,減小人爲失誤,提升工做效率。主流服務器集中管理工具Ansible/SaltStack,這兩個選任意一個就行。持續集成工具杜老師推薦Jenkins;
腳本開發進階:可再深刻學習下Python開發,掌握面向對象編程。最好也掌學習一個網站框架開發網站,如Django/Flask,主要用來開發運維管理系統,將一些複雜流程寫到平臺中,而後集成集中管理工具,可打造一個屬於運維本身的管理平臺;
日誌分析系統:日誌也很重要,按期分析發現潛在隱患,提煉有價值的東西。開源的一套日誌系統ELK,學會部署使用,給開發者提供日誌查看需求;
性能優化:只會部署是遠遠不夠的,性能優化能最大化的提高服務承載量。這塊也是比較難的,也是高薪的關鍵點之一,爲了錢也得下點功夫學習啊!可從硬件、操做系統、軟件和架構等層面維度展開思考。
高級運維工程師須要掌握的工具作個表格:
類型 | 名稱 |
---|---|
文本處理 | grep/sed/awk |
數據傳輸 | rsync/scp/inodify/sersync |
進程管理 | Supervisor |
性能分析 | top/free/df/iftop/iostat/vmstat/dstat/sar/sysdig |
網絡服務 | vsftp/NFS/Samba/DNS/DHCP/Postfix |
網站服務 | Apache/Nginx/Tomcat/JBoss/resin |
SQL數據庫 | MySQL/MariaDB |
NoSQL數據庫 | Redis/MongoDB |
消息隊列 | RabbitMQ/ActiveMQ |
版本管理 | SVN/Git |
靜態緩存 | Squid/Varnish/Nginx |
負載均衡 | LVS/HAProxy/Nginx |
HA高可用 | Keepalived/Heartbeat/DRBD |
集中管理工具 | Ansible/SaltStack/Chef/Puppet |
虛擬化雲平臺 | KVM/Xen/Docker/Kubernetes/Openstack/CloudStack |
自動裝機 | Kickstart/Cobbler |
抓包分析 | tcpdump/Wireshark |
持續集成 | Jenkins/GitLab |
MySQL數據庫代理 | Altas/Cobar/MyCat |
壓測 | ab/fio/sysbench/mysqlslap |
安全檢查 | chkrootkit/rkhunter |
日誌系統 | ELK |
監控 | Zabbix/Cacti/Nagios/Grafana |