004 | Linux云計(jì)算架構(gòu)師課程介紹
本文為《跟馬哥學(xué)Linux》系列文章的第四篇,上一篇文章為《 Linux云計(jì)算高端課程上課紀(jì)律》。
在正式開始之前,簡(jiǎn)單說明一下整個(gè)Linux整個(gè)課程體系。Linux運(yùn)維課程體系大綱有哪些,讓各位充分了解一下課程主要有哪些,會(huì)涉及哪些要點(diǎn)。大體上將課程分為兩個(gè)階段。分為中級(jí)和高級(jí)的內(nèi)容,我對(duì)他做一下簡(jiǎn)單說明:
首先,講一下Linux入門課程主要講解:Linux操作系統(tǒng)的基礎(chǔ)概念、常見的發(fā)行版本之間的差異化以及一些基礎(chǔ)命令的使用,比如與文件系統(tǒng)相關(guān)的和除文件系統(tǒng)以外,與系統(tǒng)管理相關(guān)的工具。
Linux系統(tǒng)管理課程主要包括程序包管理、分區(qū)管理等。還有,Linux服務(wù)及安全管理課程。
這三個(gè)課程對(duì)應(yīng)紅帽課程體系的認(rèn)證考試的RHCSA(紅帽認(rèn)證助理工程師)和RHCE(紅帽認(rèn)證工程師)課程,是Linux學(xué)習(xí)的基礎(chǔ)知識(shí),是運(yùn)維工作中最經(jīng)常用到的知識(shí)。對(duì)于零基礎(chǔ)同學(xué),后面相對(duì)較簡(jiǎn)單,因?yàn)槿腴T很難,后面無非是學(xué)知識(shí)或者學(xué)習(xí)新概念,這些新概念是建構(gòu)在基礎(chǔ)知識(shí)之上的。對(duì)于有基礎(chǔ)的同學(xué),希望可以有不同的收獲,可以把更多的精力放在后面知識(shí)的深入學(xué)習(xí)上。
再往后,學(xué)習(xí)Linux Cluster叫做Linux集群。
主要學(xué)習(xí)常見集群的兩種,第一種是負(fù)載均衡集群,可稱做LB Cluster。在第一階段,主要講解LB Cluster中,如何實(shí)現(xiàn)基于Nginx完成對(duì)于http協(xié)議反代模式的七層負(fù)載均衡,以及借助LVS實(shí)現(xiàn)四層負(fù)載均衡,并且會(huì)對(duì)比說明二者之間的區(qū)別和適用場(chǎng)景。
而后,會(huì)講解高可用集群,即HA Cluster。主要講解Keepalived來保證Nginx和LVS服務(wù)的高可用。
接下來,會(huì)講解Linux Ops運(yùn)維工具,它非常簡(jiǎn)單好用,目前炙手可熱的,叫做ansible,在中小型企業(yè),無大型服務(wù)器的企業(yè),ansible非常好用。
這一階段后,主要講解Linux監(jiān)控工具M(jìn)onitoring,會(huì)講zabbix。
以上為第一階段的重點(diǎn)內(nèi)容,接下來講解第二階段。
第二階段,首先會(huì)講解http服務(wù)的相關(guān)功能,在第一階段,在講到Linux服務(wù)及安全管理課程時(shí),除了會(huì)講如http這樣非常關(guān)鍵的服務(wù),還會(huì)講各位了解的lamp,lnmp等,我們額外會(huì)講cache的工具,會(huì)講到memcached和varnish等緩存系統(tǒng)。
接著,我們回頭說,第二階段首先會(huì)講解http服務(wù),不過我們此處主要講解tomcat,tomcat會(huì)花很長(zhǎng)時(shí)間講GAM運(yùn)行環(huán)境,tomcat的整體運(yùn)行框架,tomcat內(nèi)置的cast等,tomcat服務(wù)所涉及到的方方面面,都會(huì)講到。并且,在tomcat服務(wù)下,會(huì)講解如何運(yùn)用tomcat構(gòu)建lnmt或者lamt,以及會(huì)話集群session replication cluster 。
在第一階段中,會(huì)講數(shù)據(jù)存儲(chǔ)的相關(guān)內(nèi)容mysql(mariadb),他們有什么區(qū)別,我們會(huì)今后解釋。會(huì)講解mysql的基本使用、用戶、權(quán)限使用、復(fù)制。。
接著,會(huì)講http的會(huì)話集群session replication,這是tomcat。
tomcat這階段中,會(huì)引用另外一個(gè)概念分布式存儲(chǔ)系統(tǒng),先會(huì)講分布式系統(tǒng)的基本概念及原理,接著講分布式存儲(chǔ)系統(tǒng)的基本概念及原理并且會(huì)用一個(gè)實(shí)例MoglileFS或者GlusterFS來講解:什么是分布式文件系統(tǒng),什么是分布式存儲(chǔ),何為有中心節(jié)點(diǎn)的分布式,何為無中心節(jié)點(diǎn)的分布式。并且會(huì)講解如何用Nginx反代用戶請(qǐng)求整合MoglileFS,以構(gòu)建一個(gè)企業(yè)級(jí)應(yīng)用當(dāng)中的分布式圖片存儲(chǔ)系統(tǒng)。
還講HA Cluster中的另外一種實(shí)現(xiàn):Corosync集群+pacemaker集群,以及RHCS套件,命令行管理工具pcs/crmsh。接下來講解Mysql,如HA Cluster、MHA機(jī)制、備份和恢復(fù)工具使用、MySQL Replcation(復(fù)制功能)、Read-Write splitting(讀寫分離機(jī)制)。還有NoSQL,包括redis(KV存儲(chǔ)),mongodb(文檔存儲(chǔ)),HBase等。接下來講一下Linux運(yùn)維工具Ops,包括puppet(自動(dòng)化運(yùn)維工具),saltstack(基于puppet編寫),cobbler等
接下來講解虛擬化,會(huì)講到Linux操作系統(tǒng)原理,如CPU、進(jìn)程、內(nèi)存、磁盤管理、I/O、文件系統(tǒng)等,借助于虛擬化技術(shù)原理,深入理解像VMware、KVM、容器技術(shù)的LSC的實(shí)現(xiàn)。以及kvm虛擬化應(yīng)用詳解,例如xen虛擬化解決方案等。緊接著,會(huì)講虛擬化網(wǎng)絡(luò),它是基于軟件構(gòu)建網(wǎng)絡(luò),利用純軟件構(gòu)建交換機(jī)、路由器,需要了解SDN(軟件定義網(wǎng)絡(luò))。還會(huì)講到OpenStack云棧,會(huì)涉及到Docker(容器):基礎(chǔ):卷管理、虛擬化網(wǎng)絡(luò)、映像文件,容器云等。會(huì)介紹ELK Stack(日志分析工具),即為ElasticSearch搜索引擎,Logstash(日志搜尋工具)Kibana(日志展示工具)。接下來,會(huì)講炙手可熱的大數(shù)據(jù),講到Hadoop v2版,分布式并行存儲(chǔ)及分析平臺(tái)等,而HBase是運(yùn)行在Hadoop之上的,還包括Hive,Storm,Spark等。
還有一個(gè)知識(shí)點(diǎn)叫做系統(tǒng)優(yōu)化,系統(tǒng)優(yōu)化在紅帽教材中被稱作black art,是黑色藝術(shù)。叫這個(gè)的原因是,它百分之九十五是講理論,百分之五是動(dòng)手調(diào)參數(shù)。而對(duì)于中小型企業(yè)來講,除了那些特別有影響的關(guān)鍵參數(shù)我們需要調(diào),其他的不調(diào),真正有能力調(diào)參數(shù)的大公司是進(jìn)行二次研發(fā)的。不要隨意的優(yōu)化,因?yàn)椋闼吹降钠款i未必是瓶頸。
你看到CPU慢了,有可能是內(nèi)存太小導(dǎo)致的,系統(tǒng)優(yōu)化需謹(jǐn)慎。后面我們學(xué)習(xí)Python編程,它是一種技能,我們要想學(xué)好一門編程語言,學(xué)習(xí)它的語法非常容易,想用它來建構(gòu)工具是非常困難度,所以,Python課程不以培養(yǎng)Python開發(fā)工程師為目標(biāo),對(duì)于運(yùn)維人員來說,能是看懂別人寫的工具就可以,培養(yǎng)你自己寫,不是讓你自己開發(fā)。
在第一階段,還會(huì)學(xué)習(xí)另一個(gè)內(nèi)容,叫做shell腳本編程。這些內(nèi)容遠(yuǎn)遠(yuǎn)超過RHCA的課程。這些課程是很難的。
講一下學(xué)習(xí)階段,第一個(gè)是教室學(xué)習(xí),大概是4個(gè)月時(shí)間,第二階段是工作學(xué)習(xí)階段,我們學(xué)的東西,交給你了,你畢業(yè)了不要全還給老師,找工作沒信心。這很正常,面對(duì)任何事情,你永遠(yuǎn)不可能準(zhǔn)備好,準(zhǔn)備全面就可以了。你只需要按要求寫好博客,筆記做好,在課程結(jié)束之前把所有的筆記和博客梳理出來,做成一本書,拿著去面試,不斷的看書面試。
即便沒有任何基礎(chǔ),不斷的根據(jù)面試的問題,查找自己的不足。差不多是個(gè)面試,會(huì)找到自己合適的工作,然后可以上班了。工作的過程中,不斷的看筆記,看視頻,讓自己的知識(shí)不斷的擴(kuò)充和加深。第二個(gè)階段大概有八個(gè)月或者一年多時(shí)間。不求工資高,找一個(gè)對(duì)自己運(yùn)維生涯有幫助的公司。
把課堂的知識(shí)轉(zhuǎn)換為在生產(chǎn)環(huán)境中可用的技能,才可以踏入第二個(gè)階段。
接下來,講解IT技術(shù)領(lǐng)域的崗位做一下簡(jiǎn)單的描述,崗位主要分為研發(fā)和應(yīng)用,對(duì)于研發(fā),又分為硬件研發(fā)和軟件研發(fā)。硬件研發(fā)就是設(shè)計(jì)電路板。另外是軟件研發(fā),為什么會(huì)用到軟件,很容易理解,就像買到一個(gè)自動(dòng)洗衣機(jī),沒有任何操作接口或者按鈕是不可能轉(zhuǎn)動(dòng)起來的。操作接口背后的邏輯,比硬件要復(fù)雜很多。注意,硬件的接口很簡(jiǎn)陋。任何的硬件生產(chǎn)出來后,依然以洗衣機(jī)為例,剛剛生產(chǎn)出洗衣機(jī),如果沒有便捷的你能看到的控制接口的話,你想讓他轉(zhuǎn)起來,非常不方便開啟和使用,但他給我們一個(gè)按鈕或者遙控器,這是一種使用方案,讓雙方進(jìn)行交互的使用工具,我們通常稱之為接口,這是在計(jì)算機(jī)中,常用的稱呼。而各種硬件的接口的底層是非常丑陋的,為了盡可能讓用戶方便使用,接口做的越簡(jiǎn)單越好,并不是你看上去簡(jiǎn)單,他就真的簡(jiǎn)單,而是背后的復(fù)雜邏輯層次隱藏了。
跟我們以前任何領(lǐng)域所涉及到的復(fù)雜邏輯層次是近似的,當(dāng)任何層次太復(fù)雜了,我們?cè)撊绾谓鉀Q。我們就在這個(gè)復(fù)雜層次上建構(gòu)一個(gè)抽象層,讓抽象層把底層復(fù)雜邏輯結(jié)構(gòu)隱藏起來,輸出出來就極為簡(jiǎn)單。
在計(jì)算機(jī)硬件設(shè)備剛生產(chǎn)出來的時(shí)候,他只有硬件連接接口,在硬件上實(shí)現(xiàn)復(fù)雜邏輯接口是很困難的,他需要的代價(jià)是非常大的,而且是寫死的。利用硬件實(shí)現(xiàn)功能的話,想變個(gè)花樣,非常困難,因?yàn)樗枪袒摹V荒苁褂密浖姆绞?,在此之上附加一層更?fù)雜的邏輯來解決這個(gè)問題。而這個(gè)邏輯其實(shí)就是軟件,所以,硬件所提供的接口過于底層和難操作,我們需要軟件把他的接口做的更人性化一點(diǎn),同時(shí)把底層的復(fù)雜性,利用邏輯把他隱藏起來。但這樣一來,并不是復(fù)雜性不存在,只是他的復(fù)雜性由軟件來承接了。這樣一來,硬件就只提供最基本的功能,各種復(fù)雜的功能由軟件來呈現(xiàn)。我們所提供的工具,越接近于最終的形態(tài),他的適用領(lǐng)域也就越窄。我們的學(xué)歷越高,我們所能做的工作機(jī)會(huì)就越少。我們硬件也是一樣,把硬件保持最原始形態(tài),所有的功能都由軟件來實(shí)現(xiàn),硬件的通用性就越大。
計(jì)算機(jī)也是如此,計(jì)算機(jī)的基本功能只有極為簡(jiǎn)單的運(yùn)算,任何智能的東西,想要明白基本的命令或指令,這些指令通常由CPU接收的,CPU有運(yùn)算器和控制器,他能接收一些命令給他,可以讓他做加減法、清空內(nèi)存等,他能做最基礎(chǔ)的事情,至于你讓他編輯圖像,只能依靠軟件來實(shí)現(xiàn),但軟件所形成的邏輯可以在底層硬件完成。CPU是用來加工數(shù)據(jù)的,數(shù)據(jù)需要有問題是我們把數(shù)據(jù)放進(jìn)去,怎么把加工后的又拿出來,這就需要輸入和輸出設(shè)備,這是我們計(jì)算機(jī)的基本硬件,目前所有計(jì)算機(jī)都是在這個(gè)框架上運(yùn)作的,這個(gè)機(jī)制,我們稱之為“馮.諾依曼體制”。
馮.諾依曼在數(shù)學(xué)領(lǐng)域、經(jīng)濟(jì)學(xué)領(lǐng)域、計(jì)算機(jī)領(lǐng)域都稱之為世界上的頂級(jí)人物。這些硬件保持了最底層的功能,所以我們需要用軟件來實(shí)現(xiàn)接近于最終產(chǎn)品形態(tài)。但計(jì)算機(jī)自己的說明語言太難懂了,都是二進(jìn)制指令,都是0101001……,用來加工二進(jìn)制數(shù)據(jù)太難了,人類難以理解。程序員寫程序只能用二進(jìn)制指令來加工二進(jìn)制數(shù)據(jù)去寫,這是非人的能力。
所以,我們需要一門語言,讓人說起來非常容易,但計(jì)算機(jī)不理解,計(jì)算機(jī)只能理解二進(jìn)制數(shù)據(jù)。我們現(xiàn)在的編程語言都是離人很近,計(jì)算機(jī)理解不了。當(dāng)兩個(gè)層次彼此間無法銜接時(shí),加個(gè)中間層,而對(duì)于計(jì)算機(jī)來說,叫做編譯器。
所謂軟件,是程序員寫的程序代碼,這個(gè)程序代碼用編程語言來實(shí)現(xiàn),編程語言并不是機(jī)器所說的語言,及其所說的叫做機(jī)器語言。機(jī)器語言就是你可以想象成讓機(jī)器工作的接口。而程序員直接用接口來編寫的話太難了,于是發(fā)明高級(jí)編程語言。
后來,任何一款芯片的制造商,他們都把芯片的機(jī)器代碼提供了一個(gè)較為簡(jiǎn)單的,稍微好一點(diǎn),但依舊很簡(jiǎn)陋的編程接口,成為微碼編語言,或者稱為匯編語言。匯編語言僅僅是二進(jìn)制數(shù)據(jù)轉(zhuǎn)變?yōu)槿祟愖匀徽Z言符號(hào),他離最終形態(tài)依然很遠(yuǎn),程序員需要做很多。匯編語言是低級(jí)語言的代表,芯片制造商會(huì)給自己的芯片提供匯編語言。匯編語言和芯片語言類似,你學(xué)了一種匯編語言,第二種未必會(huì)用,他和芯片緊密相關(guān),適用性很差,沒有普適性。于是有了高級(jí)語言,如C,C++,雖然兼具低級(jí)語言特性,但也是高級(jí)語言。任何語言,只要不是機(jī)器語言,機(jī)器都無法理解。對(duì)于匯編語言,稱為匯編器,對(duì)于高級(jí)語言,稱之為編譯器,來翻譯成機(jī)器語言。
方框代表硬件,六邊形代表數(shù)據(jù),需要把數(shù)據(jù)轉(zhuǎn)換為硬件識(shí)別的形態(tài),需要中間的形態(tài),如果是匯編語言,叫做匯編器。如果是高級(jí)語言,叫做編譯器。
但一般來講,高級(jí)語言所寫的程序,最終需要轉(zhuǎn)換為機(jī)器語言,但中間會(huì)經(jīng)過匯編過程,所以大多數(shù)情況下,比如C程序,要先轉(zhuǎn)換為匯編格式,由匯編格式在轉(zhuǎn)換為機(jī)器格式,可以理解為任何一個(gè)機(jī)器都有匯編,要想到達(dá)機(jī)器,就必須經(jīng)過匯編。
而程序員就是寫高級(jí)程序語言,讓底層具有非常簡(jiǎn)陋功能的機(jī)器,可以完成復(fù)雜邏輯功能。
高級(jí)語言是建立在匯編語言之上的,接近人類的思維方式,所以寫起來容易很多。但翻譯起來卻需要更多的機(jī)器語言來解釋。
匯編語言經(jīng)常用于寫驅(qū)動(dòng)程序。高級(jí)語言又分為兩類,一類是系統(tǒng)級(jí)高級(jí)語言,如C,C++,通常開發(fā)大型的對(duì)系統(tǒng)要求高的程序,像mysql、oracl、sql server,甚至到操作系統(tǒng),像Linux、windows。這種語言對(duì)人而言,代碼量較大,很難達(dá)到所見即所得。一類是應(yīng)用級(jí)高級(jí)語言,如JAVA,Python,這種程序非常接近人類的語言,但離機(jī)器越來越遠(yuǎn)。
如圖所示,假如最長(zhǎng)線為機(jī)器語言,匯編語言在機(jī)器語言之上,再往上是C和C++,再往上是java和Python,人在他們之上(笑臉代表人),而電腦在最底層(方盒子代表電腦),你會(huì)發(fā)現(xiàn),高級(jí)語言就是離人較近的語言,低級(jí)語言就是離機(jī)器較近的語言。他的特點(diǎn)是,機(jī)器語言離機(jī)器近,機(jī)器運(yùn)行快,而高級(jí)語言離機(jī)器遠(yuǎn),中間需要層層轉(zhuǎn)換,所以機(jī)器運(yùn)行比較慢,但人寫起來比較快。
這就是所謂的高級(jí)語言和低級(jí)語言。而高級(jí)語言又分為系統(tǒng)級(jí)和應(yīng)用級(jí)。系統(tǒng)級(jí)別的語言主要寫操作系統(tǒng)等對(duì)性能要求較高的服務(wù)類程序,像oracl、mysql、Linux等,如果只是開發(fā)網(wǎng)站,開發(fā)圖書館管理系統(tǒng)等可以使用應(yīng)用級(jí)語言,應(yīng)用程序?qū)π阅芤蟛桓?,?duì)程序員來講,希望他能快速出活的程序,像ansible,puppet。puppet使用ruby語言所研發(fā),等等。要想寫驅(qū)動(dòng),就使用匯編,想去寫關(guān)鍵程序,就使用C、c++,學(xué)習(xí)應(yīng)用級(jí)程序,使用java,Python性能比java要差,但在研發(fā)上所用的時(shí)間,足以抵消他在性能上降低的時(shí)間,所以,會(huì)用到Python。
什么叫做應(yīng)用領(lǐng)域?應(yīng)用領(lǐng)域就是把別人寫好的軟件用好而已。對(duì)我們來說,領(lǐng)域通常稱為運(yùn)維。在Linux運(yùn)維中,就是Linux生態(tài)圈中的各應(yīng)用程序的應(yīng)用。如果僅是手動(dòng)運(yùn)維就太低級(jí),盡可能用編程的視角,把這些管理Linux應(yīng)用的工作,讓程序幫我們?nèi)ネ瓿?,也就是shell腳本編程的工作,讓某些應(yīng)用工作能自動(dòng)完成,他不是完整的編程語言,他是建構(gòu)在解釋器之上,讓別的程序更好的程序邏輯工具。我們要想實(shí)現(xiàn)更為復(fù)雜的功能,就需要專業(yè)級(jí)完整的編程語言,像Python。
要想找所謂的socket編程,shell腳本實(shí)現(xiàn)不了,除非借助于工具,有socket功能的,我們能操作的細(xì)節(jié)程度就非常拙劣了,但Python要好很多。Python是非常高級(jí)的語言,比java都高級(jí),所以性能差,學(xué)起來很容易。因此,在所有的編程語言中,不考慮shell的話,Python是最容易學(xué)的。Python是專業(yè)編程語言,能實(shí)現(xiàn)很多功能,如ansible,openstack都是運(yùn)用Python完成的。如果你能寫Python,又能做運(yùn)維,這就證明你可以寫運(yùn)維工具了。
不以研發(fā)為目的,只是為了運(yùn)維更為靈活和自動(dòng),叫做DevOps,即為Development(研發(fā))和Operations(運(yùn)維),將來可以把這個(gè)作為發(fā)展方向。
運(yùn)行維護(hù)就是把別人寫的軟件,拿到我們公司,根據(jù)我們的業(yè)務(wù)需要把他組織起來,滿足我們運(yùn)行的需要,能完成公司需要我們完成的任務(wù)即可。這是我們這個(gè)課程的大體框架的描述,下節(jié)課會(huì)將Linux發(fā)展歷史。