歡迎光臨
每天分享高質量文章

用開源自動化運維工具 SaltStack 在雲平臺中實現各主機統一配置管理

本文將主要介紹開源軟體 SaltStack 自動化運維工具在大型雲計算環境中,如何幫助管理員快速完成運維任務,降低運維工作量,提高效率。根據不同業務特性,進行配置,實現集中化管理、分發檔案、採集服務器資料,規範業務等功能。

原題:自動化運維工具 SaltStack 在雲計算環境中的實踐

隨著雲計算技術的快速普及與發展,越來越多的企業開始學習和搭建自己的雲平臺代替傳統的 IT 交付樣式,企業的 IT 環境也隨之越來越複雜,常規的運維方法與技術已經無法滿足現在雲環境中系統的配置與變更。基於雲計算的發展,大資料、認知技術及容器技術也在企業中得到了越來越多的應用,大量的服務器管理操作、配置變更被頻繁的執行與部署,以應對多變的業務需求。按照常規的方式,運維人員需逐個服務器進行配置調整,手動管理大量的系統信息,難免有各種各樣的問題及事故發生。為了避免這樣的風險,本文的示例中,筆者將詳細介紹如何使用開源軟體 SaltStack 自動化運維工具對雲環境中的服務器進行命令的遠程執行及配置管理,確保操作的安全性及高效性,降低管理員的操作風險。

本文中介紹的架構,主要是在 CentOS6.5 上進行集中部署與測試。該架構主要涉及到三 個開源軟體,分別是 Python 軟體集,SaltStack 軟體集和 ZeroMQ 訊息佇列軟體。

  • 在部署 SaltStack 軟體之前,一定要先正確安裝 python,因為 SaltStack 是由 python 所編寫。不同版本的 SaltStack 需要使用不同版本的 Python 進行匹配,避免不必要的兼容性問題發生,本文將採用 python2.6.6。

  • SaltStack 軟體是一個 C/S 架構的軟體,通過管理端下髮指令,客戶端接受指令的方式進行操作。

  • ZeroMQ 是一款訊息佇列軟體,SaltStack 通過訊息佇列來管理成千上萬台主機客戶端,傳輸指令執行相關的操作。而且採用 RSA key 方式進行身份確認,傳輸採用 AES 方式進行加密,這使得它的安全性得到了保證。

下麵我將詳細介紹 SaltStack 軟體的概念與工作機制。

SaltStack 的基本概念與工作原理

SaltStack 本身是一種開源的基礎架構集中化管理平臺,相比其它商業產品,其部署及配置稍顯複雜。為了更好的部署和配置 SaltStak,本章節將著重介紹它的基本概念、特性與工作原理。

SaltStack 簡介與特性

SaltStack 是一種基於 C/S 架構的服務器基礎架構集中化管理平臺,管理端稱為 Master,客戶端稱為 Minion。SaltStack 具備配置管理、遠程執行、監控等功能,一般可以理解為是簡化版的 Puppet 和加強版的 Func。SaltStack 本身是基於 Python 語言開發實現,結合了輕量級的訊息佇列軟體 ZeroMQ 與 Python 第三方模塊(Pyzmq、PyCrypto、Pyjinjia2、python-msgpack 和 PyYAML 等)構建。

通過部署 SaltStack 環境,運維人員可以在成千上萬台服務器上做到批量執行命令,根據不同的業務特性進行配置集中化管理、分發檔案、採集系統資料及軟體包的安裝與管理等。

SaltStack 具有以下特性,幫助企業 IT 更好的實現系統批量管理。

  1. 部署簡單、管理方便;

  2. 支持大部分的操作系統,如 Unix/Linux/Windows 環境;

  3. 架構上使用C/S管理樣式,易於擴展;

  4. 配置簡單、功能改寫廣;

  5. 主控端(Master)與被控端(Minion)基於證書認證,確保安全可靠的通信;

  6. 支持 API 及自定義 Python 模塊,輕鬆實現功能擴展;

SaltStack 的工作原理

SaltStack 採用 C/S 結構來對雲環境內的服務器操作管理及配置管理。為了更好的理解它的工作方式及管理模型,本章將通過圖形方式對其原理進行闡述。

SaltStack 客戶端(Minion)在啟動時,會自動生成一套密鑰,包含私鑰和公鑰。之後將公鑰發送給服務器端,服務器端驗證並接受公鑰,以此來建立可靠且加密的通信連接。同時通過訊息佇列 ZeroMQ 在客戶端與服務端之間建立訊息發佈連接。具體通信原理圖,如圖 1 所示,命令執行如圖 2 所示:


圖 1.SaltStack 通信原理圖

專業術語說明:

  • Minion 是 SaltStack 需要管理的客戶端安裝組件,會主動去連接 Master 端,並從 Master 端得到資源狀態信息,同步資源管理信息。

  • Master 作為控制中心運行在主機服務器上,負責 Salt 命令運行和資源狀態的管理。

  • ZeroMQ 是一款開源的訊息佇列軟體,用於在 Minion 端與 Master 端建立系統通信橋梁。

  • Daemon 是運行於每一個成員內的守護行程,承擔著發佈訊息及通信端口監聽的功能。


