自動化運維工具介紹

運維目標有三個階段,第一是追求穩定性,第二是追求標準化,第三是追求自動化。對於第三階段來講,什麼是運維自動化呢?簡單地講,運維自動化就是將平常重複性工做按照事先設定好的規則,在必定時間範圍內自動化運行,而不須要人工參與。接下來簡單介紹運維自動化工具,要了解運維平時用到的自動化工具,就須要瞭解運維人員的平常工做有哪些。web


1、運維的平常工做ubuntu


運維的平常工做能夠總結爲如下四個部分,分別是:安全

(1) 系統安裝(OS Provision)服務器

(2) 應用程序配置(Configuration)網絡

(3) 命令執行與控制(Command and Control)app

(4) 程序發佈(Deployment)框架

接下來一一拆解。less


1.1 系統安裝(OS Provision)(批量系統部署)運維


運維的工做是運行和維護,那首先就須要有服務器主機。當一批服務器採購回來時,首先要作的是爲這批主機安裝操做系統。若是隻是爲一兩臺主機安裝系統,那還可使用手動的方式安裝,但若是是安裝一批主機的話那效率就過低了,所以須要有便於同時安裝多臺操做系統的安裝工具,也就是支持批量部署系統操做。批量系統部署有兩種方式,一種是在裸機(bare metal)上使用安裝工具部署系統,另外一種是在虛擬機(virtual machine)經過虛擬機實例安裝系統,如下分別介紹這兩種部署方式的安裝工具。webapp

① 在裸機上安裝(bare metal)

在裸機上安裝時使用的安裝工具經常使用的有 pxe 和 cobbler。

安裝工具 介紹
pxe 預執行環境/預引導環境,pxe 技術能在主機未安裝操做系統時,藉助於網卡自身的 ROM 中的代碼功能扮演成 DHCP 服務器的客戶端並本身經過網絡獲取一個 IP 地址;還能夠扮演成文件服務器的客戶端來獲取 bootloader 程序文件。pxe 的缺陷是隻能預引導一種操做系統,例如不能同時預引導 CentOS 6/CentOS 7/ubuntu/... 中的其中兩種操做系統。
cobbler cobbler 是 pxe 的二次封裝,cobbler 可以整合多個預引導環境(操做系統環境)到一個鏡面下。使用 cobbler 工具時須要硬件設備支持 pxe 技術。


②在虛擬機上安裝(virtual machine)

在虛擬機上安裝就更加方便,須要安裝系統時只須要建立虛擬機實例,而後下載一個模板文件就能夠安裝完操做系統了,在這個模板文件包含了操做系統的配置。


1.2 應用程序部署(Configuration)(批量程序部署)


服務器是用來提供服務的,因此爲服務器裝完了操做系統後,首先要作的是的部署應用程序並提供服務,這一步驟稱爲應用程序部署(Configuration),包括了應用程序的安裝、配置和啓動。在這一步驟中經常使用的運維工具備 Puppet、Saltstack、Chef、Cfengine、Ansible 等。其中 Puppet 是由 Ruby 研發,SaltStack、Ansible 是由 Python 研發。


其中,Puppet 和 Saltstack 更適用於管理大規模主機的場景,最好是管理的主機數量超過 100 臺,不然難以發揮出 Puppet 和 Saltstack 的優點,並且可能使用成本大於收益。對於管理小規模主機的場景,則簡單輕量級的 Ansible 更適用。另外,Puppet 學習曲線較陡峭,而 Ansible 入門很是簡單。


這一部分的運維工具都支持冪等性,即前一次命令的執行不會影響後一次命令的執行。


1.3 命令執行與控制(Command and Contorl)(批量執行命令)


在平時的運維工做中,須要手動完成一些管理和控制操做時,可能須要在一批服務器的每臺服務器上都執行一批命令。所以爲了簡化運維工做,就有了一些運維工具能夠幫助同時控制多臺主機,並在每臺主機上執行運維人員指定的一批命令操做。在這一部分中經常使用的運維工具備 Fabric、Func 和 Ansible 等。其中 Fabric 是由 Python 開發的輕量級工具。相比於 Fabric,Func 是一個重量級的運維工具。


1.4 程序發佈(Deployment)


