首頁  >  文章  >  運維  >  Linux運維如何從初級進階為高級

Linux運維如何從初級進階為高級

步履不停
步履不停原創
2019-06-18 18:15:002737瀏覽

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、目標

Linux運維如何從初級進階為高級

Linux運維如何從初級進階為高級

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

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

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

#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高,儲存成本相對較低,是目前運用較多的一種解決方案。

更多Linux相關技術文章,請造訪Linux教學欄位學習!

#

以上是Linux運維如何從初級進階為高級的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn