原文鏈接:http://blog.csdn.net/xyang81/article/details/51568227
Ansible是一個簡單高效的自動化運維管理工具,用Python開發,能大批量管理N多臺機器,可以併發的在多臺機器上部署應用、安裝軟件、執行命令、配置和編排任務。
一、Ansible工作機制
從圖中可以看出ansible分爲以下幾個部份:
1> Control Node:控制機器
2> Inventory:主機清單,配置管理主機列表
3> Playbooks:劇本、任務編排。根據規則定義多個任務,模塊組織結構清晰,由ansible自動執行。
4> Modules(Core | Custom):模塊,用於執行某個具體的任務
5> connection plugin(連接插件):Ansible通過不同的協議連接到遠程主機上,執行指定的命令。默認採用ssh協議連接遠程主機。
二、Ansible執行流程
簡單理解就是Ansible在運行時,首先讀取ansible.cfg中的配置,根據規則獲取Inventory中的管理主機列表,並行的在這些主機中執行配置的任務,最後等待執行返回的結果。
三、安裝Ansible
一臺控制主機:192.168.0.202
三臺管理主機:
- 192.168.0.200
- 192.168.0.201
- 192.168.0.203
安裝要求:
- 控制服務器:需要安裝 Python2.6/2.7
- 管理服務器:需要安裝 Python2.4 以上版本,若低於 Python2.5 需要安裝 pythonsimplejson; 若啓用了 selinux,則需要安裝 libselinux-python。
本次安裝基於CentOS7系統環境、Python2.7.5、root用戶。
3.1、yum安裝(推薦)
yum install epel-release
yum install ansible
3.2、pip安裝
pip install ansible
注:pip方式安裝不會在/etc/ansible目錄下生成默認的相關配置文件
四、配置
控制主機:用於控制其它機器的主機
管理主機:被控制主機管理的主機
4.1、配置管理主機
vim /etc/ansible/hosts
在hosts文件中添加管理主機的IP地址列表:
4.2、配置控制主機SSH密鑰
4.2.1、在控制主機中生成ssh密鑰對
ssh-keygen -t rsa
一路回車即可在$HOME/.ssh目錄下生成id_rsa和id_rsa.put私鑰和公鑰兩個文件。
注: 如果在生成密鑰的時候設置了密碼,ansible每次執行命令的時候,都會提示輸入密鑰密碼,可通過下面的命令記住密碼。
ssh-agent bsh
ssh-add ~/.ssh/id_rsa
4.2.2、將公鑰拷貝到管理主機中.ssh/authorized_keys文件中,實現免密碼登錄遠程管理主機
ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.0.200
ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.0.201
ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.0.203
注:ssh-copy-id命令會自動將id_rsa.pub文件的內容追加到遠程主機root用戶下.ssh/authorized_keys文件中。
4.2.3、ansible配置
vim /etc/ansible/ansible.cfg
1> 禁用每次執行ansbile命令檢查ssh key host
host_key_checking = False
2> 開啓日誌記錄
log_path = /var/log/ansible.log
3> ansible連接加速配置
[accelerate]
#accelerate_port = 5099
accelerate_port = 10000
#accelerate_timeout = 30
#accelerate_connect_timeout = 5.0
# If set to yes, accelerate_multi_key will allow multiple
# private keys to be uploaded to it, though each user must
# have access to the system via SSH to add a new key. The default
# is "no".
accelerate_multi_key = yes
五、測試
最後測試下在三臺管理機器批量執行一個ping命令
ansible all -m ping
結果如下:
從上圖可以看出,在每臺管理機器上都成功執行了ping命令。
一些Ansible深入功能的學習資料:
http://blog.xiaorui.cc/category/ansible/
http://lixcto.blog.51cto.com/4834175/d-4
https://github.com/ansible/ansible-examples
http://rfyiamcool.blog.51cto.com/1030776/d-51
http://dl528888.blog.51cto.com/2382721/d-4/p-1
http://edu.51cto.com/course/course_id-2220.html
http://edu.51cto.com/course/course_id-2032.html