當前,部署自動化運維已經成爲安全、高效完成工做的必要技能,主要有Puppet、SaltStack、ansible,本篇博文將重點研究自動化運維工具Ansible安裝及配置文件解析。python
Ansible基於python開發,集合了衆多優秀運維工具的優勢,實現了批量系統配置、批量程序部署、批量運行命令等功能。默認經過SSH協議進行遠程控制,無需客戶端代理軟件。mysql
ansible是基於模塊工做的,自己沒有批量部署的能力。真正具備批量部署的是ansible所運行的模塊,ansible只是提供一種框架。主要包括:
web
(1)部署簡單,只需在主控端部署 Ansible 環境,被控端無需作任何操做。
(2)默認使用 SSH協議對設備進行管理。
(3)主從集中化管理。
(4)配置簡單、功能強大、擴展性強。
(5)支持 API 及自定義模塊,可經過 Python 輕鬆擴展。
(6)經過 Playbooks 來定製強大的配置、狀態管理。
(7)對雲計算平臺、大數據都有很好的支持。
(8)提供一個功能強大、操做性強的 Web 管理界面和 REST API 接口 ---- AWX 平臺。sql
Ansible 系統由控制主機對被管節點的操做方式可分爲兩類,即adhoc和playbook:shell
(1)加載本身的配置文件,默認/etc/ansible/ansible.cfg;
(2)查找對應的主機配置文件,找到要執行的主機或者組;
(3)加載本身對應的模塊文件,如 command;
(4)經過ansible將模塊或命令生成對應的臨時py文件(python腳本), 並將該文件傳輸至遠程服務器;
(5)對應執行用戶的家目錄的.ansible/tmp/XXX/XXX.PY文件;
給文件 +x 執行權限;
(6)執行並返回結果;
(7)刪除臨時py文件,sleep 0退出;數據庫
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 #角色
三、配置主機清單服務器
vim /etc/ansible/hosts 【webserver】 192.168.37.130 【mysql】 192.168.37.131
四、配置密鑰對進行驗證,將公鑰推給被管理主機
ssh-keygen -t rsa
ssh-copy-id root@192.168.37.130
ssh-copy-id root@192.168.37.131
五、設置SSH免密碼登陸
ssh-agent bash
ssh-add
[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
#[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