積累經驗篇
做運維也快4年多了,就像游戲打怪升級,升級后知識體系和運維體系也相對變化挺大,學習了很多新的知識點。
運維工程師 是從一個呆逼進化為苦逼再成長為牛逼的過程,前提在于你要能忍能干能拼,還要具有敏銳的嗅覺感知前方潮流變化。如:今年大數據,人工智能比較火。。。(相對表示就是 python 比較火) 前面也講了運維基礎篇,發現對很多人收益挺大,接下來也寫下關于這4年多的運維實踐經驗,從事了2年多游戲運維,1年多安全運維,1年大數據運維,相關行業信息不能算非常精通嗎,但是熟悉和熟練還是相對可以的。
初級篇
詳見: 詳解Linux運維工程師入門級必備技能
拓撲詳見:
中級篇
從我后面面試經歷和面試別人的經歷。有些人認為,其實運維就是部署某個軟件,設置些基礎功能,就算會運維了。
舉個例子:安裝LAMP,LNMP,就感覺部署方法我都掌握了。其實網上大多數都有一鍵安裝腳本啥的根本沒有啥技術含量,在面試官眼里,這些都不是你的亮點。基本到了公司一般環境架構都是部署好的,很少需要你去變動環境架構。就算你安裝好 LNMP 架構你熟悉里面的原理嗎,熟悉 Nginx 優化嗎,熟悉 MySQL 優化嗎?
再舉個例子:我面試遇到的問題,面試官問你既然熟悉 LNMP 架構,那么 Nginx 反向代理的作用。
你應該不是說出懂這個軟件和配置,你盡可能的說怎么優化,怎么深入提高網站性能。
1、使用反向代理可以理解為7層應用層的負載均衡,使用負載均衡之后可以非常便捷的橫向擴展服務器集群,實現集群整體并發能力、抗壓能力的提高。
2、通常反向代理服務器會帶有本地 Cache 功能,通過靜態資源的 Cache,有效的減少后端服務器所承載的壓力,從而提高性能。
下面說說運維在工作中需要掌握的核心技術
注意,這是在工作中掌握的,在學習中很難掌握。
1、第一條最主要的排錯
分析部分程序不能運行或沒有按預想結果運行的原因,對程序運行跟蹤,查看系統調用的過程。
較深入的系統瓶頸點分析。
查看剩余內存:
系統信息:
硬件信息:
使用分析系統分析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 這門語言上手比較快,容易理解。
python 在服務器管理工具上非常豐富,配置管理(saltstack) 批量執行( fabric, saltstack) 監控(Zenoss, nagios 插件) 虛擬化管理( python-libvirt) 進程管理 (supervisor) 云計算(openstack) ...... 還有大部分系統 C 庫都有 python 綁定。
對于流程確定的事情,最終一定是納入系統管理的體系,寫成程序,成為系統的一部分。而不是無法復用游離與整體的各種腳本。
隨著云計算時代的來臨,中小型公司,不需要運維了。大型公司,沒有工程開發能力的運維,是沒有競爭力的。
最重要的學好 python 可以漲工資,可以漲工資,可以漲工資 。(重要的事情說三遍。)
目前本人也是在學 python,正在把以前 shell 腳本的實例轉換成 python 腳本。
python筆記: python實例手冊(一直在看)
下載鏈接: http://down.51cto.com/data/2329173
4、意識篇
1) 安全意識:
運維人員的權限很大,所以一定要保證帳號/私鑰的安全。
最好使用加密工具存儲。比如truecrypt,lpassword
基于本地存儲。切勿用網盤,也不建議用lastpass等
ssh私鑰添加密碼
2) 磨刀意識:
關于任何操作配置,最好先搞明白操作或配置的原理,然后再去操作。應一句話叫做“磨刀不誤砍柴功”,而且對于類似的操作可以舉一反三。
3) 計劃意識:
復雜的變更操作比如多臺主機以及牽涉到san存儲,最好先作 操作計劃,寫計劃文檔,詳細致每條命令,然后請高手幫忙審核。 這樣能最大程度使整個操作過程安全。如果是重要的客戶業務系統,操作最好有回退方案,而一旦變更失敗,客戶可以在短時間內將業務回退。
4) 記錄分享意識:
遇到自己認為較特殊的案例時,記得要寫 案例過程及分析的文檔。也方便自己以后翻看,或者和其他兄弟分享,作知識的傳播以便于大家以后都能少走彎路。
5) 監控意識:
運維來說,監控是非常重要的,監控是發現系統各種異常的眼睛,所以運維應該和監控緊密配合。
6) 業務意識:
盡量了解維護的各主機上業務類型,以及各主機業務之間的關聯性。因為任何維護工作都是為主機能提供業務服務的,當某業務中斷,能最快的知道與此業務相關的主機群,從而縮小故障排查范圍,最快定位故障。
附上運維思路拓撲圖:
可以看看: 安全運維理念(半神半仙亦民工)
意識是很重要,并不是你技術很牛,學的技術很多很熟,就不代表你不需要運維意識,其實領導很看重運維意識的,例如有沒有做好備份,權限分配問題,平臺測試情況,故障響應時間等,這些都是意識,而不是你學了很多技術自認大牛了,平臺發現故障你又沒什么大不子,以為很簡單的問題喜歡處理就處理,不需要向其它部門反饋等,領導不是看你的技術如何,而是看你的運維意識如何,你沒運維意識,技術再牛也沒用,只會讓其它部門的人跟你不協調。
要知道做IT這行是苦B的,需要無盡的學習,不學習只會被淘汰,不想被年輕的淘汰,就只能不斷增值自己,不然不是你工資無法提升,而是你無法再從事這行。
這個世界,在悄悄懲罰不改變的人...