古詩詞大全網 - 成語經典 - 程序員應知應會之自動化運維那些事兒

程序員應知應會之自動化運維那些事兒

對於壹個開發人員來講,可能運維並不是自己的職責所在。但是作為壹名開發人員,卻不能不了解自動化運維的整個流程。因為對於壹個信息系統而言,開發和運維本質是壹體的,尤其對於壹些小公司來講,可能運維人員本身就是開發人員抽空兼任的。

而自動化運維,本質上是介於開發和運維之間的,是運維和開發的交集,甚至很多時候都要寫不少代碼。因此,任何壹個開發人員,都需要有自動化運維的相關知識。

壹個了解好的開發人員,即使自己不做運維相關的工作,也能夠知道自己在將項目交付給運維人員的時候,哪些東西是重要的,那些是必須配置的等等。然而在實際工作中,往往開發人員會給運維人員留下壹些坑,壹些只有他自己知道,而運維人員不知道的東西。導致運維人員自己試了很多次發現不行的時候,找到開發人員,開發人員研究了壹下才會告訴他,在某某環境中必須用哪個端口之類的。這樣不僅白白浪費了運維人員的時間,也增加了很多溝通的工作量。

反過來也是如此,壹些現場的問題如果運維人員不能現場給出問題的定位。對於開發人員來講是非常難以復現的。比如之前有某家企業,運維人員在客戶現場發現問題。費了很大力氣從客氣的內網裏面把日誌導出來,發給開發人員,結果開發人員仔細研究了日誌之後,發現是網不通的問題。開發人員顯然是不可能知道為啥網不通的,搞不好是壓根沒連網線。

所以今天我們來聊壹聊,對於壹個程序員來講,需要了解的自動化運維的那些事。

壹、自動化運維的概念

隨著信息時代的持續發展,初期的幾臺服務器已經發展成為了龐大的數據中心,單靠人工已經無法滿足在技術、業務、管理等方面的要求。壹個運維人員手工配置幾臺服務器還可能。配置幾百上千臺服務器那就累死了,還容易出錯。那麽就需要對運維工作進行標準化、自動化、架構優化、過程優化等。從面降低運維服務成本。其中,自動化最開始作為代替人工操作為出發點的訴求被廣泛研究和應用。

所謂自 動化運維,即在最少的人工幹預下,結合運用腳本與第三方工具,保證業務系統7*24小時高效穩定運行 。這是所有業務系統運維的終極目標。

按照運維的發展成熟度來看, 運維大致可分為三個階段

(1)依靠純手工,重復地進行軟件的部署與運維;

(2)通過編寫腳本,方便地進行軟件的部署與運維;

(3)借助第三方工具,高效地進行軟件的部署與運維;

二、自動化運維需要解決的問題

自動化運維通常來講,需要解決以下幾個問題: 自動部署配置、風險事前預警、故障事中解決、和故障事後管理

三、自動化運維的常用工具

自動化運維常用的工具包括以下幾種:

1、Ansible

ansible是基於Python開發的自動化運維工具,集合了眾多運維工具(puppet、cfengine、chef、func、fabric)的優點,實現了批量系統配置、批量程序部署、批量運行命令等功能。

ansible具有如下壹些特性:

(1)模塊化:調用特定的模塊,完成特殊的任務。

(2)Paramiko(python對ssh的實現),PyYaml,jinja2(模塊語言)三個關鍵模塊。

(3)支持自定義模塊,可使用任何編程語言寫模塊。

(4)基於python語言實現。

(5)部署簡單,基於python和SSH(默認已安裝),agentless,無需代理不依賴KPI(無需SSL)。

(6)安全,基於OpenSSH

(7)冪等性:壹個任務執行壹次和執行n遍效果壹樣,不因重復執行帶來意外情況。

(8)支持playbook編排任務,YAML格式,編排任務,支持豐富的數據結構。

(9)較強大的多層解決方案role。

2、Chef

Chef是壹個功能強大的自動化工具,可以部署,修復和更新以及管理服務器和應用程序到任何環境。

Chef 主要分為三個部分 Chef Server、Workstation 以及 Chef Client。用戶在 Workstation 上編寫 Cookbook。然後,通過 knife 命令上傳到 Chef Server。最後,在 Chef Client 上面實施安裝和部署工作。所以,對於 Cookbook 地編寫在整個自動化部署中起到了重要的作用。

Chef Server 包含所有配置數據,並存儲描述Chef-Client中每個Nodes的Recipe,Cookbook和元數據。配置詳細信息通過Chef-Client提供給Nodes。所做的任何更改都必須通過Chef Server進行部署。在推送更改之前,它通過使用授權密鑰來驗證Nodes和Workstations是否與服務器配對,然後允許Workstations和Nodes之間進行通信。

Workstations 用於與Chef-server進行交互,還用於與Chef-nodes進行交互。它還用於創建Cookbook。Workstations是所有交互發生的地方,在這裏創建,測試和部署Cookbook,並在Workstations中測試代碼。

Chef命令行工具 是創建,測試和部署Cookbook的地方,並通過此策略將其上載到Chef Server。

Knife 用於與ChefNodes進行交互。

Test Kitchen 用於驗證Chef代碼

Chef-Repo 是壹個通過Chef命令行工具在其中創建,測試和維護Cookbook的存儲庫。

Nodes 由Chef管理,每個Nodes通過在其上安裝Chef-Client進行配置。 ChefNodes 是壹臺機器,例如物理雲,雲主機等。

Chef-Client 負責註冊和認證Nodes,構建Nodes對象以及配置Nodes。Chef-Client在每個Nodes上本地運行以配置該Nodes。

Cookbook 是Chef 框架的重要基礎功能之壹。在 Chef Server 對目標機器做安裝部署的時候,是通過 Runlist。而 Runlist 裏面又包含了壹個壹個具體的 Cookbook,所以,最終對壹個目標機器的部署任務就落到了 Cookbook 上。而對於 Cookbook 來說,其中包含了多個組件,我們可以將 Cookbook 簡單地理解成壹個容器或者可以理解為壹個包,裏面包含了 recipes、files、templates、libraries、metadata 等信息。這些信息用於配置我們的目標機器。

3、Puppet

puppet是壹種Linux、Unix平臺的集中配置管理系統,所謂配置管理系統,就是管理其裏面諸如文件、用戶、進程、軟件包等資源。它可以運行在壹臺服務器端,每個客戶端通過SSL證書連接到服務端,得到本機器的配置列表,然後根據列表來完成配置工作,所以如果硬件性能比較高,維護管理上千上萬臺機器是非常輕松的,前提是客戶端的配置、服務器路徑、軟件需要保持壹致。

客戶端Puppet會調用本地facter,facter探測出該主機的常用變量,例如主機名、內存大小、IP地址等。然後Puppetd把這些信息發送到Puppet服務端;

Puppet服務端檢測到客戶端的主機名,然後會檢測manifest中對應的node配置,並對這段內容進行解析,facter發送過來的信息可以作為變量進行處理;

Puppet服務器匹配Puppet客戶端相關聯的代碼才能進行解析,其他的代碼不解析,解析分為幾個過程,首先是語法檢查,然後會生成壹個中間的偽代碼,之後再把偽代碼發給Puppet客戶端;

Puppet客戶端接收到偽代碼之後就會執行,執行完後會將執行的結果發送給Puppet服務器;

Puppet服務端再把客戶端的執行結果寫入日誌。

4、Saltstack

SaltStack是基於python開發的壹套C/S自動化運維工具。部署輕松,擴展性好,很容易管理上萬臺服務器,速度夠快。與服務器之間的交流,以毫秒為單位。SaltStack提供了壹個動態基礎設施通信總線用於編排,遠程執行、配置管理等等。它的底層使用ZeroMQ消息隊列pub/sub方式通信,使用SSL證書簽發的方式進行認證管理,傳輸采用AES加密。

在saltstack架構中服務器端叫Master,客戶端叫Minion。

在Master和Minion端都是以守護進程的模式運行,壹直監聽配置文件裏面定義的ret_port(接受minion請求)和publish_port(發布消息)的端口。當Minion運行時會自動連接到配置文件裏面定義的Master地址ret_port端口進行連接認證。

saltstack除了傳統的C/S架構外,其實還有壹種叫做masterless的架構,其不需要單獨安裝壹臺 master 服務器,只需要在每臺機器上安裝 Minion端,然後采用本機只負責對本機的配置管理機制服務的模式。

saltstack提供如下壹些功能:

(1)遠程執行:(批量執行命令)在master上執行命令時,會在所有的minion上執行。

(2)配置管理/狀態管理 :(描述想到達到的狀態,saltstack就會去執行)

(3)雲管理(cloud):用於管理雲主機

(4)事件驅動:被動執行,當達到某個值會自動觸發

這四種自動化運維工具的比較如下,現在主流的基本上ansible和saltstack用的多壹些: