本書的內(nèi)容是對實際工作經(jīng)驗的總結(jié),涉及大量的DevOps及自動化運維知識點和專業(yè)術(shù)語,全書共分8章,分別介紹了DevOps與自動化運維在運維中的意義和存在的必要性、生產(chǎn)環(huán)境下的Shell腳本、Python在DevOps與自動化運維中的應(yīng)用、搭建自動化分布式虛擬環(huán)境的Vagrant、自動化運維工具Farbic、分布式自動化運維工具Ansible、自動化配置管理工具SaltStack,以及自動化運維中的后續(xù)思考等內(nèi)容。
我的系統(tǒng)架構(gòu)師之路
從2006年接觸Linux系統(tǒng)并從事Linux系統(tǒng)管理員的工作以來,我擔(dān)任過Linux系統(tǒng)工程師、項目實施工程師/高級Linux系統(tǒng)工程師、運維架構(gòu)師,到如今的高級系統(tǒng)開發(fā)工程師、系統(tǒng)架構(gòu)師,這一路走來,我深感開源技術(shù)和Linux系統(tǒng)的強大及魅力。
現(xiàn)階段我的職務(wù)是高級運維開發(fā)工程師(DevOps)、系統(tǒng)架構(gòu)師,主要工作是負責(zé)公司的CDN業(yè)務(wù)系統(tǒng)的運維自動化及公司APP產(chǎn)品的CI/CD工作及自動化部署工作。CDN系統(tǒng)相對于其他領(lǐng)域而言,海量機器的自動化運維工作是一件比較復(fù)雜的事情,關(guān)于這項工作,我們可以通過Python自動化配置管理管理工具,例如Ansible和SaltStack來進行二次開發(fā),結(jié)合公司的CMDB系統(tǒng),提供穩(wěn)定的后端API,方便前端人員或資產(chǎn)人員進行調(diào)用,這樣大家都可以利用界面來完成自動化運維工作。至今為止,令我印象最為深刻的還是公司的APP項目,該項目現(xiàn)在全部部署在云平臺(國內(nèi)云平臺)并且Docker容器化了,從前端到后端包括大數(shù)據(jù)接口,全部采用容器化的項目方式部署上線,整個自動化流程跟傳統(tǒng)的自動化方式大相徑庭。尤其是現(xiàn)在公司正在使用的Kubernetes,整個架構(gòu)設(shè)計非常復(fù)雜,學(xué)習(xí)成本也是非常高的,但帶來的容器的自動化管理也是非常便利的。目前,無論是國外的AWS、Google還是國內(nèi)的阿里云和騰訊云等主流公有云均提供Kubernetes的容器服務(wù),可以說Kubernetes在當(dāng)前容器行業(yè)是熱門的,而Docker技術(shù)正是Kubernetes的基石,建議大家盡快熟練Docker的使用方法。
撰寫本書的目的
云計算和容器技術(shù)是當(dāng)前的流行技術(shù)和發(fā)展趨勢,云計算和容器技術(shù)的流行對于傳統(tǒng)的運維知識體系其實也是一種沖擊,傳統(tǒng)運維工程師的工作性質(zhì)也在不斷地發(fā)生變化,要掌握很多新的技能和知識。大家經(jīng)常會在工作中看到DevOps這個詞。DevOps為什么會這么火?這跟最近幾年的云計算和容器技術(shù)的快速普及有很大關(guān)系 :云計算平臺上(包括Kubernets)的各種資源,從服務(wù)器到網(wǎng)絡(luò),再到負載均衡都是由API創(chuàng)建和操作的,這就意味著所有的資源都可以由“軟件定義”,這給各種自動化運維工具提供了一個非常好的基礎(chǔ)環(huán)境。而在傳統(tǒng)的互聯(lián)網(wǎng)行業(yè),例如筆者目前正在從事的CDN領(lǐng)域,由于機器數(shù)量眾多、網(wǎng)絡(luò)環(huán)境錯綜復(fù)雜,也需要由DevOps人員來設(shè)計工具,提供后端的自動化運維API,結(jié)合公司的CMDB資產(chǎn)管理系統(tǒng),提供自動化運維功能,簡化運維的操作流程及步驟,提高工作效率。
工作之余,許多讀者朋友們也在向我咨詢工作中的困惑,比如從事系統(tǒng)運維工作3~5年以后就不知道如何繼續(xù)學(xué)習(xí)和規(guī)劃自己的職業(yè)生涯了。我想通過此書,跟大家分享一下這么多年的工作經(jīng)驗和心得(尤其是近幾年流行的DevOps技術(shù)),解決大家工作中的困惑。通過此書的項目實踐和線上環(huán)境案例,讓大家能迅速了解Linux運維人員的工作職責(zé)和方向,迅速進入工作狀態(tài),快速成長,希望大家通過閱讀本書,能夠掌握Linux系統(tǒng)集群和自動化運維及網(wǎng)站架構(gòu)設(shè)計的精髓,輕松而愉快地工作,提升自己的職業(yè)技能,這是我非常高興看到的,也是我編寫本書的初衷。
讀者對象
本書的讀者對象如下所示:
系統(tǒng)管理員或系統(tǒng)工程師
中高級運維工程師
運維開發(fā)工程師
開發(fā)工程師
如何閱讀本書
本書的內(nèi)容是對實際工作經(jīng)驗的總結(jié),涉及大量的DevOps及自動化運維知識點和專業(yè)術(shù)語,建議這方面經(jīng)驗還不是很豐富的讀者先了解第1章的內(nèi)容,這章比較基礎(chǔ),如果大家在學(xué)習(xí)過程中根據(jù)這章的講解進行操作,定會達到事半功倍的效果。
系統(tǒng)管理員和系統(tǒng)工程師們可以通篇閱讀本書,并重點關(guān)注第1章、第2章和第4章,其他章節(jié)的內(nèi)容可以選擇性地閱讀,借此來拓寬知識面,確定學(xué)習(xí)方向。
對于運維工程師而言,除了第3章的內(nèi)容不要求掌握以外,其他章節(jié)的內(nèi)容均可以做深層次的閱讀、實踐和思考,書中提到的很多自動化案例,讀者可以嘗試結(jié)合自己公司的實際情況來進行應(yīng)用。
對于運維開發(fā)工程師來說,上述章節(jié)描述的內(nèi)容都與運維開發(fā)工作息息相關(guān),建議大家多花些精力和時間,抱著一切從線上環(huán)境去考慮的態(tài)度去學(xué)習(xí)和思考,實踐后多思考一下原理性的內(nèi)容。
對于開發(fā)工程師來說,由于其只需對運維系統(tǒng)知識體系有一個大概的了解,重點可以放在本書的第1~3章。如果想了解自動化運維相關(guān)知識體系,建議熟悉本書的第6~8章。
大家可以根據(jù)自己的職業(yè)發(fā)展和工作需要選擇不同的閱讀順序和側(cè)重點,同時也可以對其他相關(guān)的知識點有一定的了解。
致謝
感謝我的家人,她們在生活上對我無微不至的照顧,讓我更有精力和動力去工作和創(chuàng)作。
感覺好友劉天斯、老男孩的支持和鼓勵,閑暇之余和你們一起交流開源技術(shù)和發(fā)展趨勢,也是一種享受。
感謝朋友曹林華,與我一起花了大量時間調(diào)研并且實踐電子商務(wù)系統(tǒng)中關(guān)于秒殺系統(tǒng)的架構(gòu)及設(shè)計。
感謝機械工業(yè)出版社華章公司的編輯楊福川和楊繡國,在你們的信任、支持和幫助下,這本書才能如此順利地出版。
感謝朋友馮松林,感謝他這么多年來對我的信任和支持,在我苦悶的時候陪我聊天,自始至終對我予以支持和信任。
感謝生活中的朋友們—曹江華、何小玲、鄭樺、徐江春、張薇(排名不分順序),工作之余能一起閑聊和打牌,也是非常開心和快樂
推薦序一
推薦序二
推薦序三
前言
第1章 DevOps與自動化運維的意義 1
1.1 DevOps在企業(yè)中存在的意義 1
1.2 為什么企業(yè)需要自動化運維 4
1.3 Web編程相關(guān)體系知識點 5
1.3.1 為什么要前后端分離 5
1.3.2 什么是RESTful 7
1.3.3 Web后臺認證機制 8
1.3.4 同步和異步、阻塞與非阻塞的區(qū)別 10
1.3.5 WebSocket雙工通信 11
1.3.6 了解消息中間件 13
1.3.7 了解負載均衡高可用 18
1.4 從事DevOps工作應(yīng)該掌握的語言 24
1.5 從事DevOps工作應(yīng)該掌握的工具 25
1.6 了解網(wǎng)站系統(tǒng)架構(gòu)設(shè)計和高并發(fā)場景 26
1.6.1 網(wǎng)站性能評估指標(biāo) 26
1.6.2 細分五層解說網(wǎng)站架構(gòu) 26
1.7 了解數(shù)據(jù)庫集群主從復(fù)制的基本原理 34
1.8 Linux服務(wù)器的安全防護 37
1.8.1 DDoS攻擊和運營商劫持 37
1.8.2 Linux服務(wù)器基礎(chǔ)防護篇 38
1.8.3 Linux服務(wù)器高級防護篇 40
1.9 小結(jié) 41
第2章 Shell腳本在DevOps下的應(yīng)用 42
2.1 Shell編程基礎(chǔ) 42
2.1.1 Shell腳本的基本元素 43
2.1.2 Shell基礎(chǔ)正則表達式 43
2.1.3 Shell特殊字符 46
2.1.4 變量和運算符 47
2.2 Shell中的控制流結(jié)構(gòu) 61
2.3 sed的基礎(chǔ)用法及實用舉例 64
2.3.1 sed的基礎(chǔ)語法格式 64
2.3.2 sed的用法舉例說明 69
2.4 awk的基礎(chǔ)用法及實用案例 72
2.5 Shell應(yīng)用于DevOps開發(fā)中應(yīng)掌握的系統(tǒng)知識點 77
2.6 生產(chǎn)環(huán)境下的Shell腳本 85
2.6.1 生產(chǎn)環(huán)境下的備份類腳本 86
2.6.2 生產(chǎn)環(huán)境下的統(tǒng)計類腳本 89
2.6.3 生產(chǎn)環(huán)境下的監(jiān)控類腳本 92
2.6.4 生產(chǎn)環(huán)境下的運維開發(fā)類腳本 97
2.7 小結(jié) 102
第3章 Python在DevOps與自動化運維中的應(yīng)用 103
3.1 Python語言的應(yīng)用領(lǐng)域 103
3.2 選擇Python的原因 105
3.3 Python的版本說明 106
3.4 Python基礎(chǔ)學(xué)習(xí)工具 106
3.4.1 Python(x,y)簡單介紹 107
3.4.2 IPython詳細介紹 107
3.4.3 Sublime Text3簡單介紹 113
3.5 Python基礎(chǔ)知識進階 120
3.5.1 正則表達式應(yīng)用 120
3.5.2 Python程序構(gòu)成 127
3.5.3 Python編碼問題 129
3.5.4 使用Python解析JSON 131
3.5.5 Python異常處理與程序調(diào)試 133
3.5.6 Python函數(shù) 136
3.5.7 Python面向?qū)ο? 147
3.5.8 Python多進程 159
3.5.9 Python多線程 161
3.6 Python經(jīng)常用到的第三方類庫 175
3.7 利用Flask設(shè)計后端Restful API 178
3.7.1 DevOps中為什么要使用RESTful API 178
3.7.2 RESTful API項目實戰(zhàn) 182
3.8 工作中的Python腳本分享 184
3.9 小結(jié) 191
第4章 Vagrant在DevOps環(huán)境中的應(yīng)用 192
4.1 Vagrant簡單介紹 193
4.2 Vagrant安裝 193
4.3 使用Vagrant配置本地開發(fā)環(huán)境 195
4.3.1 Vagrant的具體安裝步驟 195
4.3.2 Vagrant配置文件詳解 198
4.3.3 Vagrant常用命令詳解 199
4.4 使用Vagrant搭建DevOps開發(fā)環(huán)境 200
4.5 使用Vagrant搭建分布式環(huán)境 203
4.6 小結(jié) 207
第5章 自動化部署管理工具Ansible 208
5.1 YAML介紹 209
5.2 Ansible的安裝和配置 214
5.3 定義主機與組規(guī)則(Inventory) 218
5.4 Ansible常用模塊介紹 220
5.5 playbook介紹 235
5.6 Ansible在AWS云平臺中的應(yīng)用 240
5.7 角色 241
5.8 Jinja2過濾器 248
5.9 Ansible速度優(yōu)化 252
5.10 利用Ansible API提供自動化運維后端 262
5.10.1 runner API 262
5.10.2 playbook API 265
5.10.3 用Flask封裝Ansible提供自動化運維后端 267
5.11 Ansible 2.2新增功能 273
5.12 小結(jié) 280
第6章 自動化配置管理工具SaltStack 281
6.1 Salt的相關(guān)知識點介紹 281
6.1.1 Salt的優(yōu)勢 281
6.1.2 Salt的安裝 282
6.1.3 Salt的工作流程 287
6.1.4 Salt配置文件詳解 288
6.1.5 Salt的命令格式 291
6.2 Salt的常用組件 291
6.2.1 Salt常用的操作目標(biāo) 291
6.2.2 Salt常用模塊 293
6.2.3 Granis組件 304
6.2.4 pillar組件 308
6.2.5 job管理 311
6.2.6 State介紹 312
6.3 Salt真實案例分享 314
6.3.1 base環(huán)境配置 315
6.3.2 prod環(huán)境配置 319
6.4 Salt多Master搭建 322
6.5 Salt API介紹 324
6.5.1 Python API介紹 324
6.5.2 Restful API介紹 326
6.6 小結(jié) 330
第7章 Docker和Jenkins在DevOps中的應(yīng)用 331
7.1 Docker的基礎(chǔ)安裝 333
7.2 Docker的三大核心概念 336
7.3 Docker的基本架構(gòu) 338
7.4 Docker網(wǎng)絡(luò)實現(xiàn)原理 340
7.5 利用Dockerfile文件技巧打包Docker鏡像 342
7.6 利用Docker-Compose編排和管理多容器 344
7.6.1 Docker-Compose的基本語法 345
7.6.2 Docker-Compose常用命令 352
7.6.3 使用Docker-Compose運行Python Web項目 354
7.6.4 使用Docker-Compose的過程中遇到的問題 355
7.7 利用Docker搭建Jenkins Master/Slave分布式環(huán)境 357
7.7.1 部署Jenkins Master/Slave分布式環(huán)境需要解決的問題 358
7.7.2 Jenkins Master/Slave的詳細部署過程 360