自動(dòng)化運(yùn)維利器 SaltStack 工作原理及安裝配置實(shí)例詳解

基于云計(jì)算的發(fā)展,大數(shù)據(jù)、認(rèn)知技術(shù)及容器技術(shù)也在企業(yè)中得到了越來越多的應(yīng)用,大量的服務(wù)器管理操作、配置變更被頻繁的執(zhí)行與部署,以應(yīng)對(duì)多變的業(yè)務(wù)需求。按照常規(guī)的方式,運(yùn)維人員需逐個(gè)服務(wù)器進(jìn)行配置調(diào)整,手動(dòng)管理大量的系統(tǒng)信息,難免有各種各樣的問題及事故發(fā)生。

概述

隨著云計(jì)算技術(shù)的快速普及與發(fā)展,越來越多的企業(yè)開始學(xué)習(xí)和搭建自己的云平臺(tái)代替?zhèn)鹘y(tǒng)的IT交付模式,企業(yè)的IT環(huán)境也隨之越來越復(fù)雜,常規(guī)的運(yùn)維方法與技術(shù)已經(jīng)無法滿足現(xiàn)在云環(huán)境中系統(tǒng)的配置與變更。

基于云計(jì)算的發(fā)展,大數(shù)據(jù)、認(rèn)知技術(shù)及容器技術(shù)也在企業(yè)中得到了越來越多的應(yīng)用,大量的服務(wù)器管理操作、配置變更被頻繁的執(zhí)行與部署,以應(yīng)對(duì)多變的業(yè)務(wù)需求。按照常規(guī)的方式,運(yùn)維人員需逐個(gè)服務(wù)器進(jìn)行配置調(diào)整,手動(dòng)管理大量的系統(tǒng)信息,難免有各種各樣的問題及事故發(fā)生。

為了避免這樣的風(fēng)險(xiǎn),本文的示例中,將詳細(xì)介紹如何使用開源軟件SaltStack自動(dòng)化運(yùn)維工具對(duì)云環(huán)境中的服務(wù)器進(jìn)行命令的遠(yuǎn)程執(zhí)行及配置管理,確保操作的安全性及高效性,降低管理員的操作風(fēng)險(xiǎn)。

什么是自動(dòng)化運(yùn)維?

其實(shí)自動(dòng)化運(yùn)維就是將復(fù)雜的事情簡單化、標(biāo)準(zhǔn)化、流程化,通過工具重復(fù)性、周期性的實(shí)現(xiàn)。例如應(yīng)用系統(tǒng)維護(hù)自動(dòng)化,巡檢自動(dòng)化和故障處理自動(dòng)化等。能夠自動(dòng)解決用戶在IT管理中的日常運(yùn)維問題,最終實(shí)現(xiàn)提升運(yùn)維效率的目的。

市場上的自動(dòng)化運(yùn)維平臺(tái)很多,功能豐富。通過自動(dòng)化的運(yùn)維可以有效的發(fā)現(xiàn)、解決運(yùn)維中的事件和問題。

自動(dòng)化運(yùn)維的好處

自動(dòng)化運(yùn)維平臺(tái)作為當(dāng)下最流行的熱詞之一,得到了越來越多企業(yè)的關(guān)注和實(shí)踐。部分功能或者全部功能被管理員所接受。主要是因?yàn)樽詣?dòng)化運(yùn)維具備以下幾點(diǎn)優(yōu)勢(shì):

方便管理:自動(dòng)化運(yùn)維就是將復(fù)雜的事情簡單化、標(biāo)準(zhǔn)化、流程化。通過一個(gè)平臺(tái),一個(gè)入口進(jìn)行問題發(fā)現(xiàn)和解決。同時(shí)便于多人同時(shí)對(duì)不同的系統(tǒng)進(jìn)行按需管理,無需牢記各種復(fù)雜指令,而是通過優(yōu)化的集合進(jìn)行邏輯組合實(shí)現(xiàn)相關(guān)的功能;