程序發佈,就是在主機上用新版本的程序替換舊版本的程序,簡而言之是給服務程序換版本。在程序發佈這一環節上,因爲各個公司的應用業務不一樣,致使程序的發佈流程、發佈模式和發佈過程當中須要注意的細節是不同的。因此程序發佈幾乎沒有一個通用的工具來實現,發佈工具基本都是各個公司自行研發的。


1.4.1 程序發佈的方式


程序發佈的方式能夠總結爲如下三種。

(1) 手動發佈 ==> 人工發佈

(2) 經過腳本發佈 ==> 使用腳本也能夠發佈程序,但使用腳本時有如下兩個缺陷。

① 程序環境發生變化時,腳本可能也須要隨之靈活修改。若是腳本沒有修改完善,可能會出現問題。

② 腳本自身可以提供的功能比較有限。例如在跨主機進行通訊時,須要藉助於外部服務程序並基於 SSH 協議進行通訊,而腳本自身很難開發出基於網絡通訊的組件。

(3) 經過發佈程序發佈 ==> 又稱運維程序,是公司內部專門研發出來的運維框架。


1.4.2 程序發佈的三個要求


合格的腳本發佈的整個流程須要知足三個要求,這三個要求能夠類比於在飛機上換髮動機的場景。這三個要求以下。

(1) 不能影響用戶體驗。

(2) 系統不能停機。

(3) 不能致使系統故障或形成系統徹底不可用。


1.4.3 灰度模型


程序發佈過程當中須要基於灰度模型發佈。灰度模型就是讓一批主機下線,其它主機仍然向外提供服務,當這一批下線的主機更換程序版本完畢後,若是沒有問題就開始上線提供服務,接着換另外一批主機下線,以此類推。灰度模型有兩種方式:

(1) 基於主機 ==> 例如先讓 20% 的主機下線更換程序,上線後再換另外一批 20% 的主機,以此類推。

(2) 基於用戶 ==> 例如部分提供會員服務的網站中,能夠在保障會員用戶的用戶體驗、不保障免費用戶體驗的前提下進行程序發佈。


1.4.4 程序發佈路徑


在程序發佈過程當中,能夠爲程序目錄建立一個連接目錄,這樣便於管理程序版本。例如,在程序發佈前,程序版本是 tuangou-1.1,而程序目錄 /webapps/tuangou-1.1 的連接目錄是 /webapps/tuangou。在執行程序版本更換時(假設更換爲 tuangou-1.2),只須要將連接目錄的連接路徑修改成 /webapps/tuangou-1.2 便可。


建立連接目錄的好處,是能夠方便更換程序版本,而且在高版本程序出現bug時,能夠快速「回滾」,把對用戶的影響降到最低。


1.4.5 程序發佈流程


程序發佈流程能夠總結以下。

在調度器上下線一批主機(標記爲維護模式) --> 關閉服務 --> 部署新版本 --> 啓動服務 --> 在調度器上啓用這一批主機


以上在運維平常中提到的運維工具均可以稱爲自動化運維工具,而自動化運維工具備 agent 和 agentless 類,接下來分別介紹。



2、運維工具的分類


運維工具根據在被管理端上是否裝有 agent 程序,將運維工具分爲 agent 和 agentless 兩種類別。什麼是 agent 程序呢?agent 的中文爲「代理」之意,對於擁有 agent 程序的運維工具而言,當管理端(管理節點)經過網絡管理被管理的主機時,被管理端主機上須要運行一個代理程序(agent 程序),並以管理員身份運行。當管理端向被管理端發送一個或多個要執行的命令時,被管理端的代理程序(agent 程序)負責代替管理端執行命令(由於 agent 程序是以管理員身份執行,因此以管理員身份代爲執行其它命令)。這就是 agent 程序。


因此,運維工具的分類可總結以下。

① agent:在被管理端上裝有管理程序(在管理端上運行)的代理程序(agent 程序,以管理員身份運行),在管理端和被管理端之間基於安全的認證進行通訊。常見的擁有 agent 程序的運維工具備 Puppet、Func 等。

② agentless:在被管理端上無需任何配置,由管理端配置好後便可使用。管理端和被管理端之間一般基於 SSH 協議進行通訊(基於 OpenSSH),也就是二者之間的底層通訊依賴於系統軟件。雖然基於 SSH 協議進行通訊較爲簡單,但容易成爲安全漏洞(一旦管理端被劫持,則被管理的主機的信息也會遭到泄露)。

相關文章
相關標籤/搜索