<b>前 言</b>
為什麼要寫這本書
《運維前線:一線運維專家的運維方法、技巧與實踐》(以下簡稱《運維前線》)是前線系列的一個子集,前線系列圖書的出版理念是邀請多位業界專家,總結所在行業的最新理念或深度實踐經驗。前線系列圖書不同于市面上的很多圖書,這類書并不系統,有的隻是一線專家的實戰經驗,人們常稱之為“幹貨”。一篇文章、一家公司、一個案例、一個場景,獨立成篇,在滿足碎片化閱讀的同時,也能讓讀者進行橫向比較和深入思考。本系列圖書不強調大而全,追求的是每篇文章都是精品,希望能給讀者帶來深度的啟發和收獲。
按照這個理念,之前著名産品經理蘭軍(筆名blues)策劃的《産品前線》,出版之後大獲成功,随之而來的《運維前線》令我感覺到壓力巨大。《運維前線》的出版猶如十月懷胎,中間充滿波折,好幾次我都以為要半途而廢了,最後終于得以出版,在此要特别感謝機械工業出版社華章公司著名出版人楊福川,是他的堅持和鼓勵讓我總能在迷茫中看到希望。我和福川有共同的理念,希望把《運維前線》做成精品,如果有哪點不符合要求,那麼我們甯願耗時長一些,多打磨打磨,很慶幸能與福川一起合作。
本書共有14位作者,包含了在騰訊、yy語音、uc、京東、盛大遊戲、金山西山居、獵豹移動、廣發銀行、優維科技等多家公司工作的實踐經驗,基本覆寫了網際網路和傳統行業運維的各個領域,估計這是迄今為止第一本由這麼多資深運維專家聯合寫成的圖書,也是第一本分享了衆多一線運維專家親身實踐的圖書。本書的出版也充分展現了網際網路開放合作的精神。
看到本書的目錄時,我激動不已,即使書中的内容我已經看了好多遍,但是在回顧目錄的時候,我依然感到這是一本非常有吸引力的書,是一本每名運維工程師都應該案頭常備的書!
本書特色
目前it領域的概念層出不窮,雲計算、物聯網、移動網際網路、大資料、人工智能、vr,所有的這一切都基于it系統,it系統正在向規模更大、更複雜、更進階的方向演進,一切it資源都掌握在運維手裡,通過運維來操作。這個時代對運維的要求越來越高,運維如果稍有不慎,就會造成重大的損失,是以随着it系統的發展,運維的重要性也越來越高。
根據量子力學理論,世界由基本粒子組成,是以世界是不連續的,這個理論在運維知識體系的建立上同樣适用。仔細回想一下自己運維體系的建立,就是逐個攻克和掌握知識點,再進一步通過實踐不斷加深的過程。《運維前線》也是這樣,其中的每一篇文章都能夠協助讀者更快地掌握一個或多個知識點,相信通過運維前線系列的逐漸出版,最終能夠覆寫更多的運維知識點,為讀者帶來更多的實踐經驗和理念。
作為運維前線系列的第一本書,本書覆寫了運維自動化、系統運維、雲及虛拟化、web運維、遊戲運維、dba運維等6個方面14個知識點,都是各位作者總結自己多年實踐經驗的幹貨,每一篇文章都很精彩,都值得讀者仔細品味。
本書作者
本書第1章“自動化運維之深度解碼”,來自訂閱号“網際網路運維雜談”的作者、優維科技創始人王津銀,人稱“老王”。我在多個場合聽過“老王”的分享,有40分鐘的,也有長達3個小時的,令我驚訝的是,“老王”每次總能帶來新的東西。這篇“自動化運維之深度解碼”也是如此,凝結了老王許多最新的見解,值得深讀。
胥峰是我在盛大遊戲的前同僚,從胥峰身上我學到了不少知識,比如解決問題的思路和方法,有時候碰到運維難題,也許換一個角度就能迎刃而解。
劉宇、尹會生、陳立軍是我多年的同僚。劉宇、會生已經出版了多本運維圖書,他們都是非常資深的運維專家。劉宇無論演講還是文章都邏輯清晰,絲絲入扣。會生和立軍分享的都是我親眼所見的、在工作中碰到的難題及解決方法。
張觀石是歡聚時代(yy)互娛事業部業務運維負責人,有多年的将php運用到日常運維中的經驗。觀石将php用到了極緻,即使不懂php,也可以通過本書一窺觀石在運維方面的豐富經驗。
馬亮有多年的遊戲運維經驗,目前在騰訊雲專注做遊戲雲的架構設計,對遊戲運維有深刻的了解。
本書的作者還有冉宏元(老男孩)、餘洪春(撫琴煮酒)、吳傳玉、彭華盛、蔣迪、趙旻、趙海軍。雖然我與他們未曾謀面,但是彼此都是熟悉的網友,他們的文章我都曾仔細拜讀并多次請教過,其中的運維思想讓我深深折服,非常期待能有機會向他們當面請教。
讀者對象
本書面向所有的運維工程師,無論是資深運維,還是剛入行的運維,相信都能從本書中獲益。本書的讀者對象包括如下幾類:
系統運維工程師
安全工程師
資料庫運維工程師
業務運維工程師
網絡運維工程師
運維系統開發工程師及架構師
雲計算/虛拟化運維工程師
其他對運維感興趣的讀者
勘誤和支援
由于作者的水準有限,編寫時間比較倉促,書中難免會出現一些錯誤或不準确的地方,懇請讀者批評指正。如果您有更多寶貴的意見,歡迎關注我的訂閱号“雲技術實踐”,然後在背景将您的寶貴意見發送給我。本書的勘誤也會通過訂閱号進行釋出,關注訂閱号請掃描下面的二維碼:
“運維前線”是一個系列,歡迎在平時工作中積累了實戰經驗的廣大運維工程師繼續參與“運維前線”的寫作,帶來更多的幹貨分享!
期待能夠得到你們的真摯回報,在運維之路上互勉共進。
緻謝
從開始構思到《運維前線》的出版,本書的創作過程猶如十月懷胎,期間也獲得了無數的支援與肯定。借此機會,向所有為此奉獻力量的人表示深深的感謝。
感謝參與本書寫作的14位行業專家,他們在百忙之中伏案寫作,将自己的經驗共享給廣大讀者。能夠和你們合作,我深感榮幸,經過将近一年時間的溝通和交流,你們的專業和執着深深地打動了我,同時也讓我學到了不少東西。
感謝機械工業出版社華章公司的首席策劃楊福川,編輯高婧雅、孫海亮。在近一年的時間中,你們的敬業精神不斷地鼓舞着我前進,你們的鼓勵、幫助和堅持引導了本書的完成。
這裡,我還要特别感謝七牛雲。七牛雲是我見過的最具技術氣質的雲服務企業,肩負“幫助開發者縮短從想法到産品的距離”的使命,立志打造以資料為核心的場景化paas服務。七牛雲主張技術共享并熱衷于技術的傳播,發起架構師實踐日,推出各類創業扶持計劃,這些都是七牛雲正在做的事。
特别緻謝
本書在成書過程中,得到了一批熱心志願者的協助,他們是陳家豪、曹學朋、鄧榮興、劉海文、李斯朗、韓海林,尤其劉海文做了大量的義務工作,在此特别感謝!
肖 力
志願者的話
能在力哥組織的這本書中擔任助理,我感到非常榮幸。本書出自一群經驗老到并樂于分享的運維前輩之手,是一本案頭必備的好書。
劉海文
目 錄
推薦序
前 言
第1章 自動化運維之深度解碼
<a href="https://yq.aliyun.com/articles/82679/" target="_blank">1.1 概述 </a>
<a href="https://yq.aliyun.com/articles/82681/" target="_blank">1.2 運維自動化的三重境界 </a>
<a href="https://yq.aliyun.com/articles/82684/" target="_blank">1.3 運維自動化的困境和價值 </a>
<a href="https://yq.aliyun.com/articles/82686" target="_blank">1.4 運維自動化的多元解讀</a>
<a href="https://yq.aliyun.com/articles/82687/" target="_blank">1.5 運維自動化的方法論 </a>
<a href="https://yq.aliyun.com/articles/82688/" target="_blank">1.6 運維自動化系統的實作 </a>
<a href="https://yq.aliyun.com/articles/82689/" target="_blank">1.7 運維自動化系統的api參考實作 </a>
<a href="https://yq.aliyun.com/articles/82690/" target="_blank">1.8 運維自動化依賴的團隊模型 </a>
<a href="https://yq.aliyun.com/articles/82691/" target="_blank">1.9 小結 </a>
第2章 利用facter和django快速建構cmdb
<a href="https://yq.aliyun.com/articles/82693" target="_blank">2.2 開源cmdb介紹 </a>
<a href="https://yq.aliyun.com/articles/82694/" target="_blank">2.3 puppet及facter介紹 </a>
<a href="https://yq.aliyun.com/articles/82696/" target="_blank">2.5 使用django快速建構cmdb系統 </a>
<a href="https://yq.aliyun.com/articles/82697/" target="_blank">2.6 進階進階 </a>
<a href="https://yq.aliyun.com/articles/82698/" target="_blank">2.7 小結 </a>
第3章 資料中心搬遷中的x86自動化運維
<a href="https://yq.aliyun.com/articles/82699/" target="_blank">3.1 資料中心搬遷準備 </a>
<a href="https://yq.aliyun.com/articles/82701" target="_blank">3.3 利用批處理與shell腳本簡化邏輯節點的搬遷</a>
<a href="https://yq.aliyun.com/articles/82702/" target="_blank">3.4 小結 </a>
第4章 集中配置管理工具puppet 88
4.1 如何同步puppet-agent端上的常用服務 89
4.2 如何在puppet-agent端上自動安裝常用的軟體包 90
4.3 如何自動同步puppet-agent端的yum源 90
4.4 如何根據不同名字的節點機器推送不同的檔案 92
4.5 如何根據節點機器名來選擇性地執行shell程式 95
4.6 如何快速同步puppet-server端的www目錄檔案 97
4.7 如何利用erb模闆自動配置apache虛拟主機 102
4.8 如何利用erb模闆自動配置nginx虛拟主機 105
4.9 小結 110
第5章 深度實踐iptables 111
5.1 禁用連接配接追蹤 111
5.1.1 排查連接配接追蹤導緻的故障 111
5.1.2 分析連接配接追蹤的原理 113
5.1.3 禁用連接配接追蹤的方法 114
5.1.4 确認禁用連接配接追蹤的效果 117
5.2 慎重禁用icmp協定 117
5.2.1 禁用icmp協定導緻的一則故障案例 117
5.2.2 mtu發現的原理 119
5.2.3 解決問題的方法 121
5.3 網絡位址轉換在實踐中的案例 121
5.3.1 源位址nat 121
5.3.2 目的位址nat 122
5.4 深入了解iptables的各種表和各種鍊 123
5.5 小結 125
第6章 使用systemd管理linux系統服務 126
6.1 systemd和sysvinit之間的關系 126
6.1.1 sysvinit方式下系統的啟動 特點 127
6.1.2 systemd方式下系統的啟動 特點 127
6.2 systemd的原理和啟動順序 128
6.2.1 sysvinit的啟動順序 128
6.2.2 systemd的啟動順序 130
6.3 systemd的程序控制指令 135
6.3.1 systemctl指令 136
6.3.2 hostnamectl指令 136
6.3.3 localectl指令 137
6.3.4 loginctl指令 137
6.3.5 timedatectl指令 138
6.4 systemd服務管理 138
6.4.1 編寫nginx的sysvinit啟動腳本 138
6.4.2 編寫nginx的systemd啟動腳本 140
6.4.3 systemd的其他功能 142
6.5 優化 146
6.5.1 使用systemd-analyze優化啟動時間 146
6.5.2 使用systemd journal功能 148
6.6 小結 148
第7章 php運維實踐 149
7.1 php再認識 150
7.1.1 php程序的工作方式 150
7.1.2 php代碼的編譯和部署 151
7.1.3 php内部實作和生命周期 151
7.1.4 php在網際網路技術棧的位置 152
7.2 php開發、架構、運維問題及解決思路 153
7.2.1 運維對php研發提要求 153
7.2.2 運維參與php項目架構設計 154
7.2.3 php運維常見問題及解決之道 156
7.3 php程序部署和配置、代碼釋出 157
7.3.1 php程序的部署 157
7.3.2 php配置檔案變更 161
7.3.3 php配置項 162
7.3.4 php程序部署及配置檔案管理實踐 164
7.3.5 php代碼釋出 165
7.3.6 php代碼釋出實踐:代碼釋出系統 167
7.4 php性能分析 170
7.4.1 性能問題概述 170
7.4.2 php性能問題 171
7.4.3 性能分析方法 172
7.4.4 php性能分析實踐:性能分析系統 181
7.5 php故障處理與監控 182
7.5.1 php故障分類及處理思路 183
7.5.2 業務監控和故障發現 184
7.5.3 php故障消除的方法 186
7.5.4 故障分析案例 187
7.6 小結 189
第8章 應用系統運作分析 190
8.1 分析模型 191
8.1.1 資料采集 191
8.1.2 資料模型 194
8.2 運作分析平台建設 199
8.2.1 資料采集接口 199
8.2.2 資料分析子產品 200
8.2.3 推廣 200
8.3 呼叫中心系統運作分析示例 201
8.3.1 确定分析方案 201
8.3.2 問題分析案例介紹 202
8.4 小結 203
第9章 虛拟化中存儲配置典型場景:啟動風暴 204
9.1 ovirt虛拟化平台配置介紹 205
9.1.1 存儲配置背景知識 205
9.1.2 模闆與執行個體同一存儲 206
9.1.3 模闆與執行個體分離存儲 207
9.1.4 無狀态執行個體的硬碟與快照分離存儲 207
9.2 啟動風暴相關系列實驗 208
9.2.1 模闆配置 208
9.2.2 實驗腳本 208
9.2.3 wd 1tb機械硬碟啟動windows xp實驗 210
9.2.4 intel 480gb ssd啟動windowsxp實驗 212
9.2.5 實驗結論 214
9.3 私有雲中處理啟動風暴的常用方法 214
9.3.1 啟動排隊 214
9.3.2 存儲分層選擇 215
9.3.3 其他提升桌面雲存儲性能的方式 217
9.4 小結 219
第10章 私有雲桌面網絡組建 220
10.1 桌面雲常用網絡 220
10.1.1 nat網絡 220
10.1.2 橋接網絡 223
10.1.3 vlan網絡 226
10.1.4 access模式 226
10.1.5 trunk模式 229
10.1.6 open vswitch 231
10.2 ovirt/openstack的桌面網絡應用 232
10.2.1 ovirt/openstack組網方式 232
10.2.2 應用場景舉例 237
10.3 小結 239
第11章 淺談伺服器傳遞的那些事兒 240
11.1 裝置簽收的學問 240
11.2 伺服器設定 241
11.3 cobbler的流程與規劃 244
11.4 伺服器安裝時遇到的各種坑 247
11.4.1 dhcp用戶端擷取ip位址失敗 247
11.4.2 tftp加載失敗 248
11.4.3 tftp client互動後 無響應 248
11.4.4 yum安裝失敗 249
11.4.5 linux核心無法識别新硬體 250
11.4.6 惡意pxe啟動導緻原有系統被誤裝 250
11.5 交接後的故事 250
11.6 小結 252
第12章 企業級nginx web服務優化實戰 254
12.1 nginx基本安全優化 254
12.1.1 調整參數隐藏nginx軟體版本号資訊 254
12.1.2 更改源碼隐藏nginx軟體名及版本号 256
12.1.3 更改nginx服務的預設使用者 259
12.2 根據參數優化nginx服務性能 260
12.2.1 優化nginx服務的worker程序個數 260
12.2.2 優化綁定不同的nginx程序到不同的cpu上 262
12.2.3 nginx事件處理模型優化 265
12.2.4 調整nginx單個程序允許的用戶端最大連接配接數 266
12.2.5 配置nginx worker程序的最大打開檔案數 267
12.2.6 優化伺服器域名的散清單大小 267
12.2.7 開啟高效檔案傳輸模式 269
12.2.8 優化nginx連接配接參數,調整連接配接逾時時間 269
12.2.9 上傳檔案大小的限制(動态應用) 272
12.2.10 fastcgi相關參數調優(配合php引擎動态服務) 273
12.2.11 配置nginx gzip壓縮實作性能優化 277
12.2.12 配置nginx expires緩存實作性能優化 279
12.3 nginx日志相關的優化與安全 283
12.3.1 編寫腳本實作nginx access日志輪詢 283
12.3.2 不記錄不需要的通路日志 284
12.3.3 通路日志的權限設定 284
12.4 nginx站點目錄及檔案url通路控制 284
12.4.1 根據擴充名限制程式和檔案通路 284
12.4.2 禁止通路指定目錄下的所有檔案和目錄 285
12.4.3 限制網站來源ip通路 286
12.4.4 配置nginx,禁止非法域名解析通路企業網站 287
12.5 nginx圖檔及目錄防盜鍊解決方案 288
12.6 nginx錯誤頁面的優雅顯示 295
12.6.1 生産環境中常見的http狀态碼清單 295
12.6.2 為什麼要配置錯誤頁面優雅顯示 295
12.7 nginx站點目錄檔案及目錄權限優化 298
12.8 nginx防爬蟲優化 300
12.9 利用nginx限制http的請求方法 302
12.10 使用cdn做網站内容加速 302
12.10.1 什麼是cdn 302
12.10.2 cdn的特點 303
12.10.3 企業使用cdn的基本 要求 304
12.11 nginx程式架構優化 304
12.12 使用普通使用者啟動nginx(監牢模式) 305
12.12.1 為什麼要讓nginx服務使用普通使用者 305
12.12.2 給nginx服務降級的解決方案 305
12.12.3 給nginx服務降級實戰 306
12.13 控制nginx并發連接配接數量 308
12.14 控制用戶端請求nginx的速率 312
12.15 小結 314
第13章 遊戲運維的思考 315
13.1 遊戲運維最關鍵的幾件事 315
13.1.1 安全 315
13.1.2 穩定 318
13.1.3 高效 322
13.1.4 成本節約 323
13.2 遊戲運維人的發展 325
13.3 小結 326
第14章 資料庫平台建設實戰 327
14.1 規範建立 327
14.1.1 安裝規範 328
14.1.2 配置規範 329
14.1.3 賬号、權限規範 335
14.1.4 目錄規範 336
14.1.5 其他規範 337
14.2 架構設計 339
14.2.1 架構圖 339
14.2.2 各個子產品介紹 340
14.3 功能介紹與實踐 341
14.3.1 操作部分 341
14.3.2 日志部分 349
14.3.3 資産部分 351
14.3.4 資訊展示 353
14.3.5 入口(lvs/redir) 354
14.4 後期功能展望 357
14.5 小結 357
附錄a 求職者與面試官 358