本書是以動(dòng)視暴雪中國運(yùn)維團(tuán)隊(duì)七位作者的日常工作作為背景,全面解析了Linux集群在動(dòng)視暴雪的應(yīng)用現(xiàn)狀,內(nèi)容包括Linux系統(tǒng)、網(wǎng)絡(luò)、安全、監(jiān)控、備份、日志分析、自動(dòng)化等,跳出了一般書籍僅僅能覆蓋的原理層面,詳盡真實(shí)地展現(xiàn)了各項(xiàng)技術(shù)在集群架構(gòu)和運(yùn)維方向上的實(shí)際應(yīng)用和發(fā)展趨勢,是一本不可多得的實(shí)戰(zhàn)案例。
Preface 前 言為什么要寫這本書五個(gè)Linux愛好者和開源軟件的密集使用者因?yàn)橥玛P(guān)系相聚在動(dòng)視暴雪,茶余之際談及目前市場上已出版的Linux圖書,一致的看法是,雖然市場上以Linux為主題的書很多,但絕大多數(shù)集中于Linux基礎(chǔ)介紹或是單純的服務(wù)搭建,有一些書著眼點(diǎn)在Linux集群的架構(gòu)設(shè)計(jì),但是往往內(nèi)容重合度較高、篇幅零散,且基本上限于對(duì)原理的講解,缺乏對(duì)實(shí)際系統(tǒng)的集成梳理。雖然Linux及Linux集群目前在互聯(lián)網(wǎng)已經(jīng)非常流行,但是基于實(shí)際生產(chǎn)應(yīng)用講解Linux集群的書仍難覓蹤跡。因?yàn)閺膰?yán)格意義上來說,集群屬于一門多種技術(shù)融合的科學(xué),包含了Linux基礎(chǔ)系統(tǒng)、系統(tǒng)安全、系統(tǒng)調(diào)優(yōu)、網(wǎng)絡(luò)安全、日志分析、系統(tǒng)監(jiān)控、自動(dòng)化管理、資產(chǎn)管理等多方面的內(nèi)容,單個(gè)人寫作很難達(dá)到這么全面的剖析范圍。于是,我們五人決定合作來寫一本相對(duì)更全面實(shí)用的Linux圖書。
在決定動(dòng)筆之際,參與本書寫作的五位作者都就職于世界最大的游戲出版公司動(dòng)視暴雪,因此,本書以動(dòng)視暴雪中國運(yùn)維團(tuán)隊(duì)的日常工作為背景,內(nèi)容也基于(但不拘泥)日常運(yùn)維的生產(chǎn)系統(tǒng)和測試系統(tǒng),力圖從實(shí)際生產(chǎn)系統(tǒng)和應(yīng)用出發(fā),以自己平日的實(shí)際運(yùn)維工作為基本立足點(diǎn),全方位、真實(shí)地展示目前Linux集群的應(yīng)用現(xiàn)狀。書中內(nèi)容包括Linux系統(tǒng)、網(wǎng)絡(luò)、安全、監(jiān)控、備份、日志分析等,跳出了一般書籍僅僅能覆蓋的原理層面,詳盡真實(shí)地展現(xiàn)了各項(xiàng)技術(shù)在集群架構(gòu)和運(yùn)維方向上的實(shí)際應(yīng)用和發(fā)展趨勢,其中很多內(nèi)容更是動(dòng)視暴雪中國運(yùn)維團(tuán)隊(duì)多年運(yùn)維總結(jié)的最佳實(shí)踐。
對(duì)于我們自己來說,完成這本書的寫作,不但能分享自己多年的工作心得,也是一次極為難得的和眾多Linux愛好者一起學(xué)習(xí)和成長的機(jī)會(huì)。
讀者對(duì)象本書主要適合于以下讀者:
希望更深入地了解Linux系統(tǒng)的中高級(jí)人員希望更深入地了解網(wǎng)絡(luò)的中高級(jí)人員基于Linux系統(tǒng)的網(wǎng)站前后端開發(fā)人員系統(tǒng)運(yùn)維工程師和架構(gòu)師如何閱讀本書本書第1章詳細(xì)描述了Linux的安裝、配置、用戶管理、文件管理、網(wǎng)絡(luò)管理、進(jìn)程管理、軟件管理等內(nèi)容,這是Linux的基礎(chǔ)入門知識(shí),建議所有沒有Linux基礎(chǔ)的讀者,或是新手通讀本章。第2章是Linux性能分析,介紹了Linux系統(tǒng)中性能分析工具的使用方法,這在實(shí)際工作中很常用,但是根據(jù)不同的場景,也有很多組合的使用方式。第3章至第5章是所有生產(chǎn)環(huán)境都會(huì)使用到的用戶集中認(rèn)證、DNS服務(wù)和系統(tǒng)備份等內(nèi)容,這些內(nèi)容屬于必知必會(huì)的部分,建議通讀。第6章針對(duì)集群和集群存儲(chǔ)進(jìn)行了講解,建議讀者視自己的實(shí)際使用情況選讀。第7章詳細(xì)介紹了一款當(dāng)前非常流行的、實(shí)時(shí)metric工具Graphite,對(duì)于很多大型系統(tǒng)來說,這是一款極好的系統(tǒng)狀態(tài)記錄工具。第8章介紹Cobbler,對(duì)于依然在使用傳統(tǒng)DC的管理員來說,Cobbler是一款很好的系統(tǒng)自動(dòng)安裝配置工具。第9章和第10章詳細(xì)描述了Puppet在自動(dòng)化部署中的使用,這也是當(dāng)前非常流行的一款配置管理工具。第11章介紹了CMDB,建議感興趣的讀者閱讀。第12章是日志管理內(nèi)容,描述了兩種當(dāng)前流行的日志處理工具Splunk和ELK,它們都是處理海量日志非常好的工具。
勘誤和支持由于作者水平有限,書中難免會(huì)出現(xiàn)一些錯(cuò)誤或者不準(zhǔn)確的地方,懇請(qǐng)讀者批評(píng)指正,您有任何寶貴意見都可以發(fā)送至郵箱johnwang.wangjun@gmail.com,我們很期待能夠聽到您的真摯反饋。
致謝這本書能順利的交稿,首先要感謝參與寫作的各位作者,能從百忙的工作和各自的家庭生活中抽出寶貴的時(shí)間,分享自己的心得和體會(huì),才能有機(jī)會(huì)讓更多的愛好者和同行溝通交流。
此外,感謝機(jī)械工業(yè)出版社華章公司的編輯楊繡國(Lisa)老師,感謝她在這段時(shí)間里始終支持我們的寫作,她的鼓勵(lì)和幫助引導(dǎo)我們順利完成全部書稿。
王軍2017年5月
8年系統(tǒng)工程師、網(wǎng)絡(luò)架構(gòu)師工作經(jīng)驗(yàn),2006年初開始從事信息技術(shù)相關(guān)工作,先后參與過校園交換網(wǎng)、公司辦公網(wǎng)以及大中型互聯(lián)網(wǎng)公司的網(wǎng)絡(luò)架構(gòu)設(shè)計(jì),有著極為豐富的實(shí)戰(zhàn)經(jīng)驗(yàn)。2008年進(jìn)入Linux系統(tǒng)運(yùn)維領(lǐng)域,并相繼在國內(nèi)多家企業(yè)(易趣網(wǎng)、51JOB、阿里云、國家電網(wǎng)、動(dòng)視暴雪)就職,工作內(nèi)容涉及大規(guī)模商用云計(jì)算虛擬化平臺(tái)運(yùn)維、網(wǎng)站系統(tǒng)架構(gòu)、企業(yè)網(wǎng)絡(luò)架構(gòu),曾擔(dān)任多家IT公司Linux內(nèi)訓(xùn)講師、云計(jì)算咨詢顧問,設(shè)計(jì)和部署過國內(nèi)多家大型網(wǎng)站的高可用集群,對(duì)系統(tǒng)、網(wǎng)絡(luò)、數(shù)據(jù)庫等相關(guān)技術(shù)都有一定理解,多次在國內(nèi)一些知名技術(shù)論壇發(fā)表技術(shù)文檔和專題視頻,《Linux系統(tǒng)命令及Shell腳本實(shí)踐指南》一書作者。
Contents 目 錄
前言
第1章 Linux系統(tǒng)管理入門1
1.1 系統(tǒng)安裝1
1.1.1 安裝CentOS1
1.1.2 首次啟動(dòng)CentOS14
1.1.3 更多設(shè)置14
1.2 系統(tǒng)登錄20
1.2.1 本地登錄20
1.2.2 遠(yuǎn)程登錄22
1.3 用戶管理24
1.3.1 用戶和用戶組的概念24
1.3.2 新增和刪除用戶25
1.3.3 新增和刪除用戶組26
1.3.4 用戶切換26
1.4 文件系統(tǒng)27
1.4.1 什么是文件系統(tǒng)27
1.4.2 常見的文件系統(tǒng)27
1.4.3 磁盤分區(qū)和創(chuàng)建文件系統(tǒng)28
1.5 文件管理33
1.5.1 文件和目錄簡介33
1.5.2 文件和目錄權(quán)限34
1.5.3 文件查找35
1.5.4 文件壓縮和打包36
1.6 網(wǎng)絡(luò)管理37
1.6.1 網(wǎng)絡(luò)配置管理37
1.6.2 Linux防火墻38
1.6.3 網(wǎng)絡(luò)連通性診斷40
1.7 進(jìn)程管理42
1.7.1 什么是進(jìn)程43
1.7.2 進(jìn)程的常見狀態(tài)43
1.7.3 進(jìn)程優(yōu)先級(jí)的調(diào)整43
1.7.4 進(jìn)程的終止44
1.8 軟件安裝46
1.8.1 源碼編譯安裝46
1.8.2 使用包管理Yum48
1.8.3 創(chuàng)建自己的Yum倉庫49
1.9 系統(tǒng)安全檢測與審計(jì)51
1.9.1 AIDE系統(tǒng)入侵檢測 51
1.9.2 審計(jì)53
第2章 系統(tǒng)性能分析56
2.1 性能分析簡介56
2.2 系統(tǒng)分析的基本工具56
2.2.1 CPU性能分析工具56
2.2.2 內(nèi)存性能分析工具60
2.2.3 磁盤性能分析工具62
2.2.4 sar64
2.3 軟件分析的基本工具66
2.3.1 ldd66
2.3.2 strace與ltrace66
2.3.3 ipcs71
2.3.4 systemtap73
2.4 與內(nèi)存相關(guān)的那些事情76
2.4.1 內(nèi)存泄漏76
2.4.2 虛擬內(nèi)存、物理內(nèi)存與頁缺失78
2.4.3 Out of Memory79
2.4.4 Overcommit79
2.4.5 cache與buffer80
2.5 與磁盤相關(guān)的那些事情80
2.5.1 HDD與SSD80
2.5.2 HDD磁盤的調(diào)度算法81
2.5.3 文件系統(tǒng)中的日志82
2.6 系統(tǒng)資源限制82
2.6.1 ulimit82
2.6.2 Cgroup84
第3章 用戶集中認(rèn)證91
3.1 openLDAP簡介91
3.2 openLDAP的安裝91
3.3 openLDAP的配置92
3.4 利用openLDAP集中認(rèn)證95
第4章 域名服務(wù)器DNS97
4.1 DNS服務(wù)簡介97
4.2 DNS安裝配置98
4.2.1 DNS安裝過程98
4.2.2 關(guān)于chroot的解釋99
4.2.3 配置主配置文件99
4.2.4 DNS的正向解析配置100
4.2.5 DNS的反向解析配置101
4.2.6 利用DNS實(shí)現(xiàn)負(fù)載均衡103
4.3 DNS的主從復(fù)制104
4.4 配置純緩存的DNS服務(wù)106
4.5 DNS的客戶端配置107
4.5.1 Linux中的配置107
4.5.2 Windows中的配置108
第5章 系統(tǒng)備份109
5.1 為什么要備份109
5.2 常見的備份機(jī)制110
5.2.1 完全備份110
5.2.2 增量備份110
5.2.3 差異備份111
5.3 Bacula簡介111
5.3.1 什么是Bacula111
5.3.2 Bacula的基本組件112
5.4 Bacula的安裝和配置112
5.4.1 Bacula控制器114
5.4.2 Bacula存儲(chǔ)守護(hù)進(jìn)程120
5.4.3 Bacula客戶端文件守護(hù)進(jìn)程121
5.4.4 Bacula控制臺(tái)122
5.4.5 啟動(dòng)服務(wù)122
5.4.6 Bacula配置綜述122
5.5 使用Bacula進(jìn)行備份和恢復(fù)124
5.5.1 執(zhí)行備份124
5.5.2 文件恢復(fù)127
5.6 Bacula的使用和維護(hù)129
5.6.1 Bconsole的用法129
5.6.2 使用Bacula進(jìn)行文件驗(yàn)證130
5.6.3 Catalog的維護(hù)和備份131
5.7 備份的策略132
5.7.1 備份什么133
5.7.2 備份到哪里133
5.7.3 備份的時(shí)間133
5.7.4 測試和監(jiān)控備份133
第6章 集群與存儲(chǔ)134
6.1 存儲(chǔ)的基本概念134
6.2 SAN134
6.2.1 SAN的選擇135
6.2.2 iSCSI的配置135
6.3 分布式文件系統(tǒng)與集群文件系統(tǒng)138
6.3.1 分布式文件系統(tǒng)138
6.3.2 GlusterFS的配置138
6.4 高可用集群141
6.4.1 Red Hat HA Cluster簡介141
6.4.2 配置一個(gè)高可用的Apache集群142
6.5 負(fù)載均衡集群151
6.5.1 HAProxy負(fù)載均衡151
6.5.2 Nginx負(fù)載均衡153
6.5.3 LVS負(fù)載均衡155
第7章 Graphite159
7.1 Graphite是什么159
7.1.1 Graphite不是一個(gè)告警系統(tǒng)159
7.1.2 Graphite的功能和特色159
7.2 Graphite的基本組件160
7.2.1 Whisper160
7.2.2 Carbon161
7.2.3 Graphite Web162
7.3 Graphite的安裝162
7.3.1 安裝Whisper數(shù)據(jù)庫163
7.3.2 安裝Carbon守護(hù)進(jìn)程163
7.3.3 安裝graphite-web163
7.4 Graphite 的配置(單點(diǎn))164
7.4.1 配置Carbon守護(hù)進(jìn)程164
7.4.2 給Carbon Cache發(fā)送數(shù)據(jù)166
7.4.3 配置Graphite-web167
7.5 Graphite的配置(集群配置)169
7.5.1 配置Carbon Relay170
7.5.2 Relay中的數(shù)據(jù)復(fù)制172
7.5.3 數(shù)據(jù)聚合172
7.5.4 Graphite Cluster174
7.6 使用Graphite Web175
7.6.1 Graphite的Render API175
7.6.2 Graphite作圖函數(shù)176
7.6.3 Graphite Dashboard和Grafana178
7.7 Graphite 的性能監(jiān)控和調(diào)整181
7.8 其他182
7.8.1 Whisper文件操作182
7.8.2 壓力測試183
7.8.3 其他工具185
第8章 系統(tǒng)大規(guī)模部署186
8.1 概述186
8.2 與PXE不得不說的故事186
8.2.1 PXE簡介186
8.2.2 PXE實(shí)戰(zhàn)187
8.3 系統(tǒng)部署工具Cobbler192
8.3.1 Cobbler簡介192
8.3.2 Cobbler安裝192
8.3.3 Cobbler 配置193
8.3.4 Cobbler應(yīng)用197
8.3.5 Cobbler API202
8.3.6 Cobbler Replicat