本書主要講解采用OSGi技術來設計一款可插拔式的運維軟件的方法與思想,為讀者提供一種不一樣的運維軟件設計與自動化運維解決方案。本書分三部分,及時部分講解開源社區中比較流行的三款集中化運維軟件,第二部分與讀者一起分享為什么要采用OSGi的技術來設計集中化運維軟件,第三部分介紹設計這款運維軟件所涉及的技術和一些設計思想。
第1章 什么是自動化運維
1.1 硬件運維和軟件運維
1.1.1 小故事之一——電腦專家
1.1.2 小故事之二——你居然不會修電腦
1.1.3 硬件運維與軟件運維
1.2 軟件運維的主要問題
1.2.1 設備數量多
1.2.2 系統異構性大
1.2.3 虛擬化的成熟帶來更大的困難
1.3 運維常用工具
1.3.1 Puppet
1.3.2 SaltStack
1.3.3 Ansible
1.4 自動化運維
1.5 小結
第2章 集中化運維利器——Ansible
2.1 環境準備
2.2 安裝Ansible
2.2.1 使用CentOS的EPEL源進行安裝
2.2.2 使用Easy_Install安裝Ansible
2.3 Ansible基礎
2.3.1 資產配置
2.3.2 執行命令
2.3.3 指定目標主機
2.3.4 常用命令示例
2.4 Ansible常用模塊
2.4.1 文件管理模塊
2.4.2 命令執行模塊
2.4.3 網絡相關模塊
2.4.4 源碼管理模塊
2.4.5 包管理模塊
2.4.6 系統管理模塊
2.5 PlayBook
2.5.1 PlayBook簡介
2.5.2 Include語法
2.5.3 變量
2.5.4 條件
2.5.5 循環
2.5.6 PlayBook使用實例——集中化日常巡檢
2.6 使用Ansible的API
2.7 小結
2.7.1 Ansible的優點
2.7.2 Ansible的缺點
第3章 集中化運維利器——Puppet
3.1 Puppet與Ansible
3.2 Puppet基礎
3.2.1 安裝Puppet
3.2.2 Puppet主要配置文件
3.2.3 頒發證書
3.2.4 及時個Puppet示例
3.3 Puppet的常用資源
3.3.1 定時任務——cron
3.3.2 命令執行——exec
3.3.3 文件管理——file
3.3.4 包管理——packag
3.3.5 服務管理——service
3.4 Puppet語法基礎
3.4.1 資源
3.4.2 類
3.4.3 變量
3.5 小結
3.5.1 Puppet的優點
3.5.2 Puppet的缺點
第4章 集中化運維利器——SaltStack
4.1 SaltStack、Puppet、Ansible
4.2 無Agent模式——SaltSSH
4.3 SaltStack的基本組成
4.4 Salt State概述
4.4.1 top.sls
4.4.2 state文件
4.4.3 配置主機
4.4.4 SaltState之Requires
4.4.5 Template、Extends、Includes
4.5 無主服務器模式運行
4.6 使用SaltStack的定時作業
4.7 實時執行命令
4.7.1 target
4.7.2 function
4.7.3 arguments
4.8 Pillar
4.8.1 使用Pillar
4.8.2 Pillar的一些操作方法
4.9 小結
4.9.1 SaltStack的優點
4.9.2 SaltStack的缺點
第5章 重復造一個輪子
5.1 從一個自動化運維軟件說起
5.2 困難重重
5.2.1 多樣的設備類型
5.2.2 運維設備的總量大
5.2.3 艱難的環境
5.2.4 多變的客戶需求
5.3 輪子需要的特性
5.4 ActiveMQ基礎
5.4.1 配置ActiveMQ
5.4.2 部署ActiveMQ
5.4.3 及時個ActiveMQ例子
5.5 Apache Karaf
5.5.1 OSGi簡介
5.5.2 為什么選擇Karaf
5.5.3 基礎架構設計
5.5.4 啟動Apache Karaf
5.5.5 制作及時個OSGi包
第6章 ActiveMQ概覽
6.1 消息發送
6.1.1 TextMessage
6.1.2 MapMessage
6.1.3 BytesMessage
6.1.4 StreamMessage
6.1.5 BlobMessage
6.2 斷線重連機制FailOver
6.2.1 配置FailOver
6.2.2 FailOver的常用參數
6.3 消息生命周期
6.3.1 為什么消息需要生命周期
6.3.2 使用消息超時機制
6.4 清空不常用的隊列
6.5 使用JMX獲取隊列信息
6.5.1 啟用ActiveMQ的JMX功能
6.5.2 獲取ActiveMQ的隊列信息
6.6 ActiveMQ的HA方案
6.6.1 配置NFS服務器
6.6.2 配置NFS客戶端
6.6.3 調整消息中間件的配置文件
6.6.4 將Failover作為連接串
6.6.5 原理
第7章 Apache Karaf概覽
7.1 理解Import和Export
7.2 Service Wraper
7.2.1 支持的平臺
7.2.2 使用Service Wrapper
7.2.3 Karaf Wrapper的配置文件
7.3 使用控制臺
7.3.1 Shell模塊
7.3.2 OSGi模塊
7.3.3 LOG模塊
7.3.4 SSHD模塊
7.4 Karaf的日志
7.4.1 Karaf.Out
7.4.2 Karaf.log
7.4.3 Application log4j 日志
7.5 Karaf子實例
7.5.1 使用Karaf子實例
7.5.2 為什么需要使用子實例
7.6 擴展Karaf控制臺
7.6.1 使用Maven創建項目
7.6.2 編寫控制臺插件包
7.6.3 部署插件包
7.7 使用Web控制臺
7.8 使用Feature——JDBC數據源
第8章 核心框架
8.1 核心層概述
8.2 核心框架
8.2.1 服務端消息處理
8.2.2 客戶端消息處理
8.2.3 插件狀態匯報
8.3 消息分發服務端
8.4 插件狀態服務端
8.5 PlayBook服務端
8.5.1 PlayBook服務端設計目的
8.5.2 PlayBook設計示意圖
8.6 結果處理服務端
8.6.1 結果處理服務端設計目的
8.6.2 結果處理服務端處理流程
第9章 通用插件包
9.1 插件包概覽
9.2 作業調度模塊——Cron4J
9.2.1 Cron4J基本使用方式
9.2.2 作業調度參數
9.2.3 重新調度作業
9.2.4 調度系統進程
9.3 數據訪問模塊——MidaoProject
9.3.1 為什么選擇Midao
9.3.2 使用Midao
9.4 序列化模塊——Gson
9.5 交互式命令執行模塊——JavaExpect
9.6 小結
第10章 常用插件
10.1 文件下發插件
10.1.1 文件下發插件設計
10.1.2 使用Apache Common IO
10.2 文件抓取插件
10.2.1 文件抓取插件整體設計
10.2.2 文件抓取插件設計要點
10.3 命令執行插件
第11章 整合Zabbix
第12章 案例
不知不覺也與各種開發語言做了挺久的小伙伴,依稀記得當初很好奇用C語言這種在黑框框里面跑的程序怎么才能寫出一個界面,后來在興趣的驅使下不斷地接觸各種各樣的技術,讓我感慨時間過得還是挺快的。
我曾經接觸過一個與自動化運維相關的項目,整個項目對我來說挑戰是非常大的,而且開發過程也非常坎坷。當做到運維部分的時候,出現了非常大的挑戰,我們不得不面對技術水平參差不齊的維護團隊,各種各樣的操作系統,限制條件非常多的網絡環境,當然,還有項目進度的步步緊逼。對于運維的功能,Ansible、Puppet、SaltStack都是非常不錯的選擇,但是偏偏在我們所要面對的環境下用起來實在太困難。在和同事討論之后,偶然發現OSGi這種技術能夠解決我們的問題,所以也就自己重新造了一個輪子來解決我們所面臨的問題。
項目進行得差不多的時候,我覺得Apache Karaf與Apache ActiveMQ這兩種技術整合起來所設計的運維框架也有它的一些優點,于是在OSChina上寫了一篇博客與大家分享。非常巧的是,電子工業出版社的編輯通過我的博客聯系上了我,希望我可以寫一本關于采用Apache Karaf與Apache ActiveMQ整合所設計的運維軟件的書籍,這讓我感到非常榮幸。
我把當初設計這套軟件的思路以及一些需要注意的要點寫在了這本書中,希望我所分享的內容能夠對運維的小伙伴們有所幫助。
本書面向的讀者
本書面向的讀者是從事系統運維的開發人員,希望能夠給讀者在設計運維軟件的時候提供一種不同的思路。書中的內容以思路分享居多,因為筆者認為如今的互聯網非常發達,某個功能如何實現,我們搜索一下就會找到很多方案,而思路的分享更能引起讀者與筆者在思想上的碰撞,在碰撞中讓讀者發現一些其他的方法。
內容介紹
本書共12章。
第1章與讀者一起探討什么是自動化運維。
第2到第4章簡單介紹目前比較熱門的集中化運維軟件Ansible、Puppet和SaltStack。
第5章介紹為什么在有這么多集中化運維軟件的情況下我們還需要重復造一個輪子。
第6章和第7章介紹重復制作輪子所需要的一些技術——Apache Karaf和Apache ActiveMQ。
第8章到第10章介紹如何使用Apache Karaf和Apache ActiveMQ制作出一個可插拔式的集中化運維框架。
第11章介紹如何與Zabbix進行整合。
第12章與讀者分享了一個小故事,希望通過這個小故事讓讀者能夠更加了解這款運維軟件所要解決的問題。
致謝
感謝我的同事陳自欣,我非常佩服他在技術知識面上的廣度,采用OSGi的技術來開發運維軟件的思路就是他提出來的。
感謝我的同事崔威,在我剛工作的時候教會了我許多軟件開發的技術,讓我在后續的技術發展道路上少走了許多彎路。
感謝我的家人,給了我這么多的時間讓我可以專心地完成本書的寫作。
吳文豪
2015年5月