批量執(zhí)行任務(wù):自動(dòng)化都會(huì)涉及到批量執(zhí)行,市場上比較成熟的產(chǎn)品如Ansible,SaltStack等。兩種產(chǎn)品均為python開發(fā),有利于運(yùn)維管理員定制需求,滿足更多自動(dòng)化運(yùn)維場景的需要;

資產(chǎn)收集:資產(chǎn)管理是運(yùn)維工作重要的一部分,清楚自己運(yùn)維的資產(chǎn),了解資產(chǎn)屬性,是做好運(yùn)維的基礎(chǔ)。通過自動(dòng)化運(yùn)維平臺(tái)可以將資產(chǎn)集中管理、獲取系統(tǒng)信息、下發(fā)策略,可以讓我們很容易就獲取到系統(tǒng)信息,通過自動(dòng)化的手段對(duì)資產(chǎn)進(jìn)行操作;

降低運(yùn)營成本:類似某傳奇互聯(lián)網(wǎng)公司,一個(gè)工程師可以運(yùn)維整個(gè)數(shù)據(jù)中心的X86服務(wù)器(估計(jì)這個(gè)工程師不是泛泛之輩,至少是個(gè)高級(jí)SRE)。運(yùn)維團(tuán)隊(duì)除了要保證系統(tǒng)的正常運(yùn)行,還要確保不增加運(yùn)營成本。這就需要自動(dòng)化的手段來將日?,嵥榈氖虑闃?biāo)準(zhǔn)化、流程化、自動(dòng)化。從而降低人工參與度(成本),減少錯(cuò)誤發(fā)生率;

系統(tǒng)健康監(jiān)控:運(yùn)維監(jiān)控系統(tǒng)是自動(dòng)化運(yùn)維的眼睛,是不可或缺的一個(gè)功能,開源產(chǎn)品如open-falcon、Zabbix、Nagios等等。結(jié)合資產(chǎn)管理模塊,對(duì)系統(tǒng)健康狀況進(jìn)行持續(xù)監(jiān)控。通過自動(dòng)化運(yùn)維平臺(tái)既定功能或者定制腳本,進(jìn)行自動(dòng)化的故障消除,重大故障進(jìn)行告警等。

SaltStack基本概念及工作原理

SaltStack本身是一種開源的基礎(chǔ)架構(gòu)集中化管理平臺(tái),相比其它商業(yè)產(chǎn)品,其部署及配置稍顯雜。為了更好的部署和配置SaltStak,本章節(jié)將著重介紹它的基本概念、特性與工作原理。

SaltStack簡介與特性

SaltStack是一種基于C/S架構(gòu)的服務(wù)器基礎(chǔ)架構(gòu)集中化管理平臺(tái),管理端稱為Master,客戶端稱為Minion。SaltStack具備配置管理、遠(yuǎn)程執(zhí)行、監(jiān)控等功能,一般可以理解為是簡化版的Puppet和加強(qiáng)版的Func。

SaltStack本身是基于Python語言開發(fā)實(shí)現(xiàn),結(jié)合了輕量級(jí)的消息隊(duì)列軟件ZeroMQ與Python第三方模塊(Pyzmq、PyCrypto、Pyjinjia2、python-msgpack和PyYAML等)構(gòu)建。

通過部署SaltStack環(huán)境,運(yùn)維人員可以在成千上萬臺(tái)服務(wù)器上做到批量執(zhí)行命令,根據(jù)不同的業(yè)務(wù)特性進(jìn)行配置集中化管理、分發(fā)文件、采集系統(tǒng)數(shù)據(jù)及軟件包的安裝與管理等。

SaltStack具有以下特性,幫助企業(yè)IT更好的實(shí)現(xiàn)系統(tǒng)批量管理:

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

2.支持大部分的操作系統(tǒng),如Unix/Linux/Windows環(huán)境;

3.架構(gòu)上使用C/S管理模式,易于擴(kuò)展;

4.配置簡單、功能覆蓋廣;

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

6.支持API及自定義Python模塊,輕松實(shí)現(xiàn)功能擴(kuò)展;

SaltStack的工作原理

