運維初級到高級進階知識要點

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

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

好了,進入正題,根據我多年的運維工做經驗,給你們分享下高級運維工程師學習路線。linux

初級ios

一、Linux基礎sql

剛開始階段須要熟悉Linux/Windows操做系統安裝,目錄結構、啓動流程等。shell

二、系統管理數據庫

主要學習Linux系統,生產環境中基本都在字符界面完成工做,因此要掌握經常使用的幾十個基本管理命令,包括用戶管理、磁盤分區、軟件包管理、文件權限、文本處理、進程管理、性能分析工具等。編程

三、網絡基礎windows

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

四、Shell腳本編程基礎

掌握Shell基本語法結構,能編寫簡單的腳本便可。

中級

一、網絡服務

最經常使用的網絡服務必定得會部署,好比vsftp、nfs、samba、bind、dhcp等。

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

常常在服務器之間傳輸數據,因此要會使用:rsync和scp。

數據同步:inotify/sersync。

重複性完成一些工做,可寫成腳本定時去運行,因此得會配置Linux下的定時任務服務crond。

二、Web服務

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

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

若是是JAVA語言開發的,一般使用Tomcat運行項目,爲了提升訪問速度,可使用Nginx反向代理Tomcat,Nginx處理靜態頁面,Tomcat處理動態頁面,實現動靜分離。

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

三、數據庫

數據庫選擇MySQL,它是世界上使用最爲普遍的開源數據庫。學它準沒錯!也要會一些簡單的SQL語句、用戶管理、經常使用存儲引擎、數據庫備份與恢復。

想要深刻點,必須會主從複製、性能優化、主流集羣方案:MHA、MGR等。NoSQL這麼流行固然也少不了,學下Redis、MongoDB這兩個就行了。

四、安全

安全很重要,不要等到系統被入侵了,再作安全策略,此時已晚!因此,當一臺服務器上線後應立刻作安全訪問控制策略,好比使用iptables限制只容許信任源IP訪問,關閉一些無用的服務和端口等。

一些常見的攻擊類型必定得知道啊,不然怎麼對症下藥呢!好比CC、DDOS、ARP等。

五、監控系統

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

也能夠弄個儀表盤展現幾個實時關鍵的數據,好比Grafana,會很是炫酷。

六、Shell腳本編程進階

Shell腳本是Linux自動完成工做的利器,必須得熟練編寫,因此得進一步學習函數、數組、信號、發郵件等。

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

七、Python開發基礎

Shell腳本只能完成一些基本的任務,想要完成更復雜些的任務,好比調用API、多進程等。就須要學高級語言了。

Python是運維領域使用最多的語言,簡單易用,學它準沒錯!此階段掌握基礎就能夠了,例如基本語法結構、文件對象操做、函數、迭代對象、異常處理、發郵件、數據庫編程等。

高級

一、Web靜態緩存

用戶老喊着訪問網站慢,看看服務器資源還很富裕啊!網站訪問慢也許不是服務器資源飽和致使的,影響因素不少,例如網絡、轉發層數等。

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

若是不用CDN,也可使用Squid、Varnish、Nginx這樣的緩存服務實現靜態頁面緩存,放到流量入口處。

二、集羣

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

Web服務器性能瓶頸解決了,數據庫更爲關鍵,仍是採用集羣,就拿學的MySQL來講,能夠一主多從架構,在此基礎上讀寫分離,主負責寫,多從負責讀,從庫可水平擴展,前面再來個四層負載均衡器,承載千萬級PV,妥妥的!

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

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

三、虛擬化

硬件服務器資源利用率很低,甚是浪費!能夠把空閒多的服務器虛擬化,弄成不少個的虛擬機,每一個虛擬機就是一個完整的操做系統。能夠很大程度提升資源利用率。建議學習開源的KVM+OpenStack雲平臺。

虛擬機做爲基礎平臺還能夠,但應用業務彈性伸縮也過重量了吧!啓動好幾分鐘,文件又這麼大,快速擴展太費勁了!

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

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

固然,生產環境單機Docker大多數狀況下是沒法知足業務需求的,能夠部署Kubernetes、Swarm集羣化管理容器,造成一個大的資源池,集中管理,爲基礎架構提供有力的支撐。

四、自動化

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

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

所以,全部的操做盡量自動化,減小人爲失誤,提升工做效率。

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

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

持續集成工具:Jenkins

五、Python開發進階

能夠再深刻學習下Python開發,掌握面向對象編程。

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

六、日誌分析系統

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

開源的一套日誌系統:ELK

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

七、性能優化

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

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

能夠從硬件層、操做系統層、軟件層和架構層維度展開思考。

