集大咖之作,由運維圈的明星人物、擁有15年運維經驗的肖力領銜策劃,首次將國內來自騰訊、*、YY、盛大游戲、UC、西山居、獵豹移動的14位資深運維大咖聚集在了一起,有針對性地挖掘了他們多年來在各種工作中積累的獨到經驗和*實踐。得到了七牛云創始人許世偉、盛大游戲G云總負責人陳桂新等多位業界專家的好評和推薦。集大成之作,精選了運維領域重要的6大主題:運維運維與虛擬化14個重要的知識點。所有的知識點既有理論指導,又有方法論的提煉;既有來自這些專家們共事過的企業的商業案例,又有針對企業常見問題的解決方案。
14位來自騰訊、*、YY、盛大游戲、UC、西山居、獵豹移動的資深運維分享他們在自動化運維、系統運維、云與虛擬化、Web運維、游戲運維、數據庫運維技巧總結,七牛云聯合出品
Preface?前 言為什么要寫這本書《運維前線:一線運維專家的運維方法、技巧與實踐》(以下簡稱《運維前線》)是前線系列的一個子集,前線系列圖書的出版理念是邀請多位業界專家,總結所在行業的最新理念或深度實踐經驗。前線系列圖書不同于市面上的很多圖書,這類書并不系統,有的只是一線專家的實戰經驗,人們常稱之為干貨。一篇文章、一家公司、一個案例、一個場景,獨立成篇,在滿足碎片化閱讀的同時,也能讓讀者進行橫向比較和深入思考。本系列圖書不強調大而全,追求的是每篇文章都是精品,希望能給讀者帶來深度的啟發和收獲。 按照這個理念,之前著名產品經理蘭軍(筆名Blues)策劃的《產品前線》,出版之后大獲成功,隨之而來的《運維前線》令我感覺到壓力巨大。《運維前線》的出版猶如十月懷胎,中間充滿波折,好幾次我都以為要半途而廢了,最后終于得以出版,在此要特別感謝機械工業出版社華章公司著名出版人楊福川,是他的堅持和鼓勵讓我總能在迷茫中看到希望。我和福川有共同的理念,希望把《運維前線》做成精品,如果有哪點不符合要求,那么我們寧愿耗時長一些,多打磨打磨,很慶幸能與福川一起合作。 本書共有14位作者,包含了在騰訊、YY語音、UC、京東、盛大游戲、金山西山居、獵豹移動、廣發銀行、優維科技等多家公司工作的實踐經驗,基本覆蓋了互聯網和傳統行業運維的各個領域,估計這是迄今為止第一本由這么多資深運維專家聯合寫成的圖書,也是第一本分享了眾多一線運維專家親身實踐的圖書。本書的出版也充分體現了互聯網開放合作的精神。 看到本書的目錄時,我激動不已,即使書中的內容我已經看了好多遍,但是在回顧目錄的時候,我依然感到這是一本非常有吸引力的書,是一本每名運維工程師都應該案頭常備的書! 本書特色當前IT領域的概念層出不窮,云計算、物聯網、移動互聯網、大數據、人工智能、VR,所有的這一切都基于IT系統,IT系統正在向規模更大、更復雜、更高級的方向演進,一切IT資源都掌握在運維手里,通過運維來操作。這個時代對運維的要求越來越高,運維如果稍有不慎,就會造成重大的損失,所以隨著IT系統的發展,運維的重要性也越來越高。 根據量子力學理論,世界由基本粒子組成,因此世界是不連續的,這個理論在運維知識體系的建立上同樣適用。仔細回想一下自己運維體系的建立,就是逐個攻克和掌握知識點,再進一步通過實踐不斷加深的過程。《運維前線》也是這樣,其中的每一篇文章都能夠協助讀者更快地掌握一個或多個知識點,相信通過運維前線系列的逐步出版,最終能夠覆蓋更多的運維知識點,為讀者帶來更多的實踐經驗和理念。 作為運維前線系列的第一本書,本書覆蓋了運維自動化、系統運維、云及虛擬化、Web運維、游戲運維、DBA運維等6個方面14個知識點,都是各位作者總結自己多年實踐經驗的干貨,每一篇文章都很精彩,都值得讀者仔細品味。 本書作者本書第1章自動化運維之深度解碼,來自訂閱號互聯網運維雜談的作者、優維科技創始人王津銀,人稱老王。我在多個場合聽過老王的分享,有40分鐘的,也有長達3個小時的,令我驚訝的是,老王每次總能帶來新的東西。這篇自動化運維之深度解碼也是如此,凝結了老王許多最新的見解,值得深讀。 胥峰是我在盛大游戲的前同事,從胥峰身上我學到了不少知識,比如解決問題的思路和方法,有時候碰到運維難題,也許換一個角度就能迎刃而解。 劉宇、尹會生、陳立軍是我多年的同事。劉宇、會生已經出版了多本運維圖書,他們都是非常資深的運維專家。劉宇無論演講還是文章都邏輯清晰,絲絲入扣。會生和立軍分享的都是我親眼所見的、在工作中碰到的難題及解決方法。 張觀石是歡聚時代(YY)互娛事業部業務運維負責人,有多年的將PHP運用到日常運維中的經驗。觀石將PHP用到了極致,即使不懂PHP,也可以通過本書一窺觀石在運維方面的豐富經驗。 馬亮有多年的游戲運維經驗,目前在騰訊云專注做游戲云的架構設計,對游戲運維有深刻的理解。 本書的作者還有冉宏元(老男孩)、余洪春(撫琴煮酒)、吳傳玉、彭華盛、蔣迪、趙旻、趙海軍。雖然我與他們未曾謀面,但是彼此都是熟悉的網友,他們的文章我都曾仔細拜讀并多次請教過,其中的運維思想讓我深深折服,非常期待能有機會向他們當面請教。 讀者對象本書面向所有的運維工程師,無論是資深運維,還是剛入行的運維,相信都能從本書中獲益。本書的讀者對象包括如下幾類: 系統運維工程師安全工程師數據庫運維工程師業務運維工程師網絡運維工程師運維系統開發工程師及架構師云計算/虛擬化運維工程師其他對運維感興趣的讀者勘誤和支持由于作者的水平有限,編寫時間比較倉促,書中難免會出現一些錯誤或不準確的地方,懇請讀者批評指正。如果您有更多寶貴的意見,歡迎關注我的訂閱號云技術實踐,然后在后臺將您的寶貴意見發送給我。本書的勘誤也會通過訂閱號進行發布,關注訂閱號請掃描下面的二維碼: 運維前線是一個系列,歡迎在平時工作中積累了實戰經驗的廣大運維工程師繼續參與運維前線的寫作,帶來更多的干貨分享! 期待能夠得到你們的真摯反饋,在運維之路上互勉共進。 致謝從開始構思到《運維前線》的出版,本書的創作過程猶如十月懷胎,期間也獲得了無數的支持與肯定。借此機會,向所有為此奉獻力量的人表示深深的感謝。 感謝參與本書寫作的14位行業專家,他們在百忙之中伏案寫作,將自己的經驗共享給廣大讀者。能夠和你們合作,我深感榮幸,經過將近一年時間的溝通和交流,你們的專業和執著深深地打動了我,同時也讓我學到了不少東西。 感謝機械工業出版社華章公司的首席策劃楊福川,編輯高婧雅、孫海亮。在近一年的時間中,你們的敬業精神不斷地鼓舞著我前進,你們的鼓勵、幫助和堅持引導了本書的完成。 這里,我還要特別感謝七牛云。七牛云是我見過的最具技術氣質的云服務企業,肩負幫助開發者縮短從想法到產品的距離的使命,立志打造以數據為核心的場景化PaaS服務。七牛云主張技術共享并熱衷于技術的傳播,發起架構師實踐日,推出各類創業扶持計劃,這些都是七牛云正在做的事。 特別致謝本書在成書過程中,得到了一批熱心志愿者的協助,他們是陳家豪、曹學朋、鄧榮興、劉海文、李斯朗、韓海林,尤其劉海文做了大量的義務工作,在此特別感謝! 肖 力志愿者的話能在力哥組織的這本書中擔任助理,我感到非常榮幸。本書出自一群經驗老到并樂于分享的運維前輩之手,是一本案頭必備的好書。 劉海文
2014 6 DevOps Puppet10X8610Linux 10Leader IT IDC
Contents?目 錄推薦序前 言第1章 自動化運維之深度解碼 11.1 概述 11.2 運維自動化的三重境界 31.3 運維自動化的困境和價值 41.3.1 運維自動化的困境 41.3.2 運維自動化的價值 41.4 運維自動化的多維解讀 51.4.1 基于應用變更場景的維度劃分 51.4.2 基于系統層次的維度劃分 81.4.3基于與業務程序耦合緊密程度的維度劃分 81.4.4 面向服務的自動化能力劃分 91.5 運維自動化的方法論 111.6 運維自動化系統的實現 121.6.1 DNS管理系統 121.6.2 CMDB管理系統 131.6.3 名字服務中心系統 131.6.4 持續部署管理系統 141.6.5 運維調度管理系統 151.7 運維自動化系統的API參考實現 161.8 運維自動化依賴的團隊模型 171.8.1 團隊的能力模型 171.8.2 團隊的驅動模型 181.8.3 團隊的技能模型 181.8.4 參考的運維團隊組織結構 191.9 小結 19第2章利用Facter和Django快速構建CMDB 202.1 CMDB簡介 212.2 開源CMDB介紹 212.2.1 OneCMDB介紹 212.2.2 CMDBuild介紹 222.2.3 其他的開源CMDB 232.3 Puppet及Facter介紹 242.3.1 什么是Puppet 242.3.2 為什么是Puppet 252.3.3 什么是Facter 252.3.4 Facter的特點 252.3.5 Facter變量 262.4 如何利用Python獲取Facts 272.4.1 工作原理 272.4.2 利用Python腳本獲取Facts 272.5使用Django快速構建CMDB系統 282.5.1 Django介紹 282.5.2 Django安裝 292.5.3 Django常用命令 302.5.4 Django的配置 302.6 高級進階 442.6.1 歷史查詢功能 442.6.2 API功能 452.6.3 數據表結構 482.6.4 用戶管理功能 502.6.5 用戶組管理功能 512.7 小結 53第3章數據中心搬遷中的x86自動化運維 543.1 數據中心搬遷準備 543.1.1 數據中心搬遷介紹 543.1.2 搬遷環境介紹 553.1.3 搬遷前的準備工作 563.1.4 搬遷信息收集 563.2利用VMware腳本簡化虛擬化層的搬遷 583.2.1通過腳本完成ESXI安裝后的基礎設置 583.2.2 批量掛載數據盤 633.2.3 批量注冊虛擬機 673.2.4 vCenter目錄結構的調整 683.2.5批量更改虛擬機名稱及port group 693.2.6批量設置虛擬機版本和CPU、內存保留值 703.3利用批處理與Shell腳本簡化邏輯節點的搬遷 713.3.1 邏輯節點切換腳本的思路 713.3.2利用批處理腳本簡化Windows邏輯節點的搬遷 723.3.3利用Shell腳本簡化Linux邏輯節點的搬遷 783.3.4通過SFTP和WMIC指令將腳本文件上傳至所有虛擬機 863.3.5 搬遷期間的注意事項 873.4 小結 87第4章集中配置管理工具Puppet 884.1如何同步puppet-agent端上的常用服務 894.2如何在puppet-agent端上自動安裝常用的軟件包 904.3如何自動同步puppet-agent端的yum源 904.4如何根據不同名字的節點機器推送不同的文件 924.5如何根據節點機器名來選擇性地執行Shell程序 954.6如何快速同步puppet-server端的www目錄文件 974.7如何利用ERB模板自動配置Apache虛擬主機 1024.8如何利用ERB模板自動配置Nginx虛擬主機 1054.9 小結 110第5章深度實踐iptables 1115.1 禁用連接追蹤 1115.1.1 排查連接追蹤導致的故障 1115.1.2 分析連接追蹤的原理 1135.1.3 禁用連接追蹤的方法 1145.1.4 確認禁用連接追蹤的效果 1175.2 慎重禁用ICMP協議 1175.2.1禁用ICMP協議導致的一則故障案例 1175.2.2 MTU發現的原理 1195.2.3 解決問題的方法 1215.3 網絡地址轉換在實踐中的案例 1215.3.1 源地址NAT 1215.3.2 目的地址NAT 1225.4深入理解iptables的各種表和各種鏈 1235.5 小結 125第6章使用systemd管理Linux系統服務 1266.1 systemd和sysVinit之間的關系 1266.1.1 sysVinit方式下系統的啟動特點 1276.1.2 systemd方式下系統的啟動特點 1276.2 systemd的原理和啟動順序 1286.2.1 sysVinit的啟動順序 1286.2.2 systemd的啟動順序 1306.3 systemd的進程控制命令 1356.3.1 systemctl命令 1366.3.2 hostnamectl命令 1366.3.3 localectl命令 1376.3.4 loginctl命令 1376.3.5 timedatectl命令 1386.4 systemd服務管理 1386.4.1編寫Nginx的sysVinit啟動腳本 1386.4.2編寫Nginx的systemd啟動腳本 1406.4.3 systemd的其他功能 1426.5 優化 1466.5.1使用systemd-analyze優化啟動時間 1466.5.2 使用systemd journal功能 1486.6 小結 148第7章PHP運維實踐 1497.1 PHP再認識 1507.1.1 PHP進程的工作方式 1507.1.2 PHP代碼的編譯和部署 1517.1.3 PHP內部實現和生命周期 1517.1.4 PHP在互聯網技術棧的位置 1527.2PHP開發、架構、運維問題及解決思路 1537.2.1 運維對PHP研發提要求 1537.2.2運維參與PHP項目架構設計 1547.2.3PHP運維常見問題及解決之道 1567.3 PHP進程部署和配置、代碼發布 1577.3.1 PHP進程的部署 1577.3.2 PHP配置文件變更 1617.3.3 PHP配置項 1627.3.4PHP進程部署及配置文件管理實踐 1647.3.5 PHP代碼發布 1657.3.6PHP代碼發布實踐:代碼發布系統 1677.4 PHP性能分析 1707.4.1 性能問題概述 1707.4.2 PHP性能問題 1717.4.3 性能分析方法 1727.4.4PHP性能分析實踐:性能分析系統 1817.5 PHP故障處理與監控 1827.5.1 PHP故障分類及處理思路 1837.5.2 業務監控和故障發現 1847.5.3 PHP故障消除的方法 1867.5.4 故障分析案例 1877.6 小結 189第8章應用系統運行分析 1908.1 分析模型 1918.1.1 數據采集 1918.1.2 數據模型 1948.2 運行分析平臺建設 1998.2.1 數據采集接口 1998.2.2 數據分析模塊 2008.2.3 推廣 2008.3 呼叫中心系統運行分析示例 2018.3.1 確定分析方案 2018.3.2 問題分析案例介紹 2028.4 小結 203第9章虛擬化中存儲配置典型場景:啟動風暴 2049.1 oVirt虛擬化平臺配置介紹 2059.1.1 存儲配置背景知識 2059.1.2 模板與實例同一存儲 2069.1.3 模板與實例分離存儲 2079.1.4無狀態實例的硬盤與快照分離存儲 2079.2 啟動風暴相關系列實驗 2089.2.1 模板配置 2089.2.2 實驗腳本 2089.2.3WD 1TB機械硬盤啟動Windows XP實驗 2109.2.4Intel 480GB SSD啟動WindowsXP實驗 2129.2.5 實驗結論 2149.3私有云中處理啟動風暴的常用方法 2149.3.1 啟動排隊 2149.3.2 存儲分層選擇 2159.3.3其他提升桌面云存儲性能的方式 2179.4 小結 219第10章私有云桌面網絡組建 22010.1 桌面云常用網絡 22010.1.1 NAT網絡 22010.1.2 橋接網絡 22310.1.3 VLAN網絡 22610.1.4 Access模式 22610.1.5 Trunk模式 22910.1.6 Open vSwitch 23110.2 oVirt/OpenStack的桌面網絡應用 23210.2.1 oVirt/OpenStack組網方式 23210.2.2 應用場景舉例 23710.3 小結 239第11章淺談服務器交付的那些事兒 24011.1 設備簽收的學問 24011.2 服務器設置 24111.3 Cobbler的流程與規劃 24411.4 服務器安裝時遇到的各種坑 24711.4.1DHCP客戶端獲取IP地址失敗 24711.4.2 TFTP加載失敗 24811.4.3 TFTP Client交互后 無響應 24811.4.4 yum安裝失敗 24911.4.5Linux內核無法識別新硬件 25011.4.6惡意PXE啟動導致原有系統被誤裝 25011.5 交接后的故事 25011.6 小結 252第12章企業級Nginx Web服務優化實戰 25412.1 Nginx基本安全優化 25412.1.1調整參數隱藏Nginx軟件版本號信息 25412.1.2 更改源碼隱藏Nginx軟件名及版本號 25612.1.3更改Nginx服務的默認用戶 25912.2 根據參數優化Nginx服務性能 26012.2.1優化Nginx服務的worker進程個數 26012.2.2優化綁定不同的Nginx進程到不同的CPU上 26212.2.3 Nginx事件處理模型優化 26512.2.4調整Nginx單個進程允許的客戶端最大連接數 26612.2.5配置Nginx worker進程的最大打開文件數 26712.2.6優化服務器域名的散列表大小 26712.2.7 開啟高效文件傳輸模式 26912.2.8優化Nginx連接參數,調整連接超時時間 26912.2.9上傳文件大小的限制(動態應用) 27212.2.10 FastCGI相關參數調優(配合PHP引擎動態服務) 27312.2.11 配置Nginx gzip壓縮實現性能優化 27712.2.12 配置Nginx expires緩存實現性能優化 27912.3 Nginx日志相關的優化與安全 28312.3.1編寫腳本實現Nginx access日志輪詢 28312.3.2不記錄不需要的訪問日志 28412.3.3 訪問日志的權限設置 28412.4Nginx站點目錄及文件URL訪問控制 28412.4.1根據擴展名限制程序和文件訪問 28412.4.2禁止訪問指定目錄下的所有文件和目錄 28512.4.3 限制網站來源IP訪問 28612.4.4配置Nginx,禁止非法域名解析訪問企業網站 28712.5Nginx圖片及目錄防盜鏈解決方案 28812.6 Nginx錯誤頁面的優雅顯示 29512.6.1生產環境中常見的HTTP狀態碼列表 29512.6.2為什么要配置錯誤頁面優雅顯示 29512.7Nginx站點目錄文件及目錄權限優化 29812.8 Nginx防爬蟲優化 30012.9利用Nginx限制HTTP的請求方法 30212.10 使用CDN做網站內容加速 30212.10.1 什么是CDN 30212.10.2 CDN的特點 30312.10.3 企業使用CDN的基本 要求 30412.11 Nginx程序架構優化 30412.12 使用普通用戶啟動Nginx(監牢模式) 30512.12.1 為什么要讓Nginx服務使用普通用戶 30512.12.2 給Nginx服務降權的解決方案 30512.12.3 給Nginx服務降權實戰 30612.13 控制Nginx并發連接數量 30812.14 控制客戶端請求Nginx的速率 31212.15 小結 314第13章 游戲運維的思考 31513.1 游戲運維最關鍵的幾件事 31513.1.1 安全 31513.1.2 穩定 31813.1.3 高效 32213.1.4 成本節約 32313.2 游戲運維人的發展 3251