Ansible自動化運維安裝

當前,部署自動化運維已經成爲安全、高效完成工做的必要技能,主要有Puppet、SaltStack、ansible,本篇博文將重點研究自動化運維工具Ansible安裝及配置文件解析。python

1、Ansible簡介

一、什麼是ansible?

Ansible基於python開發,集合了衆多優秀運維工具的優勢,實現了批量系統配置、批量程序部署、批量運行命令等功能。默認經過SSH協議進行遠程控制,無需客戶端代理軟件。mysql

二、ansible核心組件

ansible是基於模塊工做的,自己沒有批量部署的能力。真正具備批量部署的是ansible所運行的模塊,ansible只是提供一種框架。主要包括:
Ansible自動化運維安裝web

  • ansible core 核心引擎;
  • host inventory(主機清單):定義ansible所管理主機,支持自定義動態主機清單和其餘配置文件位置。
  • connection plugins(鏈接插件):負責被管理主機實現通訊。
  • playbooks(劇本):集中定義ansible任務的配置文件。
  • core modules(核心模塊):ansible自帶模塊,分發資源到被管理主機。
  • custom modules(自定義模塊):完成功能模塊的補充。

    三、ansible特色

    (1)部署簡單,只需在主控端部署 Ansible 環境,被控端無需作任何操做。
    (2)默認使用 SSH協議對設備進行管理。
    (3)主從集中化管理。
    (4)配置簡單、功能強大、擴展性強。
    (5)支持 API 及自定義模塊,可經過 Python 輕鬆擴展。
    (6)經過 Playbooks 來定製強大的配置、狀態管理。
    (7)對雲計算平臺、大數據都有很好的支持。
    (8)提供一個功能強大、操做性強的 Web 管理界面和 REST API 接口 ---- AWX 平臺。sql

    四、ansible任務執行

    Ansible 系統由控制主機對被管節點的操做方式可分爲兩類,即adhoc和playbook:shell

  • ad-hoc模式(點對點模式)
      使用單個模塊,支持批量執行單條命令。ad-hoc 命令是一種能夠快速輸入的命令,並且不須要保存起來的命令。就至關於bash中的一句話shell。
  • playbook模式(劇本模式)
      是Ansible主要管理方式,也是Ansible功能強大的關鍵所在。playbook經過多個task集合完成一類功能,如Web服務的安裝部署、數據庫服務器的批量備份等。能夠簡單地把playbook理解爲經過組合多條ad-hoc操做的配置文件。

    五、ansible命令執行過程

    (1)加載本身的配置文件,默認/etc/ansible/ansible.cfg;
    (2)查找對應的主機配置文件,找到要執行的主機或者組;
    (3)加載本身對應的模塊文件,如 command;
    (4)經過ansible將模塊或命令生成對應的臨時py文件(python腳本), 並將該文件傳輸至遠程服務器;
    (5)對應執行用戶的家目錄的.ansible/tmp/XXX/XXX.PY文件;
    給文件 +x 執行權限;
    (6)執行並返回結果;
    (7)刪除臨時py文件,sleep 0退出;數據庫

2、部署Ansible服務

案例說明:

Ansible自動化運維由控制主機與被管理主機組成,因爲基於SSH通訊,因此控制主機只需安裝ansible,被管理主機也不需安裝和運行任何代理程序。

案例環境:

角色 操做系統 IP地址 組名
控制主機 Centos7 192.168.37.128
被管理主機 Centos7 192.168.37.130 webserver
被管理主機 Centos7 192.168.37.131 mysql

部署安裝

一、在控制主機上安裝ansiblevim

yum install -y epel-release #安裝epel擴展源
yum install -y ansible -y #安裝ansible安全

二、安裝後查看ansible配置文件bash

ansible --version          #查看版本
cat /etc/ansible
    ansible.cfg                #主配置文件
    hosts                         #主倉庫、用於存儲須要管理的遠程主機
    roles                          #角色

Ansible自動化運維安裝

三、配置主機清單服務器

vim  /etc/ansible/hosts    
【webserver】
192.168.37.130
【mysql】
192.168.37.131

Ansible自動化運維安裝
四、配置密鑰對進行驗證,將公鑰推給被管理主機

ssh-keygen -t rsa
ssh-copy-id root@192.168.37.130
ssh-copy-id root@192.168.37.131

Ansible自動化運維安裝
Ansible自動化運維安裝
五、設置SSH免密碼登陸

ssh-agent bash
ssh-add

Ansible自動化運維安裝
Ansible自動化運維安裝

3、Ansible配置文件詳解

主配置文件ansible.cfg

[defaults]

#some basic default values...
inventory      = /etc/ansible/hosts                                      # 主機清單inventory文件的位置 
library        = /usr/share/my_modules/                             #指向存放ansible模塊的目錄
module_utils   = /usr/share/my_module_utils/                      
remote_tmp     = ~/.ansible/tmp                                     #Ansible 經過遠程傳輸模塊到遠程主機,而後遠程執行
local_tmp      = ~/.ansible/tmp
plugin_filters_cfg = /etc/ansible/plugin_filters.yml       #過濾器插件
forks          = 5                                                                  #默認ansible最多有5個進程同時工做
poll_interval  = 15                                                           #多少時間回查一下任務狀態
sudo_user      = root                                                        # 設置默認執行命令的用戶
ask_sudo_pass = True                                                  # 用來控制Ansible playbook 在執行sudo以前是否詢問sudo密碼
ask_pass      = True                                                        #控制Ansible playbook 是否會自動默認彈出密碼
transport      = smart                                                        #通訊機制.默認 值爲’smart’
remote_port    = 22                                                         # 指定鏈接被管節點的管理端口,默認是22
module_lang    = C                                                         #模塊和系統之間通訊的計算機語言,默認是C語言
module_set_locale = False

主機清單hosts

#[webservers]
#alpha.example.org
#beta.example.org
#192.168.1.100
#192.168.1.110

#[dbservers]
#db01.intranet.mydomain.net
#db02.intranet.mydomain.net
#10.25.1.56
#10.25.1.57
  • 方括號[]中是組名,用於對系統進行分類,便於對不一樣系統進行個別的管理。
  • 一個系統能夠屬於不一樣的組,好比一臺服務器能夠同時屬於 webserver組 和 dbserver組.這時屬於兩個組的變量均可覺得這臺主機所用。
  • 若是有主機的SSH端口不是標準的22端口,可在主機名以後加上端口號,用冒號分隔。SSH 配置文件中列出的端口號不會在 paramiko 鏈接中使用,會在 openssh 鏈接中使用。
相關文章
相關標籤/搜索