武器類型 武器名稱
文本處理 grep、sed、awk
數據傳輸 Rsync、Scp、Inodify/Sersync
進程管理 Supervisor
性能分析 top、free、df、iftop、iostat、vmstat、dstat、sar、sysdig
網絡服務 vsftp、nfs、samba、bind、dhcp、postfix
Web服務 Apache、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

意識

一、堅持

學習是一個很漫長的過程,是咱們每一個人須要用一輩子去堅持的事業。

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

二、目標

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

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

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

三、分享

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

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

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

十項Linux常識

一、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。

二、Linux發行版

一個典型的Linux發行版包括:Linux內核,一些GNU程序庫和工具,命令行shell,圖形界面的X Window系統和相應的桌面環境,如KDE或GNOME,幷包含數千種從辦公套件,編譯器,文本編輯器到科學工具的應用軟件。

主流的發行版:

Red Hat Enterprise Linux、CentOS、SUSE、Ubuntu、Debian、Fedora、Gentoo

三、Unix和Linux

Linux是基於Unix的,屬於Unix類,Uinx操做系統支持多用戶、多任務、多線程和支持多種CPU架構的操做系統。Linux繼承了Unix以網絡爲核心的設計思想,是一個性能穩定的多用戶網絡操做系統。

四、Swap分區

Swap分區,即交換區,系統在物理內存不夠時,與Swap進行交換。即當系統的物理內存不夠用時,把硬盤中一部分空間釋放出來,以供當前運行的程序使用。當那些程序要運行時,再從Swap分區中恢復保存的數據到內存中。那些被釋放內存空間的程序通常是很長時間沒有什麼操做的程序。

Swap空間通常應大於或等於物理內存的大小,同時最小不該小於64M,最大應該是物理內存的兩倍。

五、GRUB的概念

GNU GRUB(GRand Unified Bootloader簡稱「GRUB」)是一個來自GNU項目的多操做系統啓動引導管理程序。

GRUB是一個支持多種操做系統的啓動引導管理器,在一臺有多個操做系統的計算機中,能夠經過GRUB在計算機啓動時選擇用戶但願運行的操做系統。同時GRUB能夠引導Linux系統分區上的不一樣內核,也可用於向內核傳遞啓動參數,如進入單用戶模式。

六、Buffer和Cache

Cache(緩存)位於CPU與內存之間的臨時存儲器,緩存容量比內存小的多但交換速度比內存要快得多。Cache經過緩存文件數據塊,解決CPU運算速度與內存讀寫速度不匹配的矛盾,提升CPU和內存之間的數據交換速度。Cache緩存越大,CPU處理速度越快。

Buffer(緩衝)高速緩衝存儲器,經過緩存磁盤(I/O設備)數據塊,加快對磁盤上數據的訪問,減小I/O,提升內存和硬盤(或其餘I/O設備)之間的數據交換速度。Buffer是即將要被寫入磁盤的,而Cache是被從磁盤中讀出來的。

七、TCP三次握手

(1)請求端發送SYN(SYN=A)數據包,等待響應端確認

(2)響應端接收SYN,並返回SYN(A+1)和本身的ACK(K)包給請求端

(3)請求端接收到響應端的SYN+ACK包,再次向響應端發送確認包ACK(K+1)

請求端和響應端創建TCP鏈接,完成三次握手,開始進行數據傳輸。

八、linux系統目錄結構

Linux文件系統採用帶連接的樹形目錄結構,即只有一個根目錄(一般用「/」表示),其中含有下級子目錄或文件的信息;子目錄中又可含有更下級的子目錄或者文件的信息。

  • /:第一層次結構的根,整個文件系統層次結構的根目錄。即文件系統的入口,最高一級目錄。
  • /boot:包含Linux內核及系統引導程序所需的文件,例如kernel、initrd;grub系統引導管理器也在這個目錄下。
  • /bin:基本系統所須要的命令,功能和"/usr/bin"相似,這個目錄下的文件都是可執行的.普通用戶也是能夠執行的。
  • /sbin:基本的系統維護命令,只能由超級用戶使用。
  • /etc:全部的系統配置文件。
  • /dev:設備文件存儲目錄.像終端、磁盤、光驅等。
  • /var:存放常常變更的數據,像日誌、郵件等。
  • /home:普通用戶的目錄默認存儲目錄。
  • /opt:第三方軟件的存放目錄,好比用戶自定義軟件包和編譯的軟件包就安裝到這個目錄中。
  • /lib:庫文件和內核模塊存放目錄,包含系統程序所須要的全部共享庫文件。

九、硬連接和軟連接

