【轉載】運維職業向!我是怎麼入得運維行業?運維工程師入門必備技能以及打怪升級篇

前言:轉載 陳浩一個從事安全運維向的前輩文章。寫的很好。人很是nice,遇到了問題,qq上很快就回復了我。php

大道三千 入門最難,凡事入了行,也就什麼都好說了,好的天然不斷努力奮鬥修行,很差的天然很快就被淘汰。恭謹勤勉,時不我待~java

 

 

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------python

 

it自動化運維就是要很方便的運用各類工具進行管理維護,有效的實施服務器保護
linux運維人員經常使用工具介紹mysql

1.不少地方常常會用到的rsync工具 實施幾臺服務器的同步效果
咱們公司就是使用這個工具完成服務器的遊戲的服務端和客戶端同步,有幾個文章例子linux

rsync 強化技術(手動修改端口開啓防火牆的狀況下)而且經過腳本只同步須要的服務器ios

inotify+rsync+mutt+msmtp 實現linux文件或者目錄自動更新而且實現發郵件給管理員nginx

二、網絡服務,服務有不少種,每間公司都會用到不一樣的,但基礎的服務確定要掌握,如FTP, DNS,SAMBA, 郵件, 這幾個大概學一下就行,LAMP和LNMP是必需要熟練,我所指的不是光光會搭建,而是要很熟悉裏面的至關配置才行,由於公司最關鍵的絕對是WEB服務器,因此nginx和apache要熟悉,特別是nginx必定要很熟悉才行,至少有些公司還會用tomcat,這個也最好學一下。其實網絡服務方面不用太擔憂,通常公司的環境都已經搭建好,就算有新服務器或讓你整改,公司會有相應的文檔讓你參照來弄,不會讓你亂來的,但至少相關的配置必定要學熟,並且確定是編譯安裝多,那些模塊要熟悉一下他的做用,特別是PHP那些模塊。
這面2點只是基礎,也是必要條件,不能說是工具,下以纔是真正的要掌握的工具。web

Samba文件共享服務(共享腳本 讓你工做更輕鬆)面試

Linux web服務安裝apache 思路 (源碼編譯,本身定義服務)正則表達式

FTP(持虛擬用戶,而且每一個虛擬用戶能夠具備獨立的屬性配置)

linux 下構建DHCP服務器

 

三、shell腳本和另外一個腳本語言,shell是運維人員必須具有的,不懂這個連入職都不行,至少也要寫出一些系統管理腳本,最簡單也得寫個監控CPU,內存比率的腳本吧,這是最最最基本了,別覺得會寫那些猜數字和計算什麼數的,這些沒什麼做用,只做學習意義,寫系統腳本纔是最有意義,而另外一個腳本語言是可選的,通常是3P,即python, perl和php,php就不須要考慮了,除非你要作開發,我我的建議學python會比較好,難實現自動化運維,perl是文本處理很強大,反正這兩個學一個就好了。

Shell(一) 入門到複雜 本身作的各類腳本實例與解釋

Shell(二)入門到複雜 腳本實例(計算器)
四、sed和awk工具,必需要掌握,在掌握這兩個工具同時,還要掌握正則表達式,這個就痛苦了,正則是最難學的表達式,但結合到sed和awk中會很強大,在處理文本內容和過濾WEB內容時十分有用,不過在學shell的同時通常會常常結合用到的,因此學第3點就會順便學第4點。
sed 簡明教程
五、文本處理命令,sort , tr , cut, paste, uniq, tee等,必學,也是結合第3點時一併學習的。


六、數據庫,首選mysql,別問我爲何不學sqlserver和oracle,由於linux用得最多絕對是mysql,增刪改查必學,特別要學熟查,其它方面可能不太須要,由於運維人員使用最多仍是查,哪些優化和開發語句不會讓你弄的。
Mysql(手動編譯詳細思路,以及增刪改查,受權,備份還原)


七、防火牆,不學不行,防火牆也算是個難點,說難不難,說易不易,最重要弄懂規則,若是學過CCNA的朋友可能會比較好學,由於iptables也有NAT表,原理是同樣的,而FILTER表用得最多,反正不學就確定不合格。
防火牆(一)主機型防火牆

防火牆(二)SNAT和DNAT


八、監控工具,十分十分重要,我我的建議,最好學這3個,cacti,nagios,zibbix,企業用得最多應該是nagios和 zibbix,反正都學吧,但nagios會有點難,由於會涉及到用腳本寫自動監控,那個地方很難。

CentOS 6.2+Nginx+Nagios,手機短信和qq郵箱提醒

服務器集中檢測Cacti

九、集羣和熱備,這個很重要,確定要懂的,但到了公司就不會讓你去弄,由於新手基本不讓你碰,集羣工具備不少,最好學是LVS,這是必學,最好也學學nginx集羣,反向代理,還有熱備,這個就更多工具能實現了,像我公司是本身開發熱備工具的,mysql熱備也要學,就是主從複製,這個別告訴我容易,其實不容易的,要學懂整個流程一點也不容易,只照着作根本沒意思。

mysql 主從同步,雙主同步,若是服務器意外掛機,不一樣步怎麼辦

mysql 高性能壓力測試(總結了很久)

nginx 緩存配置及報錯解決

十、數據備份,不學不行,工具備不少,但至少要把RAID的原理弄懂,特別是企業最經常使用的1+0或0+1,本身作實驗也要弄出來,備份工具備不少,如tar, dump,最好多瞭解一下。
算了,說到這10點已經夠你受了,應該能夠入門了,由於有些技術會比較難學,例如apache和nginx中還有些很重要的技術,如系統調優和服務優化,還有程序優化,這些在沒接觸工做前很難學習到的,因此先把這10點學了吧,估計要學熟至少3個月不止,就腳本那部分已經讓你很吃力了,我建議是先學熟shell,等工做後再學另外一門腳本語言,這樣會比較好。

常見的MySQL命令大全


以上就是踏入linux運維工程師須要掌握的工具,其實還有不少工具要掌握的,但你在學習環境中是很難學到,最後我再提醒一下,這裏所指的工具至關於技能,而不是像windows或ubuntu那些圖形化工具,那些工具沒用的,還有,學linux就別裝圖形界面,這樣虛擬機就不用吃太多內存,並且絕對不建議在真機上裝linux,根本達不到學習效果。

 

 

 

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

 

 

詳解 Linux 運維工程師打怪升級篇

積累經驗篇
作運維也快4年多了,就像遊戲打怪升級,升級後知識體系和運維體系也相對變化挺大,學習了不少新的知識點。

運維工程師 是從一個呆逼進化爲苦逼再成長爲牛逼的過程,前提在於你要能忍能幹能拼,還要具備敏銳的嗅覺感知前方潮流變化。如:今年大數據,人工智能比較火。。。(相對錶示就是 python 比較火)

前面也講了運維基礎篇,發現對不少人收益挺大,接下來也寫下關於這4年多的運維實踐經驗,從事了2年多遊戲運維,1年多安全運維,1年大數據運維,相關行業信息不能算很是精通嗎,可是熟悉和熟練仍是相對能夠的。

 

 

拓撲詳見:

中級篇
從我後面面試經歷和麪試別人的經歷。有些人認爲,其實運維就是部署某個軟件,設置些基礎功能,就算會運維了。

舉個例子:安裝LAMP,LNMP,就感受部署方法我都掌握了。其實網上大多數都有一鍵安裝腳本啥的根本沒有啥技術含量,在面試官眼裏,這些都不是你的亮點。基本到了公司通常環境架構都是部署好的,不多須要你去變更環境架構。就算你安裝好 LNMP 架構你熟悉裏面的原理嗎,熟悉 Nginx 優化嗎,熟悉 MySQL 優化嗎?

再舉個例子:我面試遇到的問題,面試官問你既然熟悉 LNMP 架構,那麼 Nginx 反向代理的做用。
你應該不是說出懂這個軟件和配置,你儘量的說怎麼優化,怎麼深刻提升網站性能。

一、使用反向代理能夠理解爲7層應用層的負載均衡,使用負載均衡以後能夠很是便捷的橫向擴展服務器集羣,實現集羣總體併發能力、抗壓能力的提升。
二、一般反向代理服務器會帶有本地 Cache 功能,經過靜態資源的 Cache,有效的減小後端服務器所承載的壓力,從而提升性能。

下面說說運維在工做中須要掌握的核心技術
注意,這是在工做中掌握的,在學習中很難掌握。

一、第一條最主要的排錯
● 分析部分程序不能運行或沒有按預想結果運行的緣由,對程序運行跟蹤,查看系統調用的過程。
● 較深刻的系統瓶頸點分析。

查看剩餘內存:

free -m
#-/+ buffers/cache:       6458       1649
#6458M爲真實使用內存  1649M爲真實剩餘內存(剩餘內存+緩存+緩衝器)
#linux會利用全部的剩餘內存做爲緩存,因此要保證linux運行速度,就須要保證內存的緩存大小

  

系統信息:

uname -a              # 查看Linux內核版本信息
cat /proc/version     # 查看內核版本
cat /etc/issue        # 查看系統版本
lsb_release -a        # 查看系統版本  需安裝 centos-release
locale -a             # 列出全部語系
locale                # 當前環境變量中全部編碼
hwclock               # 查看時間
who                   # 當前在線用戶
w                     # 當前在線用戶
whoami                # 查看當前用戶名
logname               # 查看初始登錄用戶名
uptime                # 查看服務器啓動時間
sar -n DEV 1 10       # 查看網卡網速流量
dmesg                 # 顯示開機信息
lsmod                 # 查看內核模塊

  

硬件信息:

more /proc/cpuinfo                                       # 查看cpu信息
lscpu                                                    # 查看cpu信息
cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c    # 查看cpu型號和邏輯核心數
getconf LONG_BIT                                         # cpu運行的位數
cat /proc/cpuinfo | grep 'physical id' |sort| uniq -c    # 物理cpu個數
cat /proc/cpuinfo | grep flags | grep ' lm ' | wc -l     # 結果大於0支持64位
cat /proc/cpuinfo|grep flags                             # 查看cpu是否支持虛擬化   pae支持半虛擬化  IntelVT 支持全虛擬化
more /proc/meminfo                                       # 查看內存信息
dmidecode                                                # 查看全面硬件信息
dmidecode | grep "Product Name"                          # 查看服務器型號
dmidecode | grep -P -A5 "Memory\s+Device" | grep Size | grep -v Range       # 查看內存插槽
cat /proc/mdstat                                         # 查看軟raid信息
cat /proc/scsi/scsi                                      # 查看Dell硬raid信息(IBM、HP須要官方檢測工具)
lspci                                                    # 查看硬件信息
lspci|grep RAID                                          # 查看是否支持raid
lspci -vvv |grep Ethernet                                # 查看網卡型號
lspci -vvv |grep Kernel|grep driver                      # 查看驅動模塊
modinfo tg2                                              # 查看驅動版本(驅動模塊)
ethtool -i em1                                           # 查看網卡驅動版本
ethtool em1

  

● 使用分析系統分析web日誌。(如逆火軟件,)
● 分析系統性能瓶頸點(IO/memory/cpu,經常使用工具,top命令中shift組合鍵的特殊用Sar/vmstat/iostat/ipcs)

日誌管理經常使用命令:

history                      # 歷時命令默認1000條
HISTTIMEFORMAT="%Y-%m-%d %H:%M:%S "   # 讓history命令顯示具體時間
history  -c                  # 清除記錄命令
cat $HOME/.bash_history      # 歷史命令記錄文件
lastb -a                     # 列出登陸系統失敗的用戶相關信息  清空二進制日誌記錄文件 echo > /var/log/btmp  
last                         # 查看登錄過的用戶信息  清空二進制日誌記錄文件 echo > /var/log/wtmp   默認打開亂碼
who /var/log/wtmp            # 查看登錄過的用戶信息
lastlog                      # 用戶最後登陸的時間
tail -f /var/log/messages    # 系統日誌
tail -f /var/log/secure      # ssh日誌

  

二、優化
優化能夠說是運維最吃香的技能,基本會優化的運維廣泛工資很高,並且優化是要承擔風險的,並非網上搜個文章改一下配置文件或者參數就叫優化了,這樣很容易形成宕機。

優化是根據實際的現場環境硬件各個參數進行部分優化,提升軟件性能和網站性能。這個我只能講半知半解,當時優化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

內存調優:

"C:\Program Files\Java\jdk1.8.0_31\bin\java" -XX:+DoEscapeAnalysis -XX:+EliminateAllocations -XX:+UseTLAB -XX:+PrintGCDetails -Didea.launcher.port=7540 "-Didea.launcher.bin.path=E:\java\IntelliJ IDEA 2016.3\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\Java\jdk1.8.0_31\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_31\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_31\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_31\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_31\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_31\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_31\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_31\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_31\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_31\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_31\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_31\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_31\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_31\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_31\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_31\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_31\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_31\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_31\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_31\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_31\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_31\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_31\jre\lib\rt.jar;E:\java\new\out\production\new;E:\java\IntelliJ IDEA 2016.3\lib\idea_rt.jar" com.intellij.rt.execution.application.AppMain aa.T02
Heap
 PSYoungGen      total 38400K, used 3994K [0x00000000d5d80000, 0x00000000d8800000, 0x0000000100000000)
  eden space 33280K, 12% used [0x00000000d5d80000,0x00000000d61668b8,0x00000000d7e00000)
  from space 5120K, 0% used [0x00000000d8300000,0x00000000d8300000,0x00000000d8800000)
  to   space 5120K, 0% used [0x00000000d7e00000,0x00000000d7e00000,0x00000000d8300000)
 ParOldGen       total 87552K, used 0K [0x0000000081800000, 0x0000000086d80000, 0x00000000d5d80000)
  object space 87552K, 0% used [0x0000000081800000,0x0000000081800000,0x0000000086d80000)
 Metaspace       used 3072K, capacity 4494K, committed 4864K, reserved 1056768K
  class space    used 329K, capacity 386K, committed 512K, reserved 1048576K
Heap
 PSYoungGen      total 38400K, used 1147K [0x00000000d5d80000, 0x00000000d8800000, 0x0000000100000000)
  eden space 33280K, 3% used [0x00000000d5d80000,0x00000000d5e9ecb8,0x00000000d7e00000)
  from space 5120K, 0% used [0x00000000d8300000,0x00000000d8300000,0x00000000d8800000)
  to   space 5120K, 0% used [0x00000000d7e00000,0x00000000d7e00000,0x00000000d8300000)
 ParOldGen       total 87552K, used 0K [0x0000000081800000, 0x0000000086d80000, 0x00000000d5d80000)
  object space 87552K, 0% used [0x0000000081800000,0x0000000081800000,0x0000000086d80000)
 Metaspace       used 3072K, capacity 4494K, committed 4864K, reserved 1056768K
  class space    used 330K, capacity 386K, committed 512K, reserved 1048576K
  線程本地緩存使用eden的,開啓就會使用更多

  

tomcat 前任何參數沒參加大概每秒605 調優後大概每秒435 接近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

四、意識篇
1) 安全意識:
運維人員的權限很大,因此必定要保證賬號/私鑰的安全。
● 最好使用加密工具存儲。好比truecrypt,lpassword
● 基於本地存儲。切勿用網盤,也不建議用lastpass等
● ssh私鑰添加密碼

2) 磨刀意識:
關於任何操做配置,最好先搞明白操做或配置的原理,而後再去操做。應一句話叫作「磨刀不誤砍柴功」,並且對於相似的操做能夠觸類旁通。

3) 計劃意識:
複雜的變動操做好比多臺主機以及牽涉到san存儲,最好先做 操做計劃,寫計劃文檔,詳細緻每條命令,而後請高手幫忙審覈。 這樣能最大程度使整個操做過程安全。若是是重要的客戶業務系統,操做最好有回退方案,而一旦變動失敗,客戶能夠在短期內將業務回退。

4) 記錄分享意識:
遇到本身認爲較特殊的案例時,記得要寫 案例過程及分析的文檔。也方便本身之後翻看,或者和其餘兄弟分享,做知識的傳播以便於你們之後都能少走彎路。

5) 監控意識:
運維來講,監控是很是重要的,監控是發現系統各類異常的眼睛,因此運維應該和監控緊密配合。

6) 業務意識:
儘可能瞭解維護的各主機上業務類型,以及各主機業務之間的關聯性。由於任何維護工做都是爲主機能提供業務服務的,當某業務中斷,能最快的知道與此業務相關的主機羣,從而縮小故障排查範圍,最快定位故障。

附上運維思路拓撲圖:

能夠看看:安全運維理念(半神半仙亦民工)

意識是很重要,並非你技術很牛,學的技術不少很熟,就不表明你不須要運維意識,其實領導很看重運維意識的,例若有沒有作好備份,權限分配問題,平臺測試狀況,故障響應時間等,這些都是意識,而不是你學了不少技術自認大牛了,平臺發現故障你又沒什麼大不子,覺得很簡單的問題喜歡處理就處理,不須要向其它部門反饋等,領導不是看你的技術如何,而是看你的運維意識如何,你沒運維意識,技術再牛也沒用,只會讓其它部門的人跟你不協調。

要知道作IT這行是苦B的,須要無盡的學習,不學習只會被淘汰,不想被年輕的淘汰,就只能不斷增值本身,否則不是你工資沒法提高,而是你沒法再從事這行。

這個世界,在悄悄懲罰不改變的人...

 

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


浩子的▁運維筆錄ヽ

詳解linux運維工程師入門級必備技能

詳解 Linux 運維工程師打怪升級篇

相關文章
相關標籤/搜索