圖 2.SaltStack 操作執行原理圖

原理圖說明:

  • Minion 是 SaltStack 需要管理的客戶端安裝組件,會主動去連接 Master 端,並從 Master 端得到資源狀態信息,同步資源管理信息。

  • Master 作為控制中心運行在主機服務器上,負責 Salt 命令運行和資源狀態的管理。

  • Master 上執行某條指令通過佇列下發到各個 Minions 去執行,並傳回結果。

以上使大家瞭解了什麼是 SaltStack 以及它的通信及執行原理,下麵將主要介紹本次實體部署的架構設計。

SaltStack 的架構設計

為了讓大家更好的理解 SaltStack 在雲平臺集中化管理方面的優勢,因此,根據專案的實際情況繪製了部署架構圖,併在文中對架構圖進行了詳細說明。如圖 3 所示:


圖 3.SaltStack 部署架構圖

說明:

  • SaltStack 的所有被管理客戶端節點(如圖 3 所示 DB 和 Web),都是通過密鑰進行加密通信,使用端口為 4506。客戶端與服務器端的內容傳輸,是通過訊息佇列完成,使用端口為 4505。Master 可以發送任何指令讓 Minion 執行,salt 有很多可執行模塊,比如說 CMD 模塊,在安裝 minion 的時候已經自帶了,它們通常位於你的 python 庫中,locate salt | grep /usr/ 可以看到 salt 自帶的所有東西。

  • 為了更好的理解架構用意,以下將展示主要的命令發佈過程。 1.SaltStack 的 Master 與 Minion 之間通過 ZeroMq 進行訊息傳遞,使用了 ZeroMq 的發佈訂閱樣式,連接方式包括 TCP 和 IPC。 2.Salt 命令,將 cmd.run ls 命令從 salt.client.LocalClient.cmd_cli 發佈到 Master,獲取一個 Jodid,根據 jobid 獲取命令執行結果。 3.Master 接收到命令後,將要執行的命令發送給客戶端 minion。 4.Minion 從訊息總線上接收到要處理的命令,交給 minion._handle_aes 處理。 5.Minion._handle_aes 發起一個本地執行緒呼叫 cmdmod 執行 ls 命令。執行緒執行完 ls 後,呼叫 Minion._return_pub 方法,將執行結果通過訊息總線傳回給 master。 6.Master 接收到客戶端傳回的結果,呼叫 master.handle_aes 方法將結果寫的檔案中。 7.Salt.client.LocalClient.cmd_cli 通過輪詢獲取 Job 執行結果,將結果輸出到終端。

SaltStack 的安裝與配置

對 SaltStack 有了一個初步的瞭解之後,您將在本章通過實際案例操作進一步瞭解 SaltStack。本章節一共分為三個部分,分別介紹安裝環境的說明,具體安裝及安裝後的 SaltStack 配置。

SaltStack 的環境說明

由於受到硬體資源限制,測試環境將採用三台服務器進行部署,分別扮演不同的角色,詳細信息如表 1 所示。


表 1.SaltStack 環境說明

SaltStack 的安裝

目前 SaltStack 支持很多平臺的部署,具體到每個平臺的安裝部署,可以參考官方檔案。本實體中將主要介紹基於 CentOS 平臺的安裝部署。

依賴組件的安裝

由於 SaltStack 是開源軟體,其很多功能是依賴其它的軟體包來完成。所以我們在安裝 SaltStack 之前需要先將以下表 2 中的依賴軟體包安裝到主機上,避免因為缺少依賴關係而產生錯誤。


表 2. 依賴軟體包

為了方便依賴包的安裝,本章將採用 YUM 的方式進行安裝。

首先下載並安裝 epel 源,執行以下指令,將 epel.repo 儲存到/etc/yum.repos.d 目錄下。

wget –o /etc/yum.repos.d/epel.repohttp://mirrors.aliyun.com/repo/epel-6.repo。

並通過 Yum list 命令來校驗安裝源是否生效,如出現圖 4 所示,則表明Yum源已經生效。


圖 4.SaltStack 安裝源

建立好安裝源及解決了軟體包依賴關係之後,下一步將介紹如何安裝 Saltstack master 主機。

Master 角色的安裝

如上表 2,已經清晰的列出需要依賴哪些安裝包確保 master 的成功安裝。配置好 yum 源之後,只需要輸入以下命令(如圖 5 所示),就可以在自動安裝 SaltStack 的同時,將依賴包安裝好。


圖 5.SaltStack master 主機安裝

安裝完成後,輸入 chkconfig salt-master on 將 master 服務加入到開機啟動項,這樣每次系統啟動,都會自動加載 master 服務。輸入 service salt-master start 啟動 master 服務。之後通過 netstat –antp 查詢服務狀態,結果如圖 6 所示。


圖 6.SaltStack master 服務查詢

依照本節介紹來看,master 服務已經被正確安裝並啟動,下麵將介紹如何安裝 SaltStack-Minion 到客戶端服務器。

Minion 角色的安裝