SaltStack采用C/S結(jié)構(gòu)來對(duì)云環(huán)境內(nèi)的服務(wù)器操作管理及配置管理。為了更好的理解它的工作方式及管理模型,本章將通過圖形方式對(duì)其原理進(jìn)行闡述。

SaltStack客戶端(Minion)在啟動(dòng)時(shí),會(huì)自動(dòng)生成一套密鑰,包含私鑰和公鑰。之后將公鑰發(fā)送給服務(wù)器端,服務(wù)器端驗(yàn)證并接受公鑰,以此來建立可靠且加密的通信連接。同時(shí)通過消息隊(duì)列ZeroMQ在客戶端與服務(wù)端之間建立消息發(fā)布連接。具體通信原理圖,如圖1所示,命令執(zhí)行如圖2所示:

圖1.SaltStack通信原理圖

專業(yè)術(shù)語說明:

Minion是SaltStack需要管理的客戶端安裝組件,會(huì)主動(dòng)去連接Master端,并從Master端得到資源狀態(tài)信息,同步資源管理信息。

Master作為控制中心運(yùn)行在主機(jī)服務(wù)器上,負(fù)責(zé)Salt命令運(yùn)行和資源狀態(tài)的管理。

ZeroMQ是一款開源的消息隊(duì)列軟件,用于在Minion端與Master端建立系統(tǒng)通信橋梁。

Daemon是運(yùn)行于每一個(gè)成員內(nèi)的守護(hù)進(jìn)程,承擔(dān)著發(fā)布消息及通信端口監(jiān)聽的功能。

圖2.SaltStack操作執(zhí)行原理圖

原理圖說明:

Minion是SaltStack需要管理的客戶端安裝組件,會(huì)主動(dòng)去連接Master端,并從Master端得到資源狀態(tài)信息,同步資源管理信息。

Master作為控制中心運(yùn)行在主機(jī)服務(wù)器上,負(fù)責(zé)Salt命令運(yùn)行和資源狀態(tài)的管理。

Master上執(zhí)行某條指令通過隊(duì)列下發(fā)到各個(gè)Minions去執(zhí)行,并返回結(jié)果。

本章使大家了解了什么是SaltStack以及它的通信及執(zhí)行原理,下一章節(jié)將主要介紹本次實(shí)例部署的架構(gòu)設(shè)計(jì)。

SaltStack的架構(gòu)

隨著為了讓大家更好的理解SaltStack在云平臺(tái)集中化管理方面的優(yōu)勢(shì),因此,根據(jù)項(xiàng)目的實(shí)際情況繪制了部署架構(gòu)圖,并在文中對(duì)架構(gòu)圖進(jìn)行了詳細(xì)說明。如圖3所示:

圖3.SaltStack部署架構(gòu)圖

說明:

SaltStack的所有被管理客戶端節(jié)點(diǎn)(如圖3所示DB和Web),都是通過密鑰進(jìn)行加密通信,使用端口為4506??蛻舳伺c服務(wù)器端的內(nèi)容傳輸,是通過消息隊(duì)列完成,使用端口為4505。Master可以發(fā)送任何指令讓Minion執(zhí)行,salt有很多可執(zhí)行模塊,比如說CMD模塊,在安裝minion的時(shí)候已經(jīng)自帶了,它們通常位于你的python庫中,locate salt|grep/usr/可以看到salt自帶的所有東西。

為了更好的理解架構(gòu)用意,以下將展示主要的命令發(fā)布過程:

1.SaltStack的Master與Minion之間通過ZeroMq進(jìn)行消息傳遞,使用了ZeroMq的發(fā)布訂閱模式,連接方式包括TCP和IPC。

2.Salt命令,將cmd.run ls命令從salt.client.LocalClient.cmd_cli發(fā)布到Master,獲取一個(gè)Jodid,根據(jù)jobid獲取命令執(zhí)行結(jié)果。

3.Master接收到命令后,將要執(zhí)行的命令發(fā)送給客戶端minion。