硬連接(Hard Link):硬連接是使用同一個索引節點(inode號)的連接, 便可以容許多個文件名指向同一個文件索引節點(硬連接不支持目錄連接,不能跨分區連接),刪除一個硬連接,不會影響該索引節點的源文件以及其下的多個硬連接。

ln source new-link

軟鏈接(符號連接,Symbolic Link):符號連接是以路徑的形式建立的連接,相似於windows的快捷方式連接,符號連接容許建立多個文件名連接到同一個源文件,刪除源文件,其下的全部軟鏈接將不可用。(軟鏈接支持目錄,支持跨分區、跨文件系統)

ln -s source new-link

十、RAID技術

磁盤陣列(Redundant Arrays of independent Disks,RAID),廉價冗餘(獨立)磁盤陣列。

RAID是一種把多塊獨立的物理硬盤按不一樣的方式組合起來造成一個硬盤組(邏輯硬盤),提供比單個硬盤更高的存儲性能和數據備份技術。RAID技術,能夠實現把多個磁盤組合在一塊兒做爲一個邏輯卷提供磁盤跨越功能;能夠把數據分紅多個數據塊(Block)並行寫入/讀出多個磁盤以提升訪問磁盤的速度;能夠經過鏡像或校驗操做提供容錯能力。具體的功能以不一樣的RAID組合實現。

在用戶看來,RAID組成的磁盤組就像是一個硬盤,能夠對它進行分區、格式化等操做。RAID的存儲速度比單個硬盤高不少,而且能夠提供自動數據備份,提供良好的容錯能力。

RAID級別,不一樣的RAID組合方式分爲不一樣的RAID級別:

  1. RAID 0:稱爲Stripping條帶存儲技術,全部磁盤徹底地並行讀,並行寫,是組建磁盤陣列最簡單的一種形式,只須要2塊以上的硬盤便可,成本低,能夠提供整個磁盤的性能和吞吐量,但RAID 0沒有提供數據冗餘和錯誤修復功能,所以單塊硬盤的損壞會致使全部的數據丟失。(RAID 0只是單純地提升磁盤容量和性能,沒有爲數據提供可靠性保證,適用於對數據安全性要求不高的環境)
  2. RAID 1:鏡像存儲,經過把兩塊磁盤中的一塊磁盤的數據鏡像到另外一塊磁盤上, 實現數據冗餘,在兩塊磁盤上產生互爲備份的數據,其容量僅等於一塊磁盤的容量。當數據在寫入一塊磁盤時,會在另外一塊閒置的磁盤上生產鏡像,在不影響性能狀況下最大限度的保證系統的可靠性和可修復性;當原始數據繁忙時,可直接從鏡像拷貝中讀取數據(從兩塊硬盤中較快的一塊中讀出),提升讀取性能。相反的,RAID 1的寫入速度較緩慢。RAID 1通常支持「熱交換」,即陣列中硬盤的移除或替換能夠在系統運行狀態下進行,無須中斷退出系統。RAID 1是磁盤陣列中硬盤單位成本最高的,但它提供了很高的數據安全性、可靠性和可用性,當一塊硬盤失效時,系統能夠自動切換到鏡像磁盤上讀寫,而不須要重組失效的數據。
  3. RAID 0+1:也被稱爲RAID 10,實際是將RAID 0和RAID 1結合的形式,在連續地以位或字節爲單位分割數據而且並行讀/寫多個磁盤的同時,爲每一塊磁盤作鏡像進行冗餘。經過RAID 0+1的組合形式,數據除分佈在多個盤上外,每一個盤都有其物理鏡像盤,提供冗餘能力,容許一個如下磁盤故障,而不影響數據可用性,而且有快速讀/寫能力。RAID 0+1至少須要4個硬盤在磁盤鏡像中創建帶區集。RAID 0+1技術在保證數據高可靠性的同時,也保證了數據讀/寫的高效性。
  4. RAID 5:是一種存儲性能、數據安全和存儲成本兼顧的存儲解決方案。RAID 5能夠理解爲是RAID 0和RAID 1的折衷方案,RAID 5至少須要三塊硬盤。RAID 5能夠爲系統提供數據安全保障,但保障程度要比鏡像低而磁盤空間利用率要比鏡像高。RAID 5具備和RAID 0相近似的數據讀取速度,只是多了一個奇偶校驗信息,寫入數據的速度比對單個磁盤進行寫入操做稍慢。同時因爲多個數據對應一個奇偶校驗信息,RAID 5的磁盤空間利用率要比RAID 1高,存儲成本相對較低,是目前運用較多的一種解決方案。
相關文章
相關標籤/搜索