1. 程式人生 > >高階運維工程師的打怪升級之路

高階運維工程師的打怪升級之路

運維工程師在前期是一個很苦逼的工作,在這期間可能幹著修電腦、掐網線、搬機器的活,顯得沒地位!時間也很碎片化,各種零碎的瑣事圍繞著你,很難體現個人價值,漸漸的對行業很迷茫,覺得沒什麼發展前途。

這些枯燥無味工作的確會使人匱乏,從技術層面講這些其實都是基本功,對後期的運維工作會無形中帶來一定的幫助,因為我也是這麼過來的,能深刻體會到。所以在這個時期一定要保持積極向上的心態,持續的學習。在未來的某一天,相信會回報給你的!

好了,進入正題,根據我多年的運維工作經驗,給大家分享下高階運維工程師學習路線。

初級

1、Linux基礎

剛開始階段需要熟悉Linux/Windows作業系統安裝,目錄結構、啟動流程等。

2、系統管理

主要學習Linux系統,生產環境中基本都在字元介面完成工作,所以要掌握常用的幾十個基本管理命令,包括使用者管理、磁碟分割槽、軟體包管理、檔案許可權、文字處理、程序管理、效能分析工具等。

3、網路基礎

OSI和TCP/IP模型一定要熟悉。基本的交換機、路由器概念及實現原理要知道。

4、Shell指令碼程式設計基礎

掌握Shell基本語法結構,能編寫簡單的指令碼即可。

中級

1、網路服務

最常用的網路服務一定得會部署,比如vsftp、nfs、samba、bind、dhcp等。

程式碼版本管理系統少不了,可以學習下主流的SVN和GIT,能部署和簡單使用就可以了。

經常在伺服器之間傳輸資料,所以要會使用:rsync和scp。

資料同步:inotify/sersync。

重複性完成一些工作,可寫成指令碼定時去執行,所以得會配置Linux下的定時任務服務crond。

2、Web服務

每個公司基本都會有網站,能讓網站跑起來,就需要搭建Web服務平臺了。

如果是用PHP語言開發的,通常搭建LAMP、LNMP網站平臺,這是一個技術名詞組合的拼寫,分開講就是得會部署Apache、Nginx、MySQL和PHP。

如果是JAVA語言開發的,通常使用Tomcat執行專案,為了提高訪問速度,可以使用Nginx反向代理Tomcat,Nginx處理靜態頁面,Tomcat處理動態頁面,實現動靜分離。

不是會部署這麼簡單,還要知道HTTP協議工作原理、簡單的效能調優。

3、資料庫

資料庫選擇MySQL,它是世界上使用最為廣泛的開源資料庫。學它準沒錯!

也要會一些簡單的SQL語句、使用者管理、常用儲存引擎、資料庫備份與恢復。

想要深入點,必須會主從複製、效能優化、主流叢集方案:MHA、MGR等。

NoSQL這麼流行當然也少不了,學下Redis、MongoDB這兩個就好了。

4、安全

安全很重要,不要等到系統被入侵了,再做安全策略,此時已晚!所以,當一臺伺服器上線後應馬上做安全訪問控制策略,比如使用iptables限制只允許信任源IP訪問,關閉一些無用的服務和埠等。

一些常見的攻擊型別一定得知道啊,否則怎麼對症下藥呢!比如CC、DDOS、ARP等。

5、監控系統

監控必不可少,是及時發現問題和追溯問題的救命稻草。可以選擇學習主流的Zabbix開源監控系統,功能豐富,能滿足基本的監控需求。監控點包括基本伺服器資源、介面狀態、服務效能、PV/UV、日誌等方面。

也可以弄個儀表盤展示幾個實時關鍵的資料,比如Grafana,會非常炫酷。

6、Shell指令碼程式設計進階

Shell指令碼是Linux自動完成工作的利器,必須得熟練編寫,所以得進一步學習函式、陣列、訊號、發郵件等。

文字處理三劍客(grep、sed、awk)得玩6啊,Linux下文字處理就指望它們了。

7、Python開發基礎

Shell指令碼只能完成一些基本的任務,想要完成更復雜些的任務,比如呼叫API、多程序等。就需要學高階語言了。

Python是運維領域使用最多的語言,簡單易用,學它準沒錯!此階段掌握基礎就可以了,例如基本語法結構、檔案物件操作、函式、迭代物件、異常處理、發郵件、資料庫程式設計等。

高階

1、Web靜態快取

使用者老喊著訪問網站慢,看看伺服器資源還很富裕啊!網站訪問慢也許不是伺服器資源飽和導致的,影響因素很多,例如網路、轉發層數等。

對於網路,存在南北通訊問題,之間訪問會慢,這個可以使用CDN解決,同時快取靜態頁面,儘可能將請求攔截在最上層響應,減少後端請求和響應時間。

如果不用CDN,也可以使用Squid、Varnish、Nginx這樣的快取服務實現靜態頁面快取,放到流量入口處。

2、叢集

單臺伺服器終究資源有限,抵抗高訪問量肯定是無法支撐的,解決此問題最關鍵的技術就是採用負載均衡器,水平擴充套件多臺Web伺服器,同時對外提供服務,這樣就成倍擴充套件效能了。負載均衡器主流開源技術有LVS、HAProxy和Nginx。一定要熟悉一兩個!

Web伺服器效能瓶頸解決了,資料庫更為關鍵,還是採用叢集,就拿學的MySQL來說,可以一主多從架構,在此基礎上讀寫分離,主負責寫,多從負責讀,從庫可水平擴充套件,前面再來個四層負載均衡器,承載千萬級PV,妥妥的!

高可用軟體也得會,避免單點的利器,主流的有Keepalived、Heartbeat等。

網站圖片咋這麼多呢!NFS共享儲存支撐不過了,處理很慢,好弄!上分散式檔案系統,並行處理任務,無單點,高可靠,高效能等特性,主流的有FastDFS、MFS、HDFS、Ceph、GFS等。初期的話我建議學習下FastDFS,能滿足中小規模需求。

3、虛擬化

硬體伺服器資源利用率很低,甚是浪費!可以把空閒多的伺服器虛擬化,弄成很多個的虛擬機器,每個虛擬機器就是一個完整的作業系統。可以很大程度提高資源利用率。建議學習開源的KVM+OpenStack雲平臺。

虛擬機器作為基礎平臺還可以,但應用業務彈性伸縮也太重量了吧!啟動好幾分鐘,檔案又這麼大,快速擴充套件太費勁了!

好說,上容器,容器主要特點就是快速部署和環境隔離。一個服務封裝到映象中,分分鐘鍾可建立幾百個容器。

主流的容器技術非Docker莫屬了。

當然,生產環境單機Docker大多數情況下是無法滿足業務需求的,可以部署Kubernetes、Swarm叢集化管理容器,形成一個大的資源池,集中管理,為基礎架構提供有力的支撐。

學習Docker不妨看看這個視訊教程,學員評價還是不錯的:http://opsdev.ke.qq.com 

4、自動化

反反覆覆重複的工作,不但提高不了效率,價值也得不到體現。

一切運維工作標準化,例如環境版本、目錄結構、作業系統等統一。在標準化基礎上才能更方面的自動化,點點滑鼠或者敲幾個命令即可完成一項複雜的工作任務,爽哉爽哉!

因此,所有的操作儘可能自動化,減少人為失誤,提高工作效率。

主流伺服器集中管理工具:Ansible、Saltstack

這兩個選擇任意一個就行。

持續整合工具:Jenkins

5、Python開發進階

可以再深入學習下Python開發,掌握面向物件程式設計。

最好也掌學習一個Web框架開發網站,例如Django、Flask,主要是開發運維管理系統,將一些複雜的流程寫到平臺中,再整合集中管理工具,可打造一個屬於運維自己的管理平臺。

具體學習思路可看歷史文章:《啟示錄:如何打造運維自動化平臺》

6、日誌分析系統

日誌也很重要,定期的分析,可發現潛在隱患,提煉出有價值的東西。

開源的一套日誌系統:ELK

學會部署使用,給開發提供日誌檢視需求。

7、效能優化

只會部署是遠遠不夠的,效能優化能最大化提升服務承載量。

這塊也是比較難的,也是高薪的關鍵點之一,為了錢也得下點功夫學習啊!

可以從硬體層、作業系統層、軟體層和架構層維度展開思考。

小結:

武器型別

武器名稱

文字處理

grep、sed、awk

資料傳輸

Rsync、Scp、Inodify/Sersync

程序管理

Supervisor

效能分析

top、free、df、iftop、iostat、vmstat、dstat、sar、sysdig

網路服務

vsftp、nfs、samba、bind、dhcp、postfix

Web服務

Aapache、Nginx、Tomcat、JBoss、Resin

資料庫

MySQL、MariaDB、Percona Server for MySQL

NoSQL

Redis、MongoDB

訊息中介軟體

RabbitMQ、ActiveMQ

版本管理

SVN、Git

靜態快取

Squid、Varnish、Nginx

負載均衡

LVS、HAProxy、Nginx

高可用軟體

Keepalived、Heartbeat、DRBD、corosync+pacemaker

集中管理工具

Ansible、Saltstack、Chef、Puppet

虛擬化與雲平臺

KVM、Xen、Docker、Kubernetes、Openstack、Cloudstack

自動裝機

Kickstart、Cobbler

抓包分析

Tcpdump、Wireshark

持續整合

Jenkins、Gitlab

MySQL代理

Altas、Cobar、Mycat

壓測

ab、fio、sysbench、mysqlslap

安全檢查

chrootkit、rkhunter

日誌系統

ELK

監控

Zabbix、Cacti、Nagios、Grafana

意識

1、堅持

學習是一個很漫長的過程,是我們每個人需要用一生去堅持的事業。

貴在堅持,難在堅持,成在堅持!

2、目標

沒有目標的不叫工作,沒有量化的不叫目標。

每到一個階段,制定一個目標。

比如:先定一個能達到的小目標,掙它一個億!

3、分享

學會分享,技術的價值在於能有效地將知識傳遞到外界,讓更多的人知道它。

只要人人都拿出一點東西來,想想會變成什麼樣?

方向對了,就不怕路遠了!

QQ技術交流群:

(Python運維開發群 249171211)

(Docker技術交流群 719105297)