4.Minion從消息總線上接收到要處理的命令,交給minion._handle_aes處理。

5.Minion._handle_aes發(fā)起一個(gè)本地線程調(diào)用cmdmod執(zhí)行l(wèi)s命令。線程執(zhí)行完ls后,調(diào)用Minion._return_pub方法,將執(zhí)行結(jié)果通過消息總線返回給master。

6.Master接收到客戶端返回的結(jié)果,調(diào)用master.handle_aes方法將結(jié)果寫的文件中。

7.Salt.client.LocalClient.cmd_cli通過輪詢獲取Job執(zhí)行結(jié)果,將結(jié)果輸出到終端。

SaltStack安裝與配置

通對(duì)SaltStack有了一個(gè)初步的了解之后,您將在本章通過實(shí)際案例操作進(jìn)一步了解SaltStack。本章節(jié)一共分為三個(gè)部分,分別介紹安裝環(huán)境的說明,具體安裝及安裝后的SaltStack配置。

SaltStack的環(huán)境說明

由于受到硬件資源限制,測試環(huán)境將采用三臺(tái)服務(wù)器進(jìn)行部署,分別扮演不同的角色,詳細(xì)信息如表1所示。

表1.SaltStack環(huán)境說明

SaltStack的安裝

目前SaltStack支持很多平臺(tái)的部署,具體到每個(gè)平臺(tái)的安裝部署,可以參考官方文件。本實(shí)例中將主要介紹基于CentOS平臺(tái)的安裝部署。

依賴組件的安裝

由于SaltStack是開源軟件,其很多功能是依賴其它的軟件包來完成。所以我們?cè)诎惭bSaltStack之前需要先將以下表2中的依賴軟件包安裝到主機(jī)上,避免因?yàn)槿鄙僖蕾囮P(guān)系而產(chǎn)生錯(cuò)誤。

表2.依賴軟件包

為了方便依賴包的安裝,本章將采用YUM的方式進(jìn)行安裝。

首先下載并安裝epel源,執(zhí)行以下指令,將epel.repo存儲(chǔ)到/etc/yum.repos.d目錄下。wget–o/etc/yum.repos.d/epel.repohttp://mirrors.aliyun.com/repo/epel-6.repo,并通過Yum list命令來校驗(yàn)安裝源是否生效,如出現(xiàn)圖4所示,則表明Yum源已經(jīng)生效。

圖4.SaltStack安裝源

建立好安裝源及解決了軟件包依賴關(guān)系之后,下一步將介紹如何安裝Saltstack master主機(jī)。

Master角色的安裝

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

圖5.SaltStack master主機(jī)安裝

安裝完成后,輸入chkconfig salt-master on將master服務(wù)加入到開機(jī)啟動(dòng)項(xiàng),這樣每次系統(tǒng)啟動(dòng),都會(huì)自動(dòng)加載master服務(wù)。輸入service salt-master start啟動(dòng)master服務(wù)。之后通過netstat–antp查詢服務(wù)狀態(tài),結(jié)果如圖6所示。

圖6.SaltStack master服務(wù)查詢

依照本章介紹來看,master服務(wù)已經(jīng)被正確安裝并啟動(dòng),下一章將介紹如何安裝SaltStack-Minion到客戶端服務(wù)器。

Minion角色的安裝

SaltStack是一個(gè)C/S結(jié)構(gòu)的開源軟件,Master通過客戶端軟件Minion進(jìn)行指令的執(zhí)行與策略的配置。如圖7所示,通過yum install命令安裝Minion客戶端。

圖7.SaltStack Minion主機(jī)安裝

安裝完成后,輸入chkconfig salt-minion on,將minion服務(wù)加入到開機(jī)啟動(dòng)項(xiàng),這樣每次系統(tǒng)啟動(dòng),都會(huì)自動(dòng)加載minion服務(wù)。輸入service salt-minion start,啟動(dòng)minion服務(wù)。之后通過netstat–antp查詢服務(wù)狀態(tài),結(jié)果如圖8所示。

圖8.SaltStack Minion服務(wù)查詢

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

