Linux因其高效率筒严、易于裁剪、應用廣等優(yōu)勢鸠补,成為了當今中高端服務器的主要操作系統(tǒng)萝风,并且處于一個不可替代的地位嘀掸。Linux可安裝在各種計算機硬件設備中紫岩,比如手機、平板電腦睬塌、路由器泉蝌、視頻游戲控制臺、臺式計算機揩晴、大型機和超級計算機勋陪。隨著Linux在中國市場迅猛發(fā)展,國內Linux人才缺口逐漸凸顯硫兰。Linux人才招聘也成了當前最熱門的招聘之一诅愚。
首先linux是一個非常非常大的概念。想全部吃透是不可能的劫映。理想的說违孝,搞懂linux刹前,就可以做所有工作。個人更傾向于說想做什么樣工作雌桑,需要學linux的哪部分喇喉。
按個人經(jīng)驗介紹下常見的linux有哪些領域,并對應到什么工作校坑。
1)linux應用拣技。這部分嚴格來說不能算是linux,只是跑在linux上的應用耍目,比如web膏斤,網(wǎng)絡,IT等制妄,職業(yè)包括系統(tǒng)研發(fā)掸绞,后臺開發(fā),服務器性能優(yōu)化耕捞,運維等衔掸;
2)linux定制。這部分涉及l(fā)inux版本的用戶包較多俺抽,內核會有一些涉及敞映,主要各種商業(yè)linux的訂制,服務等磷斧。比如redhat之類振愿,不少是外國公司,國內大多招現(xiàn)場支持等弛饭。
3)linux內核開發(fā)冕末。這部分主要是linux內核驅動的開發(fā)。幾乎全部是編程工作侣颂。主要是芯片公司档桃,以及使用芯片的產品開發(fā)公司。前者如intel憔晒,marvell藻肄,后者如中興華為。
4)android衍生品拒担。因為android包括慢慢火爆的tizen都用的linux內核嘹屯,所以理由同3。所以手機芯片公司和手機開發(fā)公司也是linux開發(fā)者的雇主之一从撼。比如高通州弟,TI等;
一、Linux運維的主要工作內容
Linux運維作為眾多工作中需求人數(shù)最多婆翔,薪資待遇最高的崗位桐经,本文重點介紹Linux運維的職業(yè),本文內容由專門研究Linux運維學習和職業(yè)發(fā)展的機構馬哥教育和愛好者們聯(lián)合撰寫浙滤。
互聯(lián)網(wǎng)Linux運維工作阴挣,以服務為中心,以穩(wěn)定纺腊、安全畔咧、高效為三個基本點,確保公司的互聯(lián)網(wǎng)業(yè)務能夠7×24小時為用戶提供高質量的服務揖膜。運維的職責覆蓋了產品從設計到發(fā)布誓沸、運行維護、變更升級及至下線的生命周期壹粟。
產品的整個生命周期里運維的職責重要而廣泛拜隧,但運維工程師們的職責不僅限于這部分工作,還需要總結工作中遇到的問題趁仙,抽取出相關的技術方向洪添、研發(fā)相關的工具和平臺以支持/優(yōu)化業(yè)務的發(fā)展并提高運維的效率,相關技術工作主要包括:
服務監(jiān)控技術:包括監(jiān)控平臺的研發(fā)雀费、應用干奢,服務監(jiān)控準確性、實時性盏袄、全面性的保障
服務故障管理:包括服務的故障預案設計忿峻,預案的自動化執(zhí)行,故障的總結并反饋到產品/系統(tǒng)的設計層面進行優(yōu)化以提高產品的穩(wěn)定性
服務容量管理:測量服務的容量辕羽,規(guī)劃服務的機房建設逛尚,擴容、遷移等工作
服務性能優(yōu)化:從各個方向刁愿,包括網(wǎng)絡優(yōu)化绰寞、操作系統(tǒng)優(yōu)化、應用優(yōu)化酌毡、客戶端優(yōu)化等克握,提高服務的性能和響應速度蕾管,改善用戶體驗
服務全局流量調度:接入服務的流量枷踏,根據(jù)容量和服務狀態(tài)在各個機房間分配流量
服務任務調度:服務的各種定時/非定時任務的調度觸發(fā)及狀態(tài)監(jiān)控
服務安全保障:包括服務的訪問安全、防攻擊掰曾、權限控制等
數(shù)據(jù)傳輸技術:包括p2p等各類傳輸技術的研發(fā)應用旭蠕,也遠距離大數(shù)據(jù)傳輸?shù)葐栴}的解決
服務自動發(fā)布部署:部署平臺/工具的研發(fā),及平臺/工具的使用,做到安全掏熬、高效的發(fā)布服務
服務集群管理:包括服務的服務器管理佑稠、大規(guī)模集群管理等
服務成本優(yōu)化:盡可能降低服務運行使用的資源,降低服務運行成本
數(shù)據(jù)庫管理(DBA):通過設計旗芬、開發(fā)和管理高性能數(shù)據(jù)庫集群舌胶,使數(shù)據(jù)庫服務更穩(wěn)定、更高效疮丛、更易于管理幔嫂。
平臺化的開發(fā):類docker等平臺的開發(fā)管理,及服務接入技術
分布式存儲平臺的開發(fā)優(yōu)化與接入
等等誊薄,凡是關系到服務質量履恩、效率、成本呢蔫、安全等方面的工作切心,及涉及到的技術、組件片吊、工具绽昏、平臺都在運維的技術范疇里。做好每一個技術方向俏脊、完成相應的組件而涉、工具、平臺研發(fā)都能對履行運維職責起到積極的作用联予,對業(yè)務的發(fā)展發(fā)揮關鍵影響啼县。
二、Linux運維工作分類
運維的工作方向比較多沸久,隨著業(yè)務規(guī)模的不斷發(fā)展季眷,越成熟的互聯(lián)網(wǎng)公司,運維崗位會劃分得越細卷胯。當前很多大型的互聯(lián)網(wǎng)公司子刮,在初創(chuàng)時期只有系統(tǒng)運維,隨著 模窑睁、服務質量的 要求挺峡,也逐漸進行了工作細分。一般情況下運維團隊的工作分類(見圖1-1)和職責如下担钮。
圖1-1 運維團隊的工作分類
2.1-應用運維(SRE):應用運維負責線上服務的變更橱赠、服務狀態(tài)監(jiān)控、服務容災和數(shù)據(jù)備份等工作箫津,對服務進行例行排查狭姨、故障應急處理等工作宰啦,工作職責如下:設計評審、服務管理饼拍、資源管理赡模、例行檢查、預案管理师抄、數(shù)據(jù)備份漓柑。
2.2-系統(tǒng)運維(SYS):負責IDC、網(wǎng)絡叨吮、CDN和基礎服務的建設(LVS欺缘、NTP、DNS)挤安;負責資產管理谚殊,服務器選型、交付和維修蛤铜,工作職責如下:IDC數(shù)據(jù)中心建設嫩絮、網(wǎng)絡建設、LVS負載均衡和SNAT建設围肥、CDN規(guī)劃和建設剿干、服務器選型、交付和維護穆刻、內核選型和OS相關維護工作置尔、資產管理、基礎服務建設氢伟。
2.3-數(shù)據(jù)庫運維(DBA):數(shù)據(jù)庫運維負責數(shù)據(jù)存儲方案設計榜轿、數(shù)據(jù)庫表設計、索引設計和SQL優(yōu)化朵锣,對數(shù)據(jù)庫進行變更谬盐、監(jiān)控、備份诚些、高可用設計等工作飞傀,詳細的工作內容如下:設計評審、容量規(guī)劃诬烹、數(shù)據(jù)備份與災備砸烦、數(shù)據(jù)庫監(jiān)控、數(shù)據(jù)庫安全绞吁、數(shù)據(jù)庫高可用和性能優(yōu)化幢痘、自動化系統(tǒng)建設、運維研發(fā)掀泳、運維平臺雪隧、監(jiān)控系統(tǒng)、自動化部署系統(tǒng)员舵。
2.4-運維安全(SEC):運維安全負責網(wǎng)絡脑沿、系統(tǒng)和業(yè)務等方面的安全加固工作,進行常規(guī)的安全掃描马僻、滲透測試庄拇,進行安全工具和系統(tǒng)研發(fā)以及安全事件應急處理,工作內容如下:安全制度建立韭邓、安全培訓措近、風險評估、安全建設女淑、安全合規(guī)瞭郑、應急響應。
三鸭你、Linux運維日常使用軟件和技能
運維工程師使用的運維平臺和工具包括:
Web服務器:apache屈张、tomcat、nginx袱巨、lighttpd
監(jiān)控:nagios阁谆、ganglia、cacti愉老、zabbix
自動部署:ansible场绿、sshpt、salt
配置管理:puppet嫉入、cfengine
負載均衡:lvs焰盗、haproxy、nginx
傳輸工具:scribe咒林、flume
備份工具:rsync姨谷、wget
數(shù)據(jù)庫:mysql、oracle映九、sqlserver
分布式平臺:hdfs梦湘、mapreduce、spark件甥、storm捌议、hive
分布式數(shù)據(jù)庫:hbase、cassandra引有、redis瓣颅、MongoDB
容器:lxc、docker
虛擬化:openstack譬正、xen宫补、kvm
安全:kerberos檬姥、selinux、acl粉怕、iptables
問題追查:netstat健民、top、tcpdump贫贝、last
運維以技術為基礎秉犹,通過技術保障產品提供更高質量的服務。運維工作的職責及在業(yè)務中的位置決定了運維工程師需要具備更加廣博的知識和深入的技術能力:
扎實的計算機基礎知識稚晚,包括計算機系統(tǒng)架構崇堵,操作系統(tǒng),網(wǎng)絡技術等客燕;
通用應用方面需要了解操作系統(tǒng)鸳劳、網(wǎng)絡、安全也搓,存儲棍辕,CDN,DB等还绘,知道其相關原理楚昭;
編程能力,小到運維工具的開發(fā)大到大型運維系統(tǒng)/平臺的開發(fā)都需要有良好的編程能力拍顷;
數(shù)據(jù)分析能力:能夠整理抚太、分析系統(tǒng)運行的各項數(shù)據(jù),從中發(fā)現(xiàn)問題及找到解決方向昔案;
豐富的系統(tǒng)知識尿贫,包括系統(tǒng)工具、典型系統(tǒng)架構踏揣、常見的平臺選型等庆亡;
綜合利用工具和平臺的能力;
四捞稿、Linux運維工作發(fā)展過程
早期的運維團隊在人員較少的情況下又谋,主要是進行數(shù)據(jù)中心建設、基礎網(wǎng)絡建設娱局、服務器采購和服務器安裝交付工作彰亥。幾乎很少涉及線上服務的變更、監(jiān)控衰齐、管理等工作任斋。這個時候的運維團隊更多的屬于基礎建設的角色,提供一個簡單耻涛、可用的網(wǎng)絡環(huán)境和系統(tǒng)環(huán)境即可废酷。
隨著業(yè)務產品的逐漸成熟瘟檩,對于服務質量方面就有了更高的要求。這個時候的運維團隊還會承擔一些服務器監(jiān)控的工作澈蟆,同時會負責LVS墨辛、Nginx等與業(yè)務邏輯無關的4/7層運維工作。這個時候服務變更更多的是逐臺的手工操作丰介,或者有一些簡單批量腳本的出現(xiàn)背蟆。監(jiān)控的焦點更多的在服務器狀態(tài)和資源使用情況上鉴分,對服務應用狀態(tài)的監(jiān)控幾乎很少哮幢,監(jiān)控更多的使用各種開源系統(tǒng)如Nagios、Cacti等志珍。
由于業(yè)務規(guī)模和復雜度的持續(xù)增加橙垢,運維團隊會逐漸劃分為應用運維和系統(tǒng)運維兩大塊。應用運維開始接手線上業(yè)務伦糯,逐步開展服務監(jiān)控梳理柜某、數(shù)據(jù)備份以及服務變更的工作。隨著對服務的深入敛纲,應用運維工程師有能力開始對服務進行一些簡單的優(yōu)化喂击。同時,為了應對每天大量的服務變更淤翔,我們也開始編寫各類運維工具翰绊,針對某些特定的服務能夠很方便的批量變更。隨著業(yè)務規(guī)模的增大旁壮,基礎設施由于容量規(guī)劃不足或抵御風險能力較弱導致的故障也越來越多监嗜,迫使運維人員開始將更多的精力投入到多數(shù)據(jù)中心容災、預案管理的方向上抡谐。
業(yè)務規(guī)模達到一定程度后裁奇,開源的監(jiān)控系統(tǒng)在性能和功能方面,已經(jīng)無法滿足業(yè)務需求麦撵;大量的服務變更刽肠、復雜的服務關系,以前靠人工記錄免胃、工具變更的方式不管在效率還是準確性方面也都無法滿足業(yè)務需求五垮;在安全方面也出現(xiàn)了各種大大小小的事件,迫使我們投入更多的精力在安全防御上杜秸。逐漸的放仗,運維團隊形成之前提到的5個大的工作分類,每個分類都需要有專精的人才撬碟。這個時候系統(tǒng)運維更專注于基礎設施的建設和運維诞挨,提供穩(wěn)定莉撇、高效的網(wǎng)絡環(huán)境,交付服務器等資源給應用運維工程師惶傻。應用運維更專注于服務運行狀態(tài)和效率棍郎。數(shù)據(jù)庫運維屬于應用運維工作的細化,更專注于數(shù)據(jù)庫領域的自動化银室、性能優(yōu)化和安全防御涂佃。運維研發(fā)和運維安全提供各類平臺、工具蜈敢,進一步提升運維工程師的工作效率辜荠,使業(yè)務服務運行得更加穩(wěn)定、高效和安全抓狭。
我們將運維發(fā)展過程劃分為4個階段伯病,如圖1-2所示。
圖1-2 運維發(fā)展過程
手工管理階段:業(yè)務流量不大否过,服務器數(shù)量相對較少午笛,系統(tǒng)復雜度不高。對于日常的業(yè)務管理操作苗桂,大家更多的是逐臺登錄服務器進行手工操作药磺,屬于各自為戰(zhàn),每個人都有自己的操作方式煤伟,缺少必要的操作標準癌佩、流程機制,比如業(yè)務目錄環(huán)境都是各式各樣的持偏。
工具批量操作階段:隨著服務器規(guī)模驼卖、系統(tǒng)復雜度的增加,全人工的操作方式已經(jīng)不能滿足業(yè)務的快速發(fā)展需要鸿秆。因此酌畜,運維人員逐漸開始使用批量化的操作工具,針對不同操作類型出現(xiàn)了不同的腳本程序卿叽。但各團隊都有自己的工具桥胞,每次操作需求發(fā)生變化時都需要調整工具。這主要是因為對于環(huán)境考婴、操作的規(guī)范不夠贩虾,導致可程序化處理能力較弱。此時沥阱,雖然效率提升了一部分缎罢,但很快又遇到了瓶頸。操作的質量并沒有太多的提升,甚至可能因為批量執(zhí)行而導致更大規(guī)模的問題出現(xiàn)策精。我們開始建立大量的流程規(guī)范舰始,比如復查機制,先上線一臺服務器觀察10分鐘后再繼續(xù)后面的操作咽袜,一次升級完成后至少要觀察20分鐘等丸卷。這些主要還是靠人來監(jiān)督和執(zhí)行,但在實際過程中執(zhí)行往往不到位询刹,反而降低了工作效率谜嫉。
平臺管理階段:在這個階段,對于運維效率和誤操作率有了更高的要求凹联,我們決定開始建設運維平臺沐兰,通過平臺承載標準、流程匕垫,進而解放人力和提高質量僧鲁。這個時候對服務的變更動作進行了抽象虐呻,形成了操作方法象泵、服務目錄環(huán)境、服務運行方式等統(tǒng)一的標準斟叼,如程序的啟停接口必須包括啟動偶惠、停止、重載等朗涩。通過平臺來約束操作流程忽孽,如上面提到的上線一臺服務器觀察10分鐘。在平臺中強制設定暫停檢查點谢床,在第一臺服務器操作完成后兄一,需要運維人員填寫相應的檢查項,然后才可以繼續(xù)執(zhí)行后續(xù)的部署動作识腿。
系統(tǒng)自調度階段:更大規(guī)模的服務數(shù)量出革、更復雜的服務關聯(lián)關系、各個運維平臺的林立渡讼,原有的將批量操作轉化成平臺操作的方式已經(jīng)不再適合骂束,需要對服務變更進行更高一層的抽象。將每一臺服務器抽象成一個容器成箫,由調度系統(tǒng)根據(jù)資源使用情況展箱,將服務調度、部署到合適的服務器上蹬昌,自動化完成與周邊各個運維系統(tǒng)的聯(lián)動混驰,比如監(jiān)控系統(tǒng)、日志系統(tǒng)、備份系統(tǒng)等栖榨。通過自調度系統(tǒng)竞慢,根據(jù)服務運行情況動態(tài)伸縮容量,能夠自動化處理常見的服務故障治泥。運維人員的工作也會前置到產品設計階段筹煮,協(xié)助研發(fā)人員改造服務使其可以接入到自調度系統(tǒng)中。
在整個運維的發(fā)展過程中居夹,希望所有的工作都自動化起來败潦,減少人的重復工作,降低知識傳遞的成本准脂,使我們的運維交付更高效劫扒、更安全,使產品運行更穩(wěn)定狸膏。對于故障的處理沟饥,也希望由事后處理變成提前發(fā)現(xiàn),由人工處理變成系統(tǒng)自動容災湾戳。
五贤旷、2018年Linux運維必須抓住的前沿技能
這是技術世界正在發(fā)生的深刻變革的冰山一角,那么問題來了? 作為傳統(tǒng)的運維該如何轉型呢?
這里給出一點小的建議: 大致需要學習下這四個部分:
- 自動化運維(Ansible砾脑,Puppet幼驶,Saltstack等)
- Devops(Docker,K8s韧衣,Jenkins盅藻,Jira等),
- 云服務技術(虛擬化畅铭、OpenStack氏淑、AWS及阿里云各種產品服務架構等)
- python
來源于馬哥官網(wǎng)