SaltStack 是一個 C/S 結構的開源軟體,Master 通過客戶端軟體 Minion 進行指令的執行與策略的配置。如圖 7 所示,通過 yum install 命令安裝 Minion 客戶端。


圖 7.SaltStack Minion 主機安裝

安裝完成後,輸入 chkconfig salt-minion on,將 minion 服務加入到開機啟動項,這樣每次系統啟動,都會自動加載 minion 服務。輸入 service salt-minion start,啟動 minion 服務。之後通過 netstat –antp 查詢服務狀態,結果如圖 8 所示。


圖 8.SaltStack Minion 服務查詢

到目前為止,SaltStack 的安裝工作已經完成,Master 和 Minion 主機服務都已經正確開啟,端口服務正常。下一章將主要介紹如何配置 SaltStack,使其可以正常的提供各種功能。

SaltStack 的配置

SaltStack 的配置主要集中在 Master 主機端,客戶端的配置較少,本章將通過以下兩部分詳細介紹。

Minion 端配置

SaltStack-Minion 是 SaltStack 安裝在客戶端的代理,負責接收服務器端發佈的指令並執行,同時負責客戶端的狀態監控。客戶端要想被 master 管理,需要修改其配置檔案,將服務器指向到 Master 的地址。其配置檔案位於/etc/salt/目錄下,名為 minion,通過 vi 工具修改,如圖 9 所示。


圖 9.SaltStack Minion 配置

配置完成後,儲存並通過 service salt-minon restart 命令重啟 minion 服務。本次測試案例,並不需要其它高級功能的演示,所以客戶端到此配置結束,更多功能的配置,請參考SaltStack 官方手冊。

Master 端配置

SaltStack-Master 是 SaltStack 組件的核心服務,負責發佈指令及配置檔案的分發與管理,及客戶端的管理功能。Master 要想正常提供服務,需要接受客戶端的證書認證請求。我們之前已經介紹過,SaltStack 是通過 SSL 證書認證的方式進行通信的。如圖 10 所示操作,輸入 salt-key –l 來查詢客戶端證書狀態,並如圖 11 所示操作,輸入 salt-key –A 接受客戶端認證。


圖 10.SaltStack 證書查詢

從圖中可以看到客戶端被髮現,但是處於未被接受狀態,需要管理員執行圖 11 所示指令,進行接受。


圖 11.SaltStack 接受證書

至此我們已經完成 SaltStack 的全部配置,在下一章中,將通過幾個測試場景來說明 SaltStack 在雲管理平臺的重要功能。

SaltStack 測試

通過本章節中的兩個測試案例,可以驗證 SaltStack 是否運行正常,是否可以完成預定的功能。我們可以通過 salt ‘*’ test.ping 來測試客戶端是否在線,並被 master 管理,如圖 12 所示,如果傳回 True,則說明客戶端已經被 master 管理,並處於在線狀態。


圖 12.SaltStack 接受證書

接下來,我們將通過批量執行命令和批量安裝軟體,來測試 SaltStack 的部分功能。

批量執行命令

在日常運維中,同時對多台服務器進行操作,是一個很平常的需求。比如批量執行 ping 操作,驗證服務器是否在線,批量執行查詢命令,看服務器的負載及利用率。如圖 13 所示的指令為批量查詢服務器操作系統的版本。


圖 13.SaltStack 查詢服務器的 IP 信息

*代表對所有的被管理客戶端進行操作,cmd.run 是命令呼叫模塊,ifconfig 是具體的執行命令。

批量安裝軟體

批量安裝軟體也是日常運維中的家常便飯,我們可以通過 SaltStack 的軟體推送功能,對所管理的服務器進行進行相關軟體的批量安裝。如圖 14 所示的指令為批量安裝軟體 lrzsz 在客戶端服務器中。


圖 14.SaltStack 安裝 lrzsz

如上圖所示,lrzsz 軟體被順利的安裝到了客戶端服務器。通過以上兩個測試,可以驗證 SaltStack 可以正常的為雲平臺提供集中化的管理與配置功能。

結束語

通過在 CentOS 6.5 上實現自動化運維工具 SaltStack 的部署及功能演示,可以滿足管理員對雲計算平臺中服務器及配置的集中化管理,提高了運維團隊的運維效率和準確性,降低了管理成本。同時通過本文,我們也對開源工具有了更多的瞭解和學習。為今後應用更多的開源工具管理雲平臺提供了夯實的技術基礎。

參考資源:

  • SaltStack 官方文件

  • SaltStack Community




————廣告時間————

《馬哥Linux雲計算及架構師》課程,由知名Linux佈道師馬哥創立,經歷了8年的發展,聯合阿裡巴巴、唯品會、大眾點評、騰訊、陸金所等大型互聯網一線公司的馬哥課程團隊的工程師進行深度定製開發,課程採用 Centos7.2系統教學,加入了大量實戰案例,授課案例均來自於一線的技術案例。

開課時間級地點:2018年01月08號28期鄭州面授班)

掃描二維碼領取學習資料

更多Linux好文請點擊【閱讀原文】哦

↓↓↓

赞(0)

分享創造快樂