本書第4版相對于前3版而言改動比較大,刪除了不少內容過時的內容,增補了當前熱門的技術知識點。另外,本書除了項目部署時采用的系統(tǒng)沒有升級到CentOS6.8x86_64外,其他環(huán)境均為CentOS6.8x86_64。此外,在寫作過程中采納了讀者針對上一版本提出的許多意見和建議,同時修正了第3版的各種錯誤及其他問題。具體改動如下:刪除了第3版中前3章的內容,增補了Vagrant虛擬化軟件的應用,并且重寫了生產環(huán)境下的Shell腳本;刪除了對分布式自動化部署管理工具Puppet的相關介紹,改用了Fabric自動化運維工具;刪除了關于開源VPN在企業(yè)中部署的章節(jié)。附錄部分增加了對現在流行的GitLab應用,以及強大的編輯工具SulbimeText3的快捷鍵方式操作的介紹。
運維工程師工作的演變
隨著云計算的流行,運維工程師的工作性質在不斷地發(fā)生變化,很多新的技能點和知識點需要掌握和學習。工作中,大家經?梢钥吹紻evOps這個詞匯。最近DevOps為什么這么火?跟最近兩年云計算的快速普及有很大的關系:云計算平臺上的各種資源,從服務器到網絡,再到負載均衡都是由API創(chuàng)建和操作的,這就意味著所有的資源都可以“軟件定義”,這給各種自動化運維工具提供了一個非常好的基礎環(huán)境。而在傳統(tǒng)的互聯(lián)網行業(yè),比如CDN行業(yè),由于機器數量眾多、網絡環(huán)境錯綜復雜,故也需要由DevOps人員來設計工具,提供后端的自動化API,結合公司的CMDB資產管理系統(tǒng),提供自動化運維功能。
我在公司的職務是高級運維開發(fā)工程師(DevOps)、系統(tǒng)架構師,主要工作是設計、實施及維護本公司的電子商務網站,以及核心業(yè)務的代碼開發(fā)工作。相對于CDN分布式系統(tǒng)而言,公司的電子商務網站沒有節(jié)點冗余,對集群技術的要求更高。所以我前期將所有的網站應用都做了雙機高HA,包括LVS/HAProxy+Keepalived和Nginx+Keepalived,以及DRBD+Heartbeat+NFS文件高可用,MySQL數據庫用的是DRBD雙主多從架構,甚至Redis也使用了主從復制的架構設計。隨著特殊業(yè)務的需求量越來越旺盛(比如定點搶紅包活動),我也在網站的架構設計中引入了RabbitMQ消息隊列集群。后期隨著商業(yè)推廣量的加大,網站流量、UV及并發(fā)日益增大,新機器上線也日益頻繁,所以我采用了Fabric、Ansbile等自動化運維工具來管理線上機器,避免運維同事們的重復勞動。另外,由于電子商務網站牽涉支付問題,所以對安全性的要求也非常高,我們平時都會從網絡安全(包括硬件防火墻、Linux系統(tǒng)防火墻和WAF應用防火墻)、系統(tǒng)安全、代碼安全和數據庫安全這些方面著手,盡力避免一切影響網站安全的行為。此外,我的工作職責還包括使用成熟的自動化工具(比如Ansible、Saltstack等),利用Python或Golang進行二次開發(fā),根據實際工作需求,結合公司的CMDB系統(tǒng),提供穩(wěn)定的后端API,方便前端人員或資產人員進行調用,這樣大家可以利用界面來完成自動化運維工作。工作雖然辛苦,但看到自己設計的后端API和網站能夠穩(wěn)定運行,心里還是很有成就感的,這也是我目前工作的主要動力。
撰寫本書的目的
從事系統(tǒng)集成、運維開發(fā)、架構設計方面的工作已經有十余年了,在工作期間,我曾有幸擔任了一段時間的紅帽RHCE講師,在東北大學等高校推廣紅帽Linux系統(tǒng)。在教學過程中我發(fā)現,很多學生進入企業(yè)后都無法勝任自己的工作,更談不上正確規(guī)劃自己的職業(yè)道路了。究其原因,一方面是因為企業(yè)的生產環(huán)境具有一定的復雜性和危險性;另一方面則是由于市場上入門書居多,缺乏能真正指導讀者解決實際問題的書籍。例如,很多書籍都只給出了比較基礎的操作及理論,而相對于線上環(huán)境,根本沒有涉及如何安全操作才能避免誤操,以及在PV、UV、并發(fā)、數據庫壓力和高并發(fā)環(huán)境下消息隊列或任務隊列如何設計等相關話題。
之所以寫這本書,一方面是想對自己這些年的工作進行一次系統(tǒng)的梳理和總結;另一方面是想將自己的經驗和心得分享給大家,希望能幫助大家少走彎路。通過本書中介紹項目實踐(包括Linux集群、MySQL的高可用方案及Python自動化運維工具的使用)和線上環(huán)境的Shell腳本,幫大家迅速進入工作狀態(tài)。書中所提供的Shell腳本和iptables腳本均來自于線上的生產服務器,大家均可以直接拿來用。關于Linux集群的項目實踐和MySQL的高可用方案,大家也可以根據實際項目的需求直接采用,以此來設計公司的網站架構。
希望大家能通過本書掌握Linux的精髓,輕松而愉快地工作,從而提高自己的技術水平,也希望大家通過我分享的內容,了解運維工作的發(fā)展趨勢,確定以后的學習目標。這是我非常希望看到的,也是我寫本書的初衷。
第4版與第3版的區(qū)別
本書是第4版,相對于前3版而言改動比較大,刪除了不少過時的內容,增補了當前熱門的技術知識點。另外,本書除了項目部署時采用的系統(tǒng)沒有升級到CentOS 6.8 x86_64外,其他環(huán)境均為CentOS 6.8 x86_64。此外,在寫作過程中采納了讀者針對上一版本提出的許多意見和建議,同時修正了第3版的各種錯誤及其他問題。具體改動如下:刪除了第3版中前3章的內容,增補了Vagrant虛擬化軟件的應用,并且重寫了生產環(huán)境下的Shell腳本;刪除了對分布式自動化部署管理工具Puppet的相關介紹,改用了Fabric自動化運維工具;刪除了關于開源VPN在企業(yè)中部署的章節(jié)。附錄部分增加了對現在流行的GitLab應用及強大的編輯工具Sulbime Text3的快捷鍵方式操作的介紹。出第4版的原因是希望能將現在最流行的開源技術展現并分享給大家,增加大家的職業(yè)技能知識。
讀者對象
本書的讀者對象如下:
項目實施工程師;
系統(tǒng)管理員或系統(tǒng)工程師;
網絡管理員或企業(yè)網管;
系統(tǒng)開發(fā)工程;
高級開發(fā)人員。
如何閱讀本書
本書的內容是對實際工作經驗的總結,涉及大量的知識點和專業(yè)術語,建議經驗不足的讀者一定從第1章讀起,本章內容相對來說比較基礎。大家在學習過程中根據第1章的講解進行操作,定會達到事半功倍的效果。
推薦系統(tǒng)管理員和運維工程師們通篇閱讀本書,并重點關注第2章、第4章、第5章、第7章和第8章的內容,這些都與運維工作息息相關的,建議大家多花些精力和時間,抱著一切從線上環(huán)境去考慮的態(tài)度去學習。
對于網絡管理員和企業(yè)網管來說,如果基礎不是太扎實,建議先學習第1章和第2章的內容,然后將重點放在第7章和第8章。
對于項目實施工程師而言,由于大多數都是從事系統(tǒng)集成相關工作的,因此建議順序學習全書的內容,重心可以放在第5章和第6章。
對于高級開發(fā)人員來說,由于只需對系統(tǒng)有一個大概的了解,重點可以放在第1章、第3章和第4章。如果希望了解集群相關的知識體系,可學習第5章和第6章的內容。
大家可以根據自己的職業(yè)發(fā)展和工作需要選擇不同的閱讀順序和側重點,同時也可以對其他相關的知識點有一定的了解。
致謝
感謝我的家人,你們在生活上對我無微不至的照顧,讓我有更多精力和動力去工作和創(chuàng)作。
感謝好友劉天斯和老男孩的支持和鼓勵,閑暇之余和你們一起交流開源技術和發(fā)展趨勢,也是一種享受。
感謝朋友劉鑫,是你花了大量時間和我一起研究和調試HAProxy+Keepalived。
感謝朋友胡安偉,感謝你為本書提供的精美插圖,并就Linux集群相關內容提出的許多寶貴的意見。
感謝機械工業(yè)出版華章公司的編輯楊福川和孫海亮,正是由于你們的信任、支持和幫助,我才能夠如此順利地完成全部書稿。
感謝熱心的讀者朋友們,沒有大家的支持和鼓勵,本書也不可能出到第4版。
感謝朋友三寶,感謝你在我苦悶的時候陪我聊天,感謝你這么多年來對我的信任和支持。
感謝在工作和生活中給予過我?guī)椭乃腥,感謝你們,正是因為有了你們,才有了本書的問世。
關于勘誤
盡管我花了大量時間和精力去核對文件和語法,但書中難免還會存在一些錯誤和紕漏,如果大家發(fā)現問題,希望可以反饋給我,相關信息可發(fā)到我的郵箱 yuhongchun027@gmail.com。盡管我無法保證每一個問題都會有正確的答案,但我肯定會努力回答和并且指出一個正確的方向。
如果大家對本書有任何疑問或想進行Linux的技術交流,可以訪問我的個人博客,我會在此恭候大家。我的個人博客地址為http://yuhongchun.blog.51cto.com。另外,我在51CTO和CU社區(qū)的用戶名均為“撫琴煮酒”,大家也可以直接通過此用戶名在社區(qū)內與我進行交流。
余洪春(撫琴煮酒)
余洪春(撫琴煮酒),系統(tǒng)架構師、高級DevOps,從事電子商務網站和大型CDN系統(tǒng)運維工作10多年,在Linux集群、自動化運維、系統(tǒng)安全及高并發(fā)高流量網站架構設計等方面進行了深入的研究,在大量一線實踐中積累了豐富的經驗。精通負載均衡高可用技術和自動化運維技術,擅長電子商務和門戶類網站架構。51CTO和ChinaUnix等知名社區(qū)的特邀專家,51CTO系統(tǒng)網絡頻道的專欄作家,ChinaUnix論壇“集群和高可用”及“監(jiān)控及自動化運維”版版主,在社區(qū)內發(fā)表了大量技術文章,深受網友好評。
前言
第1章 Linux服務器的性能調優(yōu)1
1.1 網站架構設計相關1
1.1.1 評估網站性能涉及的專業(yè)名詞術語1
1.1.2 CDN業(yè)務的選項2
1.1.3 IDC機房的選擇3
1.2 如何根據服務器應用來選購服務器 4
1.3 硬件對Linux性能的影響9
1.4 CentOS 6.8 x86_64最小化安裝后的優(yōu)化11
1.4.1 系統(tǒng)的基礎優(yōu)化11
1.4.2 優(yōu)化Linux下的內核TCP參數以提高系統(tǒng)性能19
1.4.3 CentOS 6.8 x86_64系統(tǒng)最小化安裝優(yōu)化腳本21
1.4.4 Linux下CPU使用率與機器負載的關系與區(qū)別23
1.5 服務器調優(yōu)實際案例25
1.6 小結28
第2章 Shell腳本在生產環(huán)境下的應用29
2.1 Shell編程基礎29
2.1.1 Shell腳本基本元素30
2.1.2 Shell基礎正則表達式30
2.1.3 Shell特殊字符32
2.1.4 變量和運算符33
2.2 Shell中控制流結構45
2.3 Sed的基礎用法及實用舉例48
2.3.1 Sed的基礎語法格式48
2.3.2 Sed的用法舉例說明53
2.4 awk的基礎用法及實用舉例56
2.5 Shell基礎正則表達式舉例61
2.6 Shell開發(fā)中應該掌握的系統(tǒng)知識點68
2.7 生產環(huán)境下的Shell腳本74
2.7.1 Amazon Linux系統(tǒng)簡介74
2.7.2 生產環(huán)境下的備份類腳本75
2.7.3 生產環(huán)境下的監(jiān)控類腳本78
2.7.4 生產環(huán)境下的運維開發(fā)類腳本84
2.8 小結88
第3章 利用Vagrant搭建分布式環(huán)境89
3.1 Vagrant簡單介紹89
3.2 Vagrant安裝90
3.3 使用Vagrant配置本地開發(fā)環(huán)境91
3.3.1 Vagrant的具體安裝步驟91
3.3.2 Vagrant配置文件詳解93
3.3.3 Vagrant常用命令詳解95
3.4 使用Vagrant搭建分布式環(huán)境96
3.5 小結99
第4章 輕量級自動化運維工具介紹100
4.1 輕量級自動化運維工具pssh介紹101
4.1.1 pssh的安裝103
4.1.2 pssh的使用103
4.2 輕量級自動化運維工具Fabric介紹105
4.2.1 Fabric的安裝105
4.2.2 Fabric的命令行入口fab命令詳細介紹107
4.2.3 Fabric的環(huán)境變量設置108
4.2.4 Fabric的核心API109
4.2.5 Fabric的執(zhí)行邏輯112
4.2.6 如何利用進程池大小來限制Fabric并發(fā)進程數114
4.3 Fabric在工作中應用實例114
4.3.1 開發(fā)環(huán)境中Fabric應用實例115
4.3.2 工作場景中常見的Fabric應用實例116
4.4 小結120
第5章 Linux集群及其項目案例分享121
5.1 負載均衡高可用核心概念及常用軟件121
5.1.1 什么是負載均衡高可用121
5.1.2 以F5 BIG-IP作為負載均衡器122
5.1.3 以LVS作為負載均衡器123
5.1.4 以Nginx作為負載均衡器132
5.1.5 以HAProxy作為負載均衡器132
5.1.6 高可用軟件Keepalived134
5.1.7 高可用軟件Heartbeat134
5.1.8 高可用塊設備DRBD135
5.2 負載均衡關鍵技術136
5.2.1 什么是Session136
5.2.2 什么是Session共享136
5.2.3 什么是會話保持137
5.3 負載均衡器的會話保持機制138
5.3.1 LVS的會話保持機制138
5.3.2 Nginx負載均衡器中的ip_hash算法142
5.3.3 HAProxy負載均衡器的source算法145
5.4 服務器健康檢測150
5.5 Linux集群的項目案例分享151
5.5.1 用LVS+Keepalived建高可用集群151
5.5.2 用Nginx+Keepalived實現在線票務系統(tǒng)154
5.5.3 企業(yè)級Web負載均衡高可用之Nginx+Keepalived157
5.5.4 HAProxy雙機高可用方案之HAProxy+Keepalived169
5.5.5 巧用DNS輪詢作負載均衡179
5.5.6 百萬級PV高可用網站架構設計184
5.5.7 千萬級PV高性能高并發(fā)網站架構設計187
5.6 軟件級負載均衡器的特點介紹與對比193
5.7 四層負載均衡和七層負載均衡工作流程的對比194
5.8 Linux集群的總結和思考196
5.9 小結198
第6章 MySQL性能調優(yōu)及高可用案例分享200
6.1 MySQL數據庫的優(yōu)化200
6.1.1 服務器物理硬件的優(yōu)化200
6.1.2 MySQL配置文件的優(yōu)化201
6.1.3 MySQL上線后根據status狀態(tài)進行適當優(yōu)化204
6.1.4 利用tuning-primer腳本進行數據庫調優(yōu)212
6.1.5 MySQL架構設計調優(yōu)216
6.2 MySQL數據庫的高可用架構方案216
6.2.1 生產環(huán)境下的DRBD+Heart-beat+MySQL雙機高可用217
6.2.2 生產環(huán)境下的MySQL數據庫主從Replication同步228
6.3 小結240
第7章 Linux防火墻介紹242
7.1 基礎網絡知識242
7.1.1 OSI網絡參考模型242
7.1.2 TCP/IP三次握手的過程詳解243
7.1.3 Socket應用245
7.1.4 其他基礎網絡知識247
7.2 Linux防火墻的狀態(tài)機制247
7.3 Linux防火墻在企業(yè)中的應用247
7.4 Linux防火墻的語法248
7.5 iptables的基礎知識252
7.5.1 iptables的狀態(tài)state252
7.5.2 iptables的Conntrack記錄254
7.5.3 關于iptables模塊的說明255
7.5.4 iptables防火墻初始化的注意事項256
7.5.5 如何保存運行中的iptables規(guī)則256
7.6 如何流程化編寫iptables腳本257
7.7 學習iptables應該掌握的工具260
7.7.1 命令行的抓包工具TCPDump260
7.7.2 圖形化抓包工具Wireshark261
7.7.3 強大的命令行掃描工具Nmap264
7.7.4 使用TCPPing工具檢測TCP延遲266
7.8 iptables的簡單腳本學習267
7.8.1 普通的Web主機防護腳本267
7.8.2 如何讓別人ping不到自己,而自己能ping通別人呢?269
7.8.3