資深系統(tǒng)運維專家撰寫,知名運維專家聯(lián)袂推薦,注重方法和思路,將枯燥的操作上升到設計和建模高度。本書站在IT基礎架構視角,分析數(shù)據(jù)中心選型與規(guī)劃、管理流程設計與實施、基礎服務構建、系統(tǒng)運維實務處理、職業(yè)發(fā)展探討等,大致可劃分為六部分,16章。
第1章,談談筆者心中的IT基礎架構標準、寫作初衷和本書特點等。
數(shù)據(jù)中心篇(第2~5章),綜合介紹數(shù)據(jù)中心、網絡、系統(tǒng)等多個技術領域的主題。筆者曾親手規(guī)劃、建設多個同城數(shù)據(jù)中心,經驗豐富,難有雷同之作。
管理流程篇(第6章),管理流程是基礎架構中重要的核心組件,剖析CMDB、Workflow的設計原則與注意事項,簡潔而不簡單。
基礎服務篇(第7~11章),基于多機房和海量節(jié)點,分享如何去構建DNS、NTP、文件共享、配置管理等一整套服務的方法,事半功倍。
系統(tǒng)運維篇(第12~15章),與日常運維管理的工作相關,諸如硬件故障處理與維修、安全、性能較準、Shell程序等,臨危不亂。
第16章,聊聊系統(tǒng)運維工程師應該具備的素養(yǎng),如何提升自己。
本書穿插13個有趣的運維小故事,讀累了在這里喘口氣,里面蘊藏著很多收獲呢。
1)資深系統(tǒng)運維專家撰寫,知名運維專家聯(lián)袂推薦,注重方法和思路,將枯燥的操作上升到設計和建模高度
2)站在IT基礎架構視角,分析數(shù)據(jù)中心選型與規(guī)劃、管理流程設計與實施、基礎服務構建、系統(tǒng)運維實務處理、職業(yè)發(fā)展探討等
前言
2015年,國務院政府工作報告中提出制定互聯(lián)網 的行動計劃。在這個大背景時代的推動下,越來越多的傳統(tǒng)行業(yè)面臨著與云計算、大數(shù)據(jù)等熱門技術相結合的發(fā)展趨勢。在漫長的轉型過程中,傳統(tǒng)企業(yè)的IT部門面臨著基礎架構變革的嚴峻考驗,運維團隊不可避免地遇到了很多棘手的難題。例如,管理模式如何由集中式向分布式轉型,小型機到x86的演變,海量運維模式的挑戰(zhàn),以及知識結構與運維思路的轉變,等等。這些都是目前傳統(tǒng)行業(yè)IT部門領導者所面臨的主要問題。
隨著電商的流行,也有很多非IT領域的成功企業(yè)正在醞釀著自己的O2O市場,希望借助互聯(lián)網完成第二次創(chuàng)業(yè)。他們遇到的最大問題就是對互聯(lián)網的認知完全是一片空白。要實現(xiàn)從無到有的原始積累,會有很多挑戰(zhàn)在等著他們。
為什么要寫這本書
基于上述這些問題,我們策劃了這套IT基礎架構叢書。作為這個系列的第一部作品,我個人的壓力還是蠻大的。當機械工業(yè)出版社華章公司的高婧雅編輯和我約稿時,自己竟然一時有些不知所措。算起來,我從事系統(tǒng)運維的工作已滿十個秋冬。說來慚愧,我覺得自己并沒有什么拿得出手的成績。不論是實踐還是基礎,市面上這方面的書已經非常多了。那么,以什么作為出發(fā)點是合適的呢?最終,我還是從《運維前線》這本書中獲得了啟發(fā)。2017年3月,由云技術社區(qū)創(chuàng)始人肖力發(fā)起并策劃的《運維前線》成功出版,讓我感受到了同行們樂于分享的熱情,同時也看到了廣大讀者對實用、落地的技術方案的渴求與肯定。于是,我產生了一個新的想法:在《運維前線》主打實用的基礎之上,圍繞著我所擅長的系統(tǒng)運維方向,寫一部《運維前線》的系統(tǒng)版。
本書特色
不管怎么說,技術是一個很枯燥的東西。我自己在學習的過程中也深有體會。拗口的描述、復雜的邏輯是很多技術文檔的通病。也許這樣的表達形式是嚴謹?shù),但它并不親民。我認為,一本好書不但要有深度,更要帶領讀者一同到達才行。這個深度就像西游記中的水簾洞,如果只有你自己進去了,卻把讀者晾在一邊,那真是太糟糕了。如果一本書洋洋灑灑幾十萬字,讀者看完后沒有任何收獲,那我寧愿不去寫它。因此,打比方和舉例子是我在全書中用得最多的寫作手法。通俗易懂,是我在技術分享時所秉持的一貫態(tài)度。我希望消除掉一切阻礙的門檻,讓每一位讀者朋友都能夠從本書中獲得些許的幫助。
選擇撰寫本書是有著特別的意義的。既然是實踐,我們首先要保證技術的實用性。但從定位上講,它又不同于以往的實踐類書籍。書中講述的所有內容都是筆者正在或者曾經使用過的,并將一些經驗和觀點融在其中。寫這本書,也算是對我多年工作經驗的一種總結,了卻自己的一樁心愿吧。
讀者對象
說到這本書的定位,我想它對絕大多數(shù)從事系統(tǒng)運維的工作者都是有益的。本書需要一點點Linux和網絡的基礎知識作為鋪墊,除此之外再無其他要求。對于工作3~5年的朋友們,我知道你們已經厭倦了基本的系統(tǒng)管理,但你們也許有點兒迷茫,不知道下一步該如何進階。對于那些傳統(tǒng)行業(yè)面臨IT基礎架構轉型的系統(tǒng)運維團隊,你們可能在系統(tǒng)管理方面經驗豐富,但是對大規(guī)模、分布式x86平臺的系統(tǒng)運維卻感到陌生。還有那些剛剛到創(chuàng)業(yè)公司的中生代技術人,你們可能在工作中會遇到更多新的挑戰(zhàn)。我想,選擇這本書對你們來說是再適合不過的了。當然,如果你早已是這方面的行家里手,也不妨來讀讀本書。我的一些經驗也許能幫到你,我的一些經歷也許能讓你感同身受,我的一些觀點也許能讓你會心一笑,只當是我與你之間的一次未曾謀面的技術交流好了。
如何閱讀本書
本書從內容上大致分為六大部分,共計16章內容。
第一部分(第1章),筆者對心中的IT基礎架構標準、本書的寫作初衷和特點等做了闡述。
第二部分是數(shù)據(jù)中心篇(第2~5章)。這是一個綜合了數(shù)據(jù)中心、網絡、系統(tǒng)等眾多技術領域的主題。我作為一個經歷過創(chuàng)業(yè)公司的老員工,對此深有體會。從無到有,我親手規(guī)劃、建設了多個同城的數(shù)據(jù)中心,后續(xù)又和兩位牛人學習了很多相關的知識。該篇也許真的非常跨界,我想在所有講解系統(tǒng)技術的書籍里,難有雷同之作。作為一名真正的SE,只懂操作系統(tǒng)是不合格的。所以,我認為這個跨界還是值得的。
第三部分是管理流程篇(第6章)。這是一個特殊的篇章,因為它特殊到只有一章。如果能夠進一步展開,這個主題其實完全可以獨立成書。管理流程是基礎架構中最為重要的核心組件。我想沒有人會反駁這個觀點,除非他所運維的節(jié)點數(shù)量還不夠多。
第四部分是基礎服務篇(第7~11章)。本篇內容基于多機房和海量節(jié)點,介紹了如何去構建DNS、NTP、文件共享、配置管理等一整套服務的方法。
第五部分是系統(tǒng)運維篇(第12~15章)。這部分內容主要和日常運維管理的工作相關。例如,硬件故障處理與維修、安全、性能校準、Shell程序等。如果要做推薦,我會更傾向于數(shù)字證書那一章。因為那是我剛入行時的專業(yè)方向,和數(shù)字證書打了這么多年的交道,寫這一篇時也算是一種情懷吧。
第六部分(第16章),這部分介紹系統(tǒng)運維工程師應該具備的素養(yǎng),以及如何提升自己等內容。
此外,這本書中還有13個有趣的運維小故事。它們很像登山時的休息點,如果你讀累了,可以在這里歇歇腳,喘口氣。其實,故事里面也蘊藏著很多收獲呢。
不過,這還不是本書全部的內容。既然我受到了《運維前線》的啟發(fā),為了表示敬意,我也繼承了《運維前線》一書的設計形式。最后一章,藏著一個有趣的彩蛋,等待著讀者朋友們去發(fā)現(xiàn)。好了,我想我說得已經夠多的了,我們在書中相見吧。
勘誤和支持
由于筆者的水平有限,編寫時間倉促,書中難免會出現(xiàn)一些錯誤或者不準確的地方,懇請讀者批評指正。如有任何反饋與想法,請你發(fā)送電子郵件到itarch@qq.com。真誠地期待能夠得到你的反饋,在技術之路上互勉共進。
致謝
在寫作這本書時,我得到了很多朋友的幫助。例如我的同事張望和徐鐵軍兩位大牛。張望是網絡方面的專家,鐵軍則有著多年的IDC管理經驗。撰寫數(shù)據(jù)中心篇章時,關于一些技術問題的求證,兩位給予了我很多的支持與幫助。能和你們在一起工作真好,謝謝兩位。
感謝云技術社區(qū)的北極熊,熊總在各大社區(qū)中不遺余力地幫忙推廣本書,做了很多無私的工作。感謝我的那些新老朋友們,在我成書之時,他們幫我撰寫書評,給了我很多的鼓勵與支持。謝謝你們的幫助與肯定。
此外,在這里我還要特別感謝兩位老師。一位是云技術社區(qū)的肖力,另一位是機械工業(yè)出版社華章公司的高婧雅老師。兩位老師是指引我走上寫作道路的領航人,雖然都只有一面之緣,但他們卻給我提供了很多的幫助和支持。2015年,我加入了力哥發(fā)起的《運維前線》的寫作團隊。也正是通過這次寫作得到了婧雅編輯的肯定,進而才有了這部書稿的成文。力哥在百忙之中親自為我作序,婧雅為我的寫作提供了很多有價值的指導意見?梢哉f,沒有兩位就沒有這部書的出版。謝謝所有支持我、關心我、幫助我的朋友們,感激之情溢于言表,謝謝大家!
謹以此書獻給廣大熱愛技術的朋友們!
趙旻
趙旻,獲得RHCA/RHCSS/MCITP認證,十年以上互聯(lián)網金融、電信、政府等多領域背景的從業(yè)資歷,曾參與中國國家電子政務多項重點工程的安全信任體系的建設工作,為中國移動、中國航空等大型企業(yè)提供技術支持。熟悉x86平臺基礎架構系統(tǒng)的建設、管理及運維工作,并醉心于運維產品的設計與體驗。樂于在工作實踐中分析問題、總結經驗,具有持續(xù)優(yōu)化的能力,屬于主動管理型的工作者。
資深面試官,產品設計評論人,《運維前線》聯(lián)合作者,現(xiàn)專注于管理學、產品設計、基礎架構運維等領域。
目 錄
本書贊譽
序
前言
第1章 混沌初開1
1.1 我眼中的基礎架構1
1.2 寫一本怎樣的書3
1.2.1 英文書的傷痛4
1.2.2 有話直說這就是我的忍道4
1.2.3 當行家說人話5
1.3 本書聲明6
第2章 如何選擇優(yōu)質的數(shù)據(jù)中心7
2.1 概述7
2.2 空間環(huán)境評估9
2.2.1 地質環(huán)境9
2.2.2 空間結構10
2.3 基礎設施評估13
2.3.1 電氣系統(tǒng)13
2.3.2 空調系統(tǒng)17
2.3.3 消防系統(tǒng)21
2.3.4 弱電與綜合布線系統(tǒng)22
2.4 網絡建設評估23
2.5 服務保障評估23
2.6 本章小結24
第3章 數(shù)據(jù)中心的規(guī)劃設計工作26
3.1 需求的不確定性29
3.2 如何避免變化打亂規(guī)劃30
3.2.1 采購資源預留30
3.2.2 數(shù)據(jù)中心機柜區(qū)域的規(guī)劃與布局31
3.2.3 規(guī)劃布局案例33
3.3 規(guī)劃設計心得35
3.4 本章小結41
第4章 網絡規(guī)劃細節(jié)對系統(tǒng)運維的影響42
4.1 案例復盤44
4.2 事情為什么弄得一團糟48
4.3 網絡空間資源的規(guī)劃50
4.3.1 PoD容量的計算方法50
4.3.2 地址空間的規(guī)劃51
4.3.3 VLAN的規(guī)劃52
4.4 網卡綁定54
4.4.1 網卡綁定模式的選擇54
4.4.2 網卡綁定的實現(xiàn)57
4.5 本章小結58
第5章 服務器硬件選型59
5.1 如何選擇合適的硬件配置59
5.1.1 選型的總體原則60
5.1.2 選型中值得注意的地方60
5.2 怎樣的一款服務器產品才算是優(yōu)秀的62
5.2.1 帶外管理有多重要63
5.2.2 異構平臺融合能力63
5.2.3 完善的信息數(shù)據(jù)展示65
5.2.4 軟硬件環(huán)境兼容性66
5.2.5 用戶體驗67
5.3 產品測試那些事兒69
5.3.1 測試前的準備工作69
5.3.2 部署系統(tǒng)測試70
5.3.3 產品功能性測試70
5.3.4 能耗測試71
5.3.5 CPU性能測試81
5.3.6 內存性能測試82
5.3.7 磁盤性能測試83
5.3.8 網絡性能測試87
5.3.9 測試后的收尾工作90
5.4 本章小結91
第6章 構建CMDB與Work-flow92
6.1 誰拖了運維的后腿93
6.2 定海神針CMDB94
6.2.1 CMDB是一切運維的基石95
6.2.2 是什么毀了CMDB97
6.2.3 如何定義你的需求98
6.2.4 如何定義表結構99
6.2.5 設計思想原則103
6.3 多面嬌娃Workflow106
6.3.1 一份周報中竟然80%的工作量都是在溝通106
6.3.2 Workflow能干什么107
6.3.3 Workflow是實例化的規(guī)范107
6.3.4 Workflow是領航員108
6.3.5 Workflow設計中的常見問題109
6.4 本章小結113
第7章 構建IaaS平臺系統(tǒng)115
7.1 高效交付解決方案如何選型117
7.2 服務器設置詳解119
7.2.1 IPMI121
7.2.2 racadmin121
7.2.3 SMASH CLP123
7.3 Cobbler部署系統(tǒng)詳解124
7.3.1 理解Cobbler架構124
7.3.2 Cobbler的安裝配置125
7.3.3 命名規(guī)范128
7.3.4 創(chuàng)建資源目錄130
7.3.5 創(chuàng)建Cobbler部署模板與實例131
7.3.6 Cobbler里面出現(xiàn)的坑133
7.4 IaaS系統(tǒng)的設計要點136
7.4.1 交付工作流程定義136
7.4.2 Portal模塊與各組件之間的調用關系137
7.5 制作KVM虛擬機模板139
7.5.1 虛擬機網絡環(huán)境部署140
7.5.2 創(chuàng)建虛擬機鏡像模板142
7.5.3 虛擬機克隆143
7.5.4 虛擬機設備調整144
7.5.5 VPC的支持145
7.6 本章小結149
第8章 構建域名解析服務150
8.1 寫在前面的話150
8.2 首先做好一個傳統(tǒng)的DNS管理員151
8.3 Anycast DNS在多數(shù)據(jù)中心中的應用171
8.3.1 什么是Anycast171
8.3.2 如何構建DNS over Any-cast171
8.3.3 如何實施Anycast DNS172
8.3.4 如何守護quagga進程177
8.3.5 BGP在Anycast中的應用178
8.4 HTTP DNS180
8.4.1 傳統(tǒng)DNS的缺陷180
8.4.2 HTTP DNS的優(yōu)勢181
8.4.3 HTTP DNS長什么樣181
8.4.4 HTTP DNS會取代傳統(tǒng)的DNS嗎182
8.5 本章小結183
第9章 時間同步系統(tǒng)184
9.1 概述184
9.1.1 如何實現(xiàn)時間同步184
9.1.2 GPS衛(wèi)星系統(tǒng)授時原理185
9.1.3 PTP186
9.1.4 為何要選用硬件時間源服務器187
9.1.5 如何選擇硬件時間源服務器188
9.2 ntpd191
9.2.1 ntpd初始化191
9.2.2 ntpd配置文件192
9.2.3 使用ntpq查詢時間同步的狀態(tài)193
9.3 chronyd197
9.3.1 chronyd的優(yōu)勢197
9.3.2 chronyd配置文件197
9.3.3 使用key限制客戶端訪問198
9.3.4 跟蹤時間同步過程199
9.3.5 檢查時間同步狀態(tài)199
9.4 如何處理閏秒200
9.4.1 閏秒是什么200
9.4.2 閏秒的危害201
9.4.3 前輩們是怎么解決閏秒的202
9.4.4 晦澀難懂的術語202
9.4.5 怎么解決閏秒問題204
9.5 本章小結207
第10章 配置管理209
10.1 本章目的209
10.2 expect與Parallel SSH210
10.2.1 expect210
10.2.2 Parallel SSH213
10.2.3 SSH的通病214
10.3 Ansible218
10.3.1 創(chuàng)建Host Inventory218
10.3.2 如何自動添加節(jié)點218
10.3.3 組織主機節(jié)點219
10.3.4 Ad-Hoc221
10.3.5 Playbook225
10.3.6 關于優(yōu)化231
10.4 Puppet232
10.4.1 Puppet快跑232
10.4.2 初探Puppet234
10.4.3 使用Apache Passenger替換WEBRick239
10.4.4 Mutil-Master & Mutil-CAServer241
10.4.5 排障241
10.5 SaltStack244
10.5.1 配置Minion244
10.5.2 管理Salt Key244
10.5.3 組織主機節(jié)點245
10.5.4 模塊的調用245
10.5.5 Mutil-Masters247
10.5.6 級聯(lián)248
10.5.7 SLS249
10.5.8 Grain250
10.5.9 Pillar254
10.5.10 排障255
10.6 我們真的能抗住海量節(jié)點嗎259
10.6.1 集合編隊260
10.6.2 匯報戰(zhàn)況260
10.6.3 不必過度依賴模塊260
10.7 解決方案的選擇261
10.8 本章小結265
第11章 文件共享服務266
11.1 構建WebDAV服務266
11.1.1 基本構建266
11.1.2 WebDAV on HTTPS270
11.2 構建NFS服務272
11.2.1 NFS v4的新特性272
11.2.2 NFS常見問題處理273
11.2.3 NFS高可用方案277
11.2.4 NFS Cluster實施條件278
11.2.5 NFS Cluster的實施280
11.2.6 NFS Cluster故障排錯287
11.3 構建SFTP服務288
11.3.1 Chroot SFTP和公鑰訪問的必要性288
11.3.2 構建Chroot SFTP289
11.3.3 SFTP容災方案294
11.4 本章小結297
第12章 硬件故障告警與維修298
12.1 硬件故障的特點299
12.2 硬件故障告警300
12.2.1 告警方式300
12.2.2 事件類型和告警級別301
12.3 硬件故障分析302
12.3.1 常用分析手段302
12.3.2 常見故障錯誤分析306
12.4 傳統(tǒng)維修的問題312
12.5 報修系統(tǒng)的需求定義313
12.5.1 故障申報環(huán)節(jié)的設計需求315
12.5.2 審批通告環(huán)節(jié)的設計需求316
12.5.3 提交報修環(huán)節(jié)的設計需求316
12.5.4 設備維修環(huán)節(jié)的設計需求318
12.5.5 數(shù)據(jù)查詢統(tǒng)計的設計需求318
12.6 本章小結319
第13章 主機系統(tǒng)信息安全基礎320
13.1 系統(tǒng)安全加固的基本要求320
13.2 關于安全配置的反思324
13.2.1 慎用賬戶鎖定325
13.2.2 密碼的煩惱325
13.2.3 sudo的意義326
13.3 sudo over LDAP的實現(xiàn)327
13.3.1 服務端配置327
13.3.2 客戶端配置329
13.3.3 關于LDAP超時和連接數(shù)限制的問題330
13.4 密碼學與數(shù)字證書330
13.4.1 密碼學技術331
13.4.2 數(shù)據(jù)加密與數(shù)字簽名334
13.4.3 公鑰加密體系的安全性論述336
13.4.4 數(shù)字證書是什么337
13.4.5 數(shù)字證書是怎么產生的337
13.4.6 數(shù)字證書是怎么驗證的338
13.5 人為因素340
13.5.1 運維紅線340
13.5.2 安全操作341
13.5.3 運維工作中的常見問題342
13.6 本章小結344
第14章 性能校準345
14.1 隊列理論346
14.2 CPU348
14.2.1 來自內核態(tài)的資源消耗348
14.2.2 用戶態(tài)資源占用率高353
14.2.3 Cache與內存的三種映射關系356
14.2.4 CPU調度算法357
14.2.5 進程運行在哪個核心上359
14.2.6 strace的妙用360
14.3 內存361
14.3.1 NUMA362
14.3.2 Cache和Buffer364
14.3.3 虛擬地址空間365
14.3.4 大頁366
14.3.5 內存分配366
14.3.6 內存回收368
14.3.7 內存超配了怎么辦369
14.3.8 為什么會產生OOM370
14.4 存儲372
14.4.1 磁盤調度算法372
14.4.2 I/O調度算法373
14.4.3 日志模式375
14.4.4 其他因素376
14.5 網絡378
14.5.1 Jumbo Frames379
14.5.2 BDP379
14.5.3 qperf380
14.5.4 其他380
14.6 本章小結381
第15章 Shell編程382
15.1 參數(shù)傳遞383
15.1.1 shift383
15.1.2 eval385
15.1.3 getopt387
15.1.4 函數(shù)傳參390
15.1.5 返回值391
15.2 文本處理三劍客393
15.2.1 grep394
15.2.2 sed396
15.2.3 awk397
15.3 字符處理401
15.3.1 字符的轉義401
15.3.2 字符串截取403
15.4 數(shù)組404
15.5 算來算去406
15.5.1 比較406
15.5.2 字符串計算407
15.5.3 精度與長度408
15.5.4 進制轉換408
15.6 表面文章409
15.7 典型案例410
15.8 本章小結416
第16章 修行之路417
16.1 系統(tǒng)工程師的自我修養(yǎng)417
16.1.1 工程師與管理員418
16.1.2 系統(tǒng)工程師的三顆心419
16.1.3 匠人精神420
16.2 未來時代422
16.2.1 前方高能出現(xiàn)怪獸AlphaGo422
16.2.2 從現(xiàn)在開始就要改變自己424
16.2.3 開啟你的管理模式425
16.3 寫在最后的話427