SaltStack的配置

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

Minion端配置

SaltStack-Minion是SaltStack安裝在客戶端的代理,負(fù)責(zé)接收服務(wù)器端發(fā)布的指令并執(zhí)行,同時(shí)負(fù)責(zé)客戶端的狀態(tài)監(jiān)控??蛻舳艘氡籱aster管理,需要修改其配置文件,將服務(wù)器指向到Master的地址。其配置文件位于/etc/salt/目錄下,名為minion,通過vi工具修改,如圖9所示。

圖9.SaltStack Minion配置

配置完成后,保存并通過service salt-minon restart命令重啟minion服務(wù)。本次測試案例,并不需要其它高級(jí)功能的演示,所以客戶端到此配置結(jié)束,更多功能的配置,請(qǐng)參考SaltStack官方手冊(cè)。

Master端配置

SaltStack-Master是SaltStack組件的核心服務(wù),負(fù)責(zé)發(fā)布指令及配置文件的分發(fā)與管理,及客戶端的管理功能。Master要想正常提供服務(wù),需要接受客戶端的證書認(rèn)證請(qǐng)求。我們之前已經(jīng)介紹過,SaltStack是通過SSL證書認(rèn)證的方式進(jìn)行通信的。如圖10所示操作,輸入salt-key–l來查詢客戶端證書狀態(tài),并如圖11所示操作,輸入salt-key–A接受客戶端認(rèn)證。

圖10.SaltStack證書查詢

從圖中可以看到客戶端被發(fā)現(xiàn),但是處于未被接受狀態(tài),需要管理員執(zhí)行圖11所示指令,進(jìn)行接受。

圖11.SaltStack接受證書

至此我們已經(jīng)完成SaltStack的全部配置,在下一章中,將通過幾個(gè)測試場景來說明SaltStack在云管理平臺(tái)的重要功能

SaltStack測試

通過本章節(jié)中的兩個(gè)測試案例,可以驗(yàn)證SaltStack是否運(yùn)行正常,是否可以完成預(yù)定的功能。我們可以通過salt'*'test.ping來測試客戶端是否在線,并被master管理,如圖12所示,如果返回True,則說明客戶端已經(jīng)被master管理,并處于在線狀態(tài)。

圖12.SaltStack接受證書

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

批量執(zhí)行命令

在日常運(yùn)維中,同時(shí)對(duì)多臺(tái)服務(wù)器進(jìn)行操作,是一個(gè)很平常的需求。比如批量執(zhí)行ping操作,驗(yàn)證服務(wù)器是否在線,批量執(zhí)行查詢命令,看服務(wù)器的負(fù)載及利用率。如圖13所示的指令為批量查詢服務(wù)器操作系統(tǒng)的版本。

圖13.SaltStack查詢服務(wù)器的IP信息

*代表對(duì)所有的被管理客戶端進(jìn)行操作,cmd.run是命令調(diào)用模塊,ifconfig是具體的執(zhí)行命令。

批量安裝軟件

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

圖14.SaltStack安裝lrzsz

如上圖所示,lrzsz軟件被順利的安裝到了客戶端服務(wù)器。通過以上兩個(gè)測試,可以驗(yàn)證SaltStack可以正常的為云平臺(tái)提供集中化的管理與配置功能。

結(jié)束語

通過在CentOS 7.1上實(shí)現(xiàn)自動(dòng)化運(yùn)維工具SaltStack的部署及功能演示,可以滿足管理員對(duì)云計(jì)算平臺(tái)中服務(wù)器及配置的集中化管理,提高了運(yùn)維團(tuán)隊(duì)的運(yùn)維效率和準(zhǔn)確性,降低了管理成本。同時(shí)通過本文,我們也對(duì)開源工具有了更多的了解和學(xué)習(xí)。為今后應(yīng)用更多的開源工具管理云平臺(tái)提供了夯實(shí)的技術(shù)基礎(chǔ)。

THEEND

最新評(píng)論(評(píng)論僅代表用戶觀點(diǎn))

更多
暫無評(píng)論