內容簡介
SaltStack(簡稱Salt)是由Thomas Hatch 於2011 年創建的一個開源項目,初衷只是想構建一個快速的遠程執行系統。後來經過快速發展和新功能的不斷加入,演變成了現在的Salt,如今Salt 已經成為了一套強大的自動化運維管理平台。
《SaltStack運維實戰》力求用簡潔易懂的方式給讀者展示Salt 的核心功能和使用思想,系統地介紹Salt 的主要功能,從安裝和最基本的遠程執行開始,循序漸進地講解Salt 的方方面面,涉及Salt 的模組代碼編寫、狀態系統編寫、架構擴展和Salt 的高級套用等主題。《SaltStack運維實戰》中實例豐富,希望讀者可以通過本書掌握Salt 的本質和思想,在自己的工作中套用Salt 來提高運維效率。
《SaltStack運維實戰》適合運維人員以及任何和伺服器相關的工作人員閱讀,包括研發人員或業餘愛好者都可以通過本書掌握如何簡單快速地管理伺服器,完成伺服器集群基礎架構的建設。
編輯推薦
一線資深運維工程師力作,簡單快速地學習SaltStack
內容提要
SaltStack(簡稱Salt)是由Thomas Hatch 於2011 年創建的一個開源項目,初衷只是想構建一個快速的遠程執行系統。後來經過快速發展和新功能的不斷加入,演變成了現在的Salt,如今Salt 已經成為了一套強大的自動化運維管理平台。
《SaltStack運維實戰》力求用簡潔易懂的方式給讀者展示Salt 的核心功能和使用思想,系統地介紹Salt 的主要功能,從安裝和最基本的遠程執行開始,循序漸進地講解Salt 的方方面面,涉及Salt 的模組代碼編寫、狀態系統編寫、架構擴展和Salt 的高級套用等主題。《SaltStack運維實戰》中實例豐富,希望讀者可以通過本書掌握Salt 的本質和思想,在自己的工作中套用Salt 來提高運維效率。
《SaltStack運維實戰》適合運維人員以及任何和伺服器相關的工作人員閱讀,包括研發人員或業餘愛好者都可以通過本書掌握如何簡單快速地管理伺服器,完成伺服器集群基礎架構的建設。
目錄
第1 章 開始使用Salt 1
1.1 Salt 部署的基本架構1
1.2 安裝Salt 3
1.2.1 軟體包安裝方式3
1.2.2 腳本安裝方式4
1.2.3 源碼方式安裝5
1.2.4 其他發行版Linux 系統安裝Salt 5
1.3 配置Salt 6
1.3.1 Salt minion 配置7
1.3.2 啟動Salt master 和Salt minion 7
1.3.3 在master 上接受 minion 秘鑰8
1.4 第一條命令測試9
本章小結12
第2 章 通過Salt 遠程執行管理minion 13
2.1 Salt 遠程執行命令的組成結構13
2.1.1 命令行選項.14
2.1.2 目標定位字元串.17
2.2 遠程執行模組和函式27
本章小結37
第3 章 編寫自己的模組代碼.38
3.1 理解Salt 遠程執行的底層原理38
3.2 執行模組的構成結構39
3.3 編寫自己的執行模組函式41
3.4 交叉調用Salt 自帶的模組函式42
3.5 實戰編寫一個完整模組47
本章小結51
第4 章 通過state 模組定義主機狀態52
4.1 狀態的概念以及如何撰寫第一條狀態.52
4.2 狀態配置檔案的各個要素56
4.3 常用的狀態模組用法60
4.4 使用requisites 對狀態進行排序控制.66
4.5 通過state 模組部署LAMP 環境72
本章小結76
第5 章 通過Jinja2 模板以及Grain 和Pillar 擴展主機狀態.77
5.1 Jinja2 模板語言的基礎.77
5.2 Grain 和Pillar 的概念及設定.80
5.3 用Jinja2 配合Grain 和Pillar 擴展SLS 配置檔案.89
5.4 用Jinja2 配合Grain 和Pillar 動態下發配置檔案95
本章小結109
第6 章 用highstate 複合主機狀態.110
6.1 highstate 組織多個狀態配置.110
6.2 用top.sls 檔案管理狀態檔案110
6.3 狀態檔案的拆分和復用116
6.4 多環境的配置和管理131
6.5 實戰案例:keepalived+Redis 高可用架構.133
6.6 實戰案例:MooseFS 分散式檔案系統部署.153
本章小結178
第7 章 SaltStack 配置檔案.179
7.1 Salt master 配置詳解.179
7.2 Salt minion 配置詳解186
7.3 SaltStack 參數最佳化190
本章小結191
第8 章 SaltStack 架構擴展.192
8.1 Salt 的多master 高可用架構192
8.2 syndic 方式擴展Salt 的管理架構.195
8.3 Salt 的無master 模式197
本章小結208
第9 章 SaltStack 高級話題.209
9.1 Salt job 管理209
9.2 Salt runners 系統.213
9.3 Event 系統和Reactor 系統.219
9.4 Salt API 系統.231
本章小結243
媒體評論
隨著網際網路的不斷深入發展,很多公司的伺服器也在不斷增長,自動化運維技術的提升自然成為大家非常關注話題,Salt就是其中的一個明星開源項目。《SaltStack運維實戰》對於希望了解Salt的同學來說,是一本非常不錯的參考書。
本書深入淺出地介紹了Salt系統的技術細節以及使用過程中的實戰經驗,對於初學者和專業技術人員而言都有很大的幫助。
zedanli(李震東)
騰訊OMG運維技術中心副總監
“乾乾淨淨,快速部署”,是網際網路運維的一項準則,本書介紹了SaltStack在這個準則上的實現方式和技術細節。
更為難得的是,本書是作者基於國內大型網際網路公司海量伺服器運維工作經驗的一個提煉。對於初創的網際網路公司和初入網際網路運維行業的同學來說,閱讀本書是一個快速成長的捷徑。
shawnding(丁曉坤)
騰訊移動媒體運維組組長
作者的做事勤奮一直讓我非常欽佩,在自己的個人閒暇時間,能通過寫書為更多有志於從事網際網路的同學開啟一盞明燈,並且結合了自己多年的工作經驗,這種實踐是無數個日日夜夜對內心的孤獨執守,更是自己對運維思想、技術的永不滿足,體現了精益求精的品質,非常值得大家一讀。
alanshao(邵宗文)
騰訊網運維組組長
前言
為什麼要寫本書
系統管理員和運維人員日常會進行大量的重複性操作,諸如安裝軟體、修改配置檔案、創建用戶、批量執行命令等。如果主機數量龐大,單靠人工來維護,單調冗繁的任務實在讓人難以忍受。早期的運維人員會根據自己的生產環境寫特定腳本來輔助完成這些大量重複性的工作。但是這些腳本不但複雜,難於維護,更為重要的是不可移植。總體上講,系統管理員面臨的問題主要分為兩大類:一是系統狀態維護(配置管理),二是遠程執行命令。為了解決這些問題,誕生了很多開源軟體,系統狀態維護方面有Puppet、Chef、CFEngine、Ansible、SaltStack等,這些軟體擅長維護系統狀態,可根據定義使相應的主機達到某種狀態。維護主機的整個生命周期,實現從系統安裝初始化到下線整個過程的管理和控制。在遠程命令執行方面的軟體則有pssh、Fabric、Func、Rundeck、Ansible、SaltStack等,它們可以方便地對大量主機進行批量的命令執行操作。無論採用哪款軟體,系統管理員所面臨的問題都是一樣的,即如何在多變複雜的環境中完成靈活的配置管理和命令執行。這就需要所用的軟體本身足夠強大,而且具備很好的可擴展性。SaltStack在這方面表現得十分出色,SaltStack(簡稱Salt)是由Thomas Hatch於2011年創建的一個開源項目。初衷只是想構建一個快速的遠程執行系統。後來隨著各種新功能的不斷加入,演變成了現在的Salt。如今Salt已成為世界上最流行的開源項目之一,同時也是最流行的基礎架構管理平台之一。
Salt靈活性強,既可進行大規模部署,也能進行小規模的系統部署。Salt 的設計架構適應於任意數量的伺服器,從少量本地網路系統到跨越數個不同的數據中心,拓撲結構都是簡單的伺服器/客戶端模型,配置簡單,默認的配置幾乎無須更改,只需要微調即可滿足特定需求。不管你有幾台、幾百台甚至幾千台伺服器,都可以使用Salt在一個中心節點上對它們進行管控。使用Salt可以靈活定位任意伺服器子集來運行命令或完成任務。也可以使用狀態系統來定義被管理伺服器需要達到的狀態,並且只需要一條命令就可以在很短的時間內讓對應的伺服器變成你所定義的角色。由於Salt是用Python編寫的,允許用戶通過Python語言自定義功能模組,同時也為用戶提供了大量的Python API接口,所以用戶可以根據自己的需要進行簡單快速的擴展。
本書希望以一種簡潔的方式引導讀者掌握Salt的核心功能和理念。學完之後,相信您會對簡潔強大的Salt愛不釋手!
一些建議
如果讀者之前沒有接觸過配置管理類的軟體,習慣了用腳本編譯部署伺服器環境,需要轉變一下管理伺服器的理念,不要再用編譯源碼包的方式部署伺服器,請習慣用描述式的語言來部署伺服器環境,配合自建的yum倉庫把需要編譯的軟體製作成rpm包的形式進行管理,這樣既便於管理軟體版本也不需要每次部署都在伺服器上對軟體進行編譯。
學習本書所需的環境
您需要幾台Linux機器來運行本書中所涉及的示例,可以用主流的虛擬機軟體搭建一個或多個Linux系統環境。作業系統最好是CentOS6.5,Salt版本是2015.5.5,當然大多數Linux主流版本都可以。如果您使用的作業系統不是CentOS6.5,那您得到的輸出結果可能和本書中的結果會略有不同。
讀者對象
本書最主要的讀者是系統管理員和Linux運維人員。此外,任何和伺服器相關的工作人員,包括研發人員或業餘愛好者都可以通過本書掌握如何簡單快速地管理伺服器,完成伺服器集群基礎架構的建設。本書適用於任何想使用Salt更為高效地管理基礎架構的技術人員。
致謝
特別感謝我的朋友羅慶昌,沒有他的幫助就不可能完成這本書。還得感謝我在新浪微博工作期間的技術領導王春生,在春生的幫助和指引下讓我有機會更深入地接觸配置管理領域,另外還要感謝我現在的技術領導alanshao(紹宗文)和shawnding(丁曉坤),在他們的幫助下,讓我對海量業務運維有了重新的認識。
讓我們開啟學習之旅吧!
劉英傑
2016.3.2