Linux
文化
有一些文章并不涉及具體的技術(shù)細節(jié), 但是對于新人快速進入Linux/Unix世界很有幫助:
- 提問的智慧
- <<大教堂與市集>>
- <<操作系統(tǒng)革命>>, 這是一部記錄片, 講述了GNU, Linux, Richard stallman相關(guān)的很多故事.
shell
運維工程師的工作大部分時間是在和shell打交道, 所以掌握好shell相關(guān)的知識是非常重要的.
shell基礎(chǔ)二十篇
shell 腳本學習指南
sed&awk
Awk簡明教程 from coolshell
Sed簡明教程 from coolshell
無插件Vim編程技巧 from coolshell
盡量不要寫超過1屏的 shell 腳本. 如果超過1屏, 說明邏輯已經(jīng)非常復(fù)雜了, 又或者你的shell太過冗余, 需要優(yōu)化. shell超過一定規(guī)模后非常難以維護, 極易出錯, 所以這個時候就應(yīng)該考慮使用 python/perl 等真正可以稱得上語言的東西.
kernel
Linux內(nèi)核設(shè)計與實現(xiàn)
Linux/Unix設(shè)計思想
上面兩本書相對來講比較容易, 適合非科班背景的同學閱讀.
Ops
在掌握了基本的 shell 知識后, 其實已經(jīng)可以完成基本的運維工作, 但是還遠遠不夠. 一個典型的運維工程師至少需要管理上百臺設(shè)備, 包括服務(wù)器, 網(wǎng)絡(luò)設(shè)備等. 規(guī)模和差異化永遠是運維工程師最大的敵人.
比如, 面對一臺服務(wù)器你可以很輕松的完成安裝系統(tǒng)或者修改某個配置文件的工作. 但是相同的任務(wù), 如果需要在100臺, 或者1000臺服務(wù)器上完成, 那就....不那么簡單了, 尤其是面對不同的服務(wù)器, 多種不同的操作系統(tǒng)版本的情況下, 就.....基本沒法干了. 當然, 你可以一臺一臺的人肉去搞, 但是我相信, 你還沒做完就被公司fire掉了. 所以, 我們還需要借助一些更為給力的工具, 完成一些復(fù)雜的任務(wù).
系統(tǒng)安裝
想想你可能一天要給上百臺設(shè)備安裝操作系統(tǒng)的場景.
每個Linux的發(fā)行版都有自己的自動應(yīng)答機制, redhat系列的是Kickstart, debian系的是FAI. 可以實現(xiàn)無人值守安裝(安裝過程不需要鼠標點擊或者鍵盤輸入), 這是批量化安裝系統(tǒng)的前提. 自動應(yīng)答機制只能解決單機的自動安裝, 批量化得操作還需要用到另外幾個東西.
- PXE, 可以讓服務(wù)器通過網(wǎng)卡加載系統(tǒng)安裝程序.
- ipmitool, 服務(wù)器遠程管理卡(ilo)的命令行管理程序, 可以遠程關(guān)機/開機, 指定boot order.
安裝系統(tǒng)相關(guān)的工具/系統(tǒng)非常多, 比如: Cobbler, 這是一個建立在PXE基礎(chǔ)之上的, 對系統(tǒng)安裝過程提供了更高級抽象的系統(tǒng).
監(jiān)控
運維工程師的另一項重要工作就是監(jiān)控系統(tǒng)的運行狀態(tài), 這里的"系統(tǒng)"指的不是"操作系統(tǒng)", 而是你管理的整個服務(wù)器集群, 里面可能有DB, 有Web Server, 有Cache等等. 需要監(jiān)控的指標也不僅僅是cpu, 內(nèi)存, 硬盤這些常規(guī)指標, 還會包括一些應(yīng)用上的指標, 比如: 并發(fā)數(shù)量, QPS. 甚至還會有一些業(yè)務(wù)指標需要監(jiān)控.
要建立完善的監(jiān)控系統(tǒng), 單靠監(jiān)控軟件本身是不夠的, 還需要被監(jiān)控的軟件/系統(tǒng)配合才行. 被監(jiān)控方需要將需要監(jiān)控的數(shù)據(jù)暴露出來, 方便監(jiān)控系統(tǒng)獲取才行. 比如, 你想監(jiān)控操作系統(tǒng)相關(guān)的指標, 那你可能要學一些shell知識----知道如何獲取自己想要的數(shù)據(jù).
以下是幾個常見的監(jiān)控系統(tǒng)軟件:
- nagios
- ganglia
- zabbix
配置管理
想想你可能一天要更新成百上千臺設(shè)備的配置.
cfengine是最早的, 得到大規(guī)模使用的配置管理工具. 類似的工具還有: puppet, saltstack, ansible...
這些工具的功能不盡相同, 但是一些基本的功能是差不多的:
- 管理服務(wù)器進程
- 管理配置文件
- 管理軟件包
- 管理進程, 配置文件, 軟件包之間的依賴
- 遠程批量命令執(zhí)行
比如你有一批機器需要安裝Apache, 然后更新Apache的配置, 然后重啟Apache使配置生效. 類似的任務(wù), 你可能每天都會遇到, 而且不止一次. 而這正是配置管理工具應(yīng)用的典型場景. 理想的情況下, 工程師只需要編寫一些簡單的規(guī)則, 并且指定應(yīng)用這些規(guī)則的服務(wù)器, 然后配置管理系統(tǒng)會幫你完成軟件安裝, 配置下發(fā), 服務(wù)重啟等一些列的工作. 工程師不在需要關(guān)心自己面對的是10臺服務(wù)器, 還是100臺服務(wù)器.
配置管理工具, 幫助工程師實現(xiàn)了對硬件, 對軟件環(huán)境的抽象, 實現(xiàn)了基礎(chǔ)設(shè)施可編程, 這很重要. 基礎(chǔ)設(shè)施可編程的概念之所以重要, 是因為這一概念是所有云服務(wù)的基石.
Dev
對于運維工程師而言, 除了 shell 還必須掌握一門真正語言, 個人建議以 python 入門, 原因有幾個:
- "自帶電池", 通常你只需要python 的標準庫就能完成大部分的工作.
- python的哲學是"一個問題只需要一種解決辦法". 如果你遇到過一些你不敢碰的, 充滿Magic的perl腳本, 你就會了解這一點有多重要了.
當然工作中具體用什么語言應(yīng)當視公司環(huán)境而定, 有可能是 python, 也有可能是perl/ruby/ 甚至是lua.
但是我要強調(diào)的是, 語言是相通的, 只要你掌握了一門語言, 學新語言將會很快, 所以剛開始學習編程時, 不要過多糾結(jié)于選什么語言好. Just do it!
python
對于 python 而言最好的教程我認為是官方文檔,
但因為是英文的, 所以看起來可能會比較吃力.
python 相關(guān)的書籍還是比較豐富的. 這里隨便推薦幾本.
Python語言入門
Python基礎(chǔ)教程
Python核心編程
做一個"懶惰"的工程師
這里的懶惰是加引號的, 不是讓工程師真的變得懶惰, 而是需要工程師通過工具, 通過代碼將工作變得自動化, 從而解放自己.
可以說, "懶惰"應(yīng)該是工程師畢生的追求. 這里推薦兩篇文章:
“懶惰”Linux:“懶惰”集群管理員的 11 個秘訣
“懶惰” Linux 管理員的 10 個關(guān)鍵技巧