linux運維人員成長
初級篇
linux運維人員常用工具拓撲詳見:
1rsync工具
很多地方經常會用到rsync工具,實施幾臺伺服器的同步效果。我們公司就是使用這個工具完成伺服器的遊戲的服務端和客戶端同步,有幾個文章例子:
- rsync 強化技術(手動修改埠開啟防火牆的情況下)並且通過指令碼只同步需要的伺服器
- inotify+rsync+mutt+msmtp 實現linux檔案或者目錄自動更新並且實現發郵件給管理員
2網路服務
服務有很多種,每間公司都會用到不同的,但基礎的服務肯定要掌握,如FTP、DNS、SAMBA、郵件, 這幾個大概學一下就行,LAMP和LNMP是必須要熟練,我所指的不是光會搭建,而是要很熟悉裡面的相當配置才行,因為公司最關鍵的絕對是Web伺服器,所以Nginx和Apache要熟悉,特別是Nginx一定要很熟悉才行,至少有些公司還會用Tomcat,這個也最好學一下。
其實網路服務方面不用太擔心,一般公司的環境都已經搭建好,就算有新伺服器或讓你整改,公司會有相應的文件讓你參照來弄,不會讓你亂來的,但至少相關的配置一定要學熟,而且肯定是編譯安裝多,那些模組要熟悉一下他的作用,特別是PHP那些模組。
這面2點只是基礎,也是必要條件,不能說是工具,以下才是真正的要掌握的工具。
- Samba檔案共享服務(共享指令碼 讓你工作更輕鬆)
- Linux web服務安裝apache 思路 (原始碼編譯,自己定義服務)
- FTP(持虛擬使用者,並且每個虛擬使用者可以具有獨立的屬性配置)
- linux 下構建DHCP伺服器
3指令碼語言
Shell指令碼和另一個指令碼語言,Shell是運維人員必須具備的,不懂這個連入職都不行,至少也要寫出一些系統管理指令碼,最簡單也得寫個監控CPU,記憶體比率的指令碼吧,這是最最最基本了,別以為會寫那些猜數字和計算什麼數的,這些沒什麼作用,只作學習意義,寫系統指令碼才是最有意義,而另一個指令碼語言是可選的,一般是3P,即Python、Perl和PHP,PHP就不需要考慮了,除非你要做開發,我個人建議學Python會比較好,難實現自動化運維,Perl是文字處理很強大,反正這兩個學一個就行了。
- Shell(一) 入門到複雜 自己做的各種指令碼例項與解釋
- Shell(二)入門到複雜 指令碼例項(計算器)
4sed和awk工具
這兩個工具必須要掌握,同時還要掌握正則表示式,這個就痛苦了,正則是最難學的表示式,但結合到sed和awk中會很強大,在處理文字內容和過濾Web內容時十分有用,不過在學Shell的同時一般會經常結合用到的,所以學第3點就會順便學第4點。
- sed 簡明教程
5文字處理命令
sort 、tr、cut、paste、uniq、tee等必學,也是結合第3點指令碼語言時一併學習的。
6資料庫
首選MySQL,別問我為什麼不學SQL Server和Oracle,因為Linux用得最多絕對是MySQL,增刪改查必學,特別要學熟查,其它方面可能不太需要,因為運維人員使用最多還是查,哪些優化和開發語句不會讓你弄的。
- MySQL(手動編譯詳細思路,以及增刪改查、授權、備份還原)
7防火牆
防火牆也算是個難點,說難不難,說易不易,最重要弄懂規則,如果學過CCNA的朋友可能會比較好學,因為iptables也有NAT表,原理是一樣的,而FILTER表用得最多,反正不學就肯定不合格。
- 防火牆(一)主機型防火牆
- 防火牆(二)SNAT和DNAT
8監控工具
我個人建議,最好學這3個:Cacti,Nagios,Zabbix,企業用得最多應該是Nagios和 Zabbix,反正都學吧,但Nagios會有點難,因為會涉及到用指令碼寫自動監控,那個地方很難。
- CentOS 6.2+Nginx+Nagios,手機簡訊和QQ郵箱提醒
- 伺服器集中檢測Cacti
9叢集和熱備
這個很重要,肯定要懂的,但到了公司就不會讓你去弄,因為新手基本不讓你碰,叢集工具有很多,最好學是LVS,這是必學,最好也學Nginx叢集、反向代理,還有熱備,這個就更多工具能實現了,像我公司是自己開發熱備工具的。MySQL熱備也要學,就是主從複製,這個要學懂整個流程一點也不容易,只照著做根本沒意思。
- MySQL主從同步,雙主同步,如果伺服器意外掛機,不同步怎麼辦
- MySQL高效能壓力測試(總結了好久)
- Nginx 快取配置及報錯解決
10資料備份
工具有很多,但至少要把RAID的原理弄懂,特別是企業最常用的1+0或0+1,自己做實驗也要弄出來,備份工具有很多,如tar、dump,最好多瞭解一下。
學會以上10點,應該可以入門了,有些技術會比較難學,例如Apache和Nginx中還有些很重要的技術,如系統調優、服務優化、程式優化,這些在沒接觸工作前很難學習到的,所以先把這10點學了吧,估計要學熟至少3個月不止,指令碼部分會交很吃力了,我建議是先學熟shell,等工作後再學另一門指令碼語言,這樣會比較好。
以上就是踏入linux運維工程師需要掌握的工具,還有很多工具要掌握的,但在學習環境中是很難學到,最後我再提醒一下,這裡所指的工具相當於技能,而不是像Windows或Ubuntu的圖形化工具,還有學linux就別裝圖形介面,這樣虛擬機器就不用吃太多記憶體,而且絕對不建議在真機上裝Linux,根本達不到學習效果。
中級篇
這部分來自我自己的面試經歷和麵試別人的經歷總結。先附上運維思路拓撲圖:
有些人認為,其實運維就是部署某個軟體,設定些基礎功能,就算會運維了。
舉個例子:安裝LAMP,LNMP,就感覺部署方法我都掌握了。其實網上大多數都有一鍵安裝指令碼啥的根本沒有啥技術含量,在面試官眼裡,這些都不是你的亮點。基本到了公司一般環境架構都是部署好的,很少需要你去變動環境架構。就算你安裝好 LNMP 架構你熟悉裡面的原理嗎?熟悉 Nginx 優化嗎?熟悉 MySQL 優化嗎?
再舉個例子:我面試遇到的問題,面試官問你既然熟悉 LNMP 架構,那麼 Nginx 反向代理的作用。
你應該不是說出懂這個軟體和配置,你儘可能的說怎麼優化,怎麼深入提高網站效能。
- 使用反向代理可以理解為7層應用層的負載均衡,使用負載均衡之後可以非常便捷的橫向擴充套件伺服器叢集,實現叢集整體併發能力、抗壓能力的提高。
- 通常反向代理伺服器會帶有本地 Cache 功能,通過靜態資源的 Cache,有效的減少後端伺服器所承載的壓力,從而提高效能。
下面說說運維在工作中需要掌握的核心技術。注意,這是在工作中掌握的,在學習中很難掌握。
1第一條最主要的排錯
- 分析部分程式不能執行或沒有按預想結果執行的原因,對程式執行跟蹤,檢視系統呼叫的過程。
- 較深入的系統瓶頸點分析。
檢視剩餘記憶體:
free -m
#-/+ buffers/cache: 6458 1649
#6458M為真實使用記憶體 1649M為真實剩餘記憶體(剩餘記憶體+快取+緩衝器)
#linux會利用所有的剩餘記憶體作為快取,所以要保證linux執行速度,就需要保證記憶體的快取大小
系統資訊:
硬體資訊:
- 使用分析系統分析web日誌(如逆火軟體)
- 分析系統性能瓶頸點(IO/Memory/CPU,常用工具,top命令中shift組合鍵的特殊用Sar/vmstat/iostat/ipcs)
日誌管理常用命令:
2優化
優化可以說是運維最吃香的技能,基本會優化的運維普遍工資很高,而且優化是要承擔風險的,並不是網上搜個文章改一下配置檔案或者引數就叫優化了,這樣很容易造成宕機。
優化是根據實際的現場環境硬體各個引數進行部分優化,提高軟體效能和網站效能。這個我只能講半知半解,當時優化MySQL和Tomcat引數也是根據網上文章和官網文件查詢引數在虛擬機器上測試然後檢視效能。
成本優化,效能優化。這裡我給出 Tomcat 優化JVM引數(做過相應測試才放到現場環境的):(記住無監控不調優)
-標準引數,所有jvm都應該支援
-X 非標,每個jvm實現都不同
-XX 不穩定引數,下一版本可能會取消
serial collector 單執行緒 序列化
parallel collector 多執行緒
啟動 jvisualvm.exe 監控 dump 記憶體溢位
-Xms:初始堆大小
-Xmx:最大堆大小
-Xss:執行緒棧大小
-XX:NewSize=n:設定年輕代大小
-XX:NewRatio=n:設定年輕代和年老代的比值,如3, 標示年輕代:年老代比值1:3,年輕代佔整個年輕代年老代和的1/4
-XX:SurvivorRatio=n:年輕代中的eden區與2個Survivor區的比值。
-XX:MaxPermSize=n:設定持久代大小
收集器設定
-XX:+UseSerialGC:設定序列收集器
-XX:+UseParallelGC:設定並行收集器
-XX:+UseConcMarkSweepGC:設定併發收集器
回收統計資訊
-XX:+PrintGC
-XX:+PrintGCDetails
-Xloggc:filename
Tocmat 優化,確認有幾個JVM虛擬機器
set JAVA_OPTS=
-Xms4g
-Xmx4g
-Xss512k
-XX:+AggressiveOpts 進攻型的優化選項,所有優化項都加上
-XX:+UseBiasedLocking 優化鎖,基本都要選上,偏執鎖
-XX:permSize=64m 原始區大小,最大300m 類多就設定大一點
-XX:MaxPermSize=300m
-XX:+DisableExplicitGC //System.gc() 不顯示呼叫gc
-XX:+UseConcMarkSweepGC 使用cms縮短相應時間,併發收集,低停頓
-XX:+UseParNewGC 並行收集新生代的垃圾
-XX:+CMSParallelRemarkEnabled 在使用UseParNewGC的情況下,儘量減少mark的時間
-XX:+UseCMSCompactAtFullCollection 使用併發收集器時,開啟對年老代的壓縮,使碎片減少
-XX:LargePageSizelnBytes=128m 記憶體分頁大小對效能的提升
-XX:+UseFastAccessorMethods get/set方法轉成原生代碼
-Djava awt headless=true 修復linux下tomcat處理圖示時可能產生的bug
記憶體調優:
Tomcat 前任何引數沒參加大概每秒605,調優後大概每秒435,接近3倍的結果。
3開發技能
優選 Shell 和 Python,現在 Shell 無法滿足你的需求或者效率很低,那麼選擇自動化 Python 是最好的選擇。現在普遍招聘需求要求,會寫 Shell 或者 Python、Perl 指令碼,個人選擇還是選 Python。
Python 這門語言上手比較快,容易理解。在伺服器管理工具上非常豐富,配置管理(Saltstack) 批量執行(Fabric、Saltstack) 監控(Zenoss、Nagios 外掛) 虛擬化管理( python-libvirt) 程序管理 (Supervisor) 雲端計算(OpenStack) ...... 還有大部分系統 C 庫都有 Python 繫結。
對於流程確定的事情,最終一定是納入系統管理的體系,寫成程式,成為系統的一部分。而不是無法複用遊離與整體的各種指令碼。
隨著雲端計算時代的來臨,中小型公司不需要運維了,大型公司沒有工程開發能力的運維,是沒有競爭力的。
最重要的學好 Python 可以漲工資,可以漲工資,可以漲工資。(重要的事情說三遍~)目前本人也是在學 Python,正在把以前 Shell 指令碼的例項轉換成 Python 指令碼。
推薦《Python筆記:Python例項手冊》
下載連結:http://down.51cto.com/data/2329173
意識篇
1安全意識
運維人員的許可權很大,所以一定要保證帳號/私鑰的安全。
- 最好使用加密工具儲存。比如Truecrypt、lpassword。
- 基於本地儲存。切勿用網盤,也不建議用lastpass等
- SSH私鑰新增密碼
2磨刀意識
關於任何操作配置,最好先搞明白操作或配置的原理,然後再去操作。應一句話叫做“磨刀不誤砍柴功”,而且對於類似的操作可以舉一反三。
3計劃意識
複雜的變更操作比如多臺主機以及牽涉到san儲存,最好先作 操作計劃,寫計劃文件,詳細緻每條命令,然後請高手幫忙稽核。 這樣能最大程度使整個操作過程安全。如果是重要的客戶業務系統,操作最好有回退方案,而一旦變更失敗,客戶可以在短時間內將業務回退。
4記錄分享意識
遇到自己認為較特殊的案例時,記得要寫案例過程及分析的文件。也方便自己以後翻看,或者和其他兄弟分享,作知識的傳播以便於大家以後都能少走彎路。
5監控意識
運維來說,監控是非常重要的,監控是發現系統各種異常的眼睛,所以運維應該和監控緊密配合。
6業務意識
儘量瞭解維護的各主機上業務型別,以及各主機業務之間的關聯性。因為任何維護工作都是為主機能提供業務服務的,當某業務中斷,能最快的知道與此業務相關的主機群,從而縮小故障排查範圍,最快定位故障。
並不是你技術很牛,學的技術很多很熟,就不代表你不需要運維意識,其實領導很看重運維意識的,例如有沒有做好備份、許可權分配問題、平臺測試情況、故障響應時間等,這些都是意識,而不是你學了很多技術自認大牛了,平臺發現故障你又沒什麼大不子,以為很簡單的問題喜歡處理就處理,不需要向其它部門反饋等,領導不是看你的技術如何,而是看你的運維意識如何,你沒運維意識,技術再牛也沒用,只會讓其它部門的人跟你不協調。
要知道做IT這行是苦逼的,需要無盡的學習,不學習只會被淘汰,不想被年輕的淘汰,就只能不斷增值自己,不然不是你工資無法提升,而是你無法再從事這行。
這個世界,在悄悄懲罰不改變的人……