從苦逼到牛逼!2019年最全最新Linux運維工程師必備技能圖譜……
運維工程師在前期是一個很苦逼的工作,在這期間可能幹著修電腦、掐網線、搬機器的活,顯得沒地位!時間也很碎片化,各種零碎的瑣事圍繞著你,很難體現個人價值,漸漸的對行業很迷茫,覺得沒什麼發展前途。
這些枯燥無味工作的確會使人匱乏,從技術層面講這些其實都是基本功,對後期的運維工作會無形中帶來一定的幫助,因為我也是這麼過來的,能深刻體會到。所以在這個時期一定要保持積極向上的心態,持續的學習。在未來的某一天,相信會回報給你的!
好了,進入正題,根據我多年的運維工作經驗,給大家分享下高階運維工程師學習路線。
初級
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叢集化管理容器,形成一個大的資源池,集中管理,為基礎架構提供有力的支撐。
4、自動化
反反覆覆重複的工作,不但提高不了效率,價值也得不到體現。
一切運維工作標準化,例如環境版本、目錄結構、作業系統等統一。在標準化基礎上才能更方面的自動化,點點滑鼠或者敲幾個命令即可完成一項複雜的工作任務,爽哉爽哉!
因此,所有的操作儘可能自動化,減少人為失誤,提高工作效率。
主流伺服器集中管理工具:Ansible、Saltstack
這兩個選擇任意一個就行。
持續整合工具:Jenkins
5、Python開發進階
可以再深入學習下Python開發,掌握物件導向程式設計。
最好也掌學習一個Web框架開發網站,例如Django、Flask,主要是開發運維管理系統,將一些複雜的流程寫到平臺中,再整合集中管理工具,可打造一個屬於運維自己的管理平臺。
6、日誌分析系統
日誌也很重要,定期的分析,可發現潛在隱患,提煉出有價值的東西。
開源的一套日誌系統:ELK
學會部署使用,給開發提供日誌檢視需求。
7、效能最佳化
只會部署是遠遠不夠的,效能最佳化能最大化提升服務承載量。
這塊也是比較難的,也是高薪的關鍵點之一,為了錢也得下點功夫學習啊!
可以從硬體層、作業系統層、軟體層和架構層維度展開思考。
意識
1、堅持
學習是一個很漫長的過程,是我們每個人需要用一生去堅持的事業。
貴在堅持,難在堅持,成在堅持!
2、目標
沒有目標的不叫工作,沒有量化的不叫目標。
每到一個階段,制定一個目標。
比如:先定一個能達到的小目標,掙它一個億!
3、分享
學會分享,技術的價值在於能有效地將知識傳遞到外界,讓更多的人知道它。
只要人人都拿出一點東西來,想想會變成什麼樣?
方向對了,就不怕路遠了!
十項Linux常識
1、GNU和GPL
GNU計劃(又稱革奴計劃),是由Richard Stallman(理查德·斯托曼)在1983年9月27日公開發起的自由軟體集體協作計劃。它的目標是建立一套完全自由的作業系統。GNU也稱為自由軟體工程專案。
GPL是GNU的通用公共許可證(GNU General Public License,GPL),即“反版權”概念,是GNU協議之一,目的是保護GNU軟體可以自由的使用、複製、研究、修改和釋出。同時要求軟體必須以原始碼的形式釋出。
GNU系統與Linux核心結合構成一個完整的作業系統:一個基於Linux的GNU系統,該作業系統在通常情況下稱為“GNU/Linux”,或簡稱Linux。
2、Linux發行版
一個典型的Linux發行版包括:Linux核心,一些GNU程式庫和工具,命令列shell,圖形介面的X Window系統和相應的桌面環境,如KDE或GNOME,幷包含數千種從辦公套件,編譯器,文字編輯器到科學工具的應用軟體。
主流的發行版:
Red Hat Enterprise Linux、CentOS、SUSE、Ubuntu、Debian、Fedora、Gentoo
3、Unix和Linux
Linux是基於Unix的,屬於Unix類,Uinx作業系統支援多使用者、多工、多執行緒和支援多種CPU架構的作業系統。Linux繼承了Unix以網路為核心的設計思想,是一個效能穩定的多使用者網路作業系統。
4、Swap分割槽
Swap分割槽,即交換區,系統在實體記憶體不夠時,與Swap進行交換。即當系統的實體記憶體不夠用時,把硬碟中一部分空間釋放出來,以供當前執行的程式使用。當那些程式要執行時,再從Swap分割槽中恢復儲存的資料到記憶體中。那些被釋放記憶體空間的程式一般是很長時間沒有什麼操作的程式。
Swap空間一般應大於或等於實體記憶體的大小,同時最小不應小於64M,最大應該是實體記憶體的兩倍。
5、GRUB的概念
GNU GRUB(GRand Unified Bootloader簡稱“GRUB”)是一個來自GNU專案的多作業系統啟動引導管理程式。
GRUB是一個支援多種作業系統的啟動引導管理器,在一臺有多個作業系統的計算機中,可以透過GRUB在計算機啟動時選擇使用者希望執行的作業系統。同時GRUB可以引導Linux系統分割槽上的不同核心,也可用於向核心傳遞啟動引數,如進入單使用者模式。
6、Buffer和Cache
Cache(快取)位於CPU與記憶體之間的臨時儲存器,快取容量比記憶體小的多但交換速度比記憶體要快得多。Cache透過快取檔案資料塊,解決CPU運算速度與記憶體讀寫速度不匹配的矛盾,提高CPU和記憶體之間的資料交換速度。Cache快取越大,CPU處理速度越快。
Buffer(緩衝)高速緩衝儲存器,透過快取磁碟(I/O裝置)資料塊,加快對磁碟上資料的訪問,減少I/O,提高記憶體和硬碟(或其他I/O裝置)之間的資料交換速度。Buffer是即將要被寫入磁碟的,而Cache是被從磁碟中讀出來的。
7、TCP三次握手
(1)請求端傳送SYN(SYN=A)資料包,等待響應端確認
(2)響應端接收SYN,並返回SYN(A+1)和自己的ACK(K)包給請求端
(3)請求端接收到響應端的SYN+ACK包,再次向響應端傳送確認包ACK(K+1)
請求端和響應端建立TCP連線,完成三次握手,開始進行資料傳輸。
8、linux系統目錄結構
Linux檔案系統採用帶連結的樹形目錄結構,即只有一個根目錄(通常用“/”表示),其中含有下級子目錄或檔案的資訊;子目錄中又可含有更下級的子目錄或者檔案的資訊。
/:第一層次結構的根,整個檔案系統層次結構的根目錄。即檔案系統的入口,最高一級目錄。
/boot:包含Linux核心及系統載入程式所需的檔案,例如kernel、initrd;grub系統引導管理器也在這個目錄下。
/bin:基本系統所需要的命令,功能和"/usr/bin"類似,這個目錄下的檔案都是可執行的.普通使用者也是可以執行的。
/sbin:基本的系統維護命令,只能由超級使用者使用。
/etc:所有的系統配置檔案。
/dev:裝置檔案儲存目錄.像終端、磁碟、光碟機等。
/var:存放經常變動的資料,像日誌、郵件等。
/home:普通使用者的目錄預設儲存目錄。
/opt:第三方軟體的存放目錄,比如使用者自定義軟體包和編譯的軟體包就安裝到這個目錄中。
/lib:庫檔案和核心模組存放目錄,包含系統程式所需要的所有共享庫檔案。
9、硬連結和軟連結
硬連結(Hard Link):硬連結是使用同一個索引節點(inode號)的連結, 即可以允許多個檔名指向同一個檔案索引節點(硬連結不支援目錄連結,不能跨分割槽連結),刪除一個硬連結,不會影響該索引節點的原始檔以及其下的多個硬連結。
ln source new-link
軟連線(符號連結,Symbolic Link):符號連結是以路徑的形式建立的連結,類似於windows的快捷方式連結,符號連結允許建立多個檔名連結到同一個原始檔,刪除原始檔,其下的所有軟連線將不可用。(軟連線支援目錄,支援跨分割槽、跨檔案系統)
ln -s source new-link
10、RAID技術
磁碟陣列(Redundant Arrays of independent Disks,RAID),廉價冗餘(獨立)磁碟陣列。
RAID是一種把多塊獨立的物理硬碟按不同的方式組合起來形成一個硬碟組(邏輯硬碟),提供比單個硬碟更高的儲存效能和資料備份技術。RAID技術,可以實現把多個磁碟組合在一起作為一個邏輯卷提供磁碟跨越功能;可以把資料分成多個資料塊(Block)並行寫入/讀出多個磁碟以提高訪問磁碟的速度;可以透過映象或校驗操作提供容錯能力。具體的功能以不同的RAID組合實現。
在使用者看來,RAID組成的磁碟組就像是一個硬碟,可以對它進行分割槽、格式化等操作。RAID的儲存速度比單個硬碟高很多,並且可以提供自動資料備份,提供良好的容錯能力。
RAID級別,不同的RAID組合方式分為不同的RAID級別:
RAID 0:稱為Stripping條帶儲存技術,所有磁碟完全地並行讀,並行寫,是組建磁碟陣列最簡單的一種形式,只需要2塊以上的硬碟即可,成本低,可以提供整個磁碟的效能和吞吐量,但RAID 0沒有提供資料冗餘和錯誤修復功能,因此單塊硬碟的損壞會導致所有的資料丟失。(RAID 0只是單純地提高磁碟容量和效能,沒有為資料提供可靠性保證,適用於對資料安全性要求不高的環境)
RAID 1:映象儲存,透過把兩塊磁碟中的一塊磁碟的資料映象到另一塊磁碟上, 實現資料冗餘,在兩塊磁碟上產生互為備份的資料,其容量僅等於一塊磁碟的容量。當資料在寫入一塊磁碟時,會在另一塊閒置的磁碟上生產映象,在不影響效能情況下最大限度的保證系統的可靠性和可修復性;當原始資料繁忙時,可直接從映象複製中讀取資料(從兩塊硬碟中較快的一塊中讀出),提高讀取效能。相反的,RAID 1的寫入速度較緩慢。RAID 1一般支援“熱交換”,即陣列中硬碟的移除或替換可以在系統執行狀態下進行,無須中斷退出系統。RAID 1是磁碟陣列中硬碟單位成本最高的,但它提供了很高的資料安全性、可靠性和可用性,當一塊硬碟失效時,系統可以自動切換到映象磁碟上讀寫,而不需要重組失效的資料。
RAID 0+1:也被稱為RAID 10,實際是將RAID 0和RAID 1結合的形式,在連續地以位或位元組為單位分割資料並且並行讀/寫多個磁碟的同時,為每一塊磁碟做映象進行冗餘。透過RAID 0+1的組合形式,資料除分佈在多個盤上外,每個盤都有其物理映象盤,提供冗餘能力,允許一個以下磁碟故障,而不影響資料可用性,並且有快速讀/寫能力。RAID 0+1至少需要4個硬碟在磁碟映象中建立帶區集。RAID 0+1技術在保證資料高可靠性的同時,也保證了資料讀/寫的高效性。
RAID 5:是一種儲存效能、資料安全和儲存成本兼顧的儲存解決方案。RAID 5可以理解為是RAID 0和RAID 1的折衷方案,RAID 5至少需要三塊硬碟。RAID 5可以為系統提供資料安全保障,但保障程度要比映象低而磁碟空間利用率要比映象高。RAID 5具有和RAID 0相近似的資料讀取速度,只是多了一個奇偶校驗資訊,寫入資料的速度比對單個磁碟進行寫入操作稍慢。同時由於多個資料對應一個奇偶校驗資訊,RAID 5的磁碟空間利用率要比RAID 1高,儲存成本相對較低,是目前運用較多的一種解決方案。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31407649/viewspace-2648578/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Linux運維技能圖譜Linux運維
- Linux運維工程師必備工具合集Linux運維工程師
- web前端工程師必備技能Web前端工程師
- 運維工程師必備Linux常見安全策略與實踐運維工程師Linux
- Linux運維工程師必備的82個工具全集(上),速收!Linux運維工程師
- Linux運維工程師必備的82個工具全集(下),速收!Linux運維工程師
- linux雲端計算運維發展如何?學習linux運維工程師技能Linux運維工程師
- Linux運維工程師需要掌握什麼技能?Linux入門教程Linux運維工程師
- Linux基礎系統最佳化有哪些必備技能?Linux運維Linux運維
- 掌握運維必備技能--問題故障定位運維
- 運維工程師思維導圖運維工程師
- Linux 運維工程師入門和學習必經之路!Linux運維工程師
- AI工程師必備技能 - 凸優化介紹AI工程師優化
- 牛逼程式設計師必須要掌握金字塔思維程式設計師
- AI工程師必備技能 - 凸最佳化介紹AI工程師
- Linux運維工程師筆試題Linux運維工程師筆試
- 運維必知 | 從底層到應用,入門大資料必備技能彙總!運維大資料
- Web前端必備基礎知識點,百萬程式設計師:牛逼!Web前端程式設計師
- 什麼是Linux運維?Linux運維工程師需要做什麼?Linux運維工程師
- 優秀的DevOps工程師必須具備的軟技能dev工程師
- PHP全棧工程師必備技能select2的使用PHP全棧工程師
- 影像處理演算法工程師必備技能總結演算法工程師
- 程式設計師必備畫圖技能之——時序圖程式設計師時序圖
- 前端切圖必備技能前端
- 高薪全棧工程師必備 Linux 基礎高薪全棧工程師Linux
- 【IT運維】Linux運維需要掌握哪些技能?運維Linux
- Linux運維工程師有錢途嗎?Linux運維工程師
- Linux運維工程師的操作規範Linux運維工程師
- 做好一名linux運維工程師Linux運維工程師
- Linux運維工程師可是很吃香的Linux運維工程師
- Linux 運維必備 150 個命令彙總Linux運維
- linux網路工程師需要掌握哪些技能?linux網路工程師技能分析Linux工程師
- 為什麼Linux運維工程師必須學習Shell程式設計?Linux運維工程師程式設計
- Linux運維必備技術有哪些?運維要學開發Linux運維
- 運維工程師可以做哪些方面的工作?Linux運維運維工程師Linux
- Linux運維工程師面試題之一Linux運維工程師面試題
- Linux運維工程師常用的工具有哪些?Linux運維工程師
- Linux運維工程師有必要提升自己嗎?Linux運維工程師