Linux運維之Ansible自動化運維管理工具
原文鏈接:http://blog.csdn.net/xyang81/article/details/51568227
Ansible簡介:Ansible是一個簡單高效的自動化運維管理工具,用Python開發,能大批量管理N多臺機器,可以並發的在多臺機器上部署應用、安裝軟件、執行命令、配置和編排任務。後面會提到批量安裝zabbix_agenet客戶端
一、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
備註:如果被管理主機有外網IP地址,控制主機可以是自己的虛擬機
安裝要求:
centos6版本以上以及能使用python命令和pip命令
備註:centos6系統自動python2.6 。centos7系統自動python2.7。pip命令是基於python安裝python模塊的命令
四、安裝ansiable
1、安裝方法一,yum安裝(推薦)
yum install epel-release -y
yum install ansible -y
2、安裝方法二,安裝python下的ansible模塊
pip install ansible
四、配置控制主機管理服務器
1)vim /etc/ansible/hosts 添加被管理的機器
192.168.0.200
192.168.40.70:88 ansible_ssh_user=root ansible_ssh_pass=1234567899
server ansible_ssh_host=192.168.40.20 ansible_ssh_pass="1234567899" ansible_ssh_port=8822
備註。這幾種寫法都行。默認端口為22。默認用戶為root。server為主機名。推薦後面2種,將公鑰拷貝到管理主機中時,可以免密碼
2)在控制主機中生成ssh密鑰對
ssh-keygen -t rsa
一直回車,即在$HOME/.ssh目錄下生成id_rsa和id_rsa.put私鑰和公鑰兩個文件
備註:為了安全也可在生成密鑰的時候設置密碼,ansible每次執行命令的時候,都會提示輸入密鑰密碼,可通過下面的命令記住密碼。
ssh-agent bsh
ssh-add ~/.ssh/id_rsa
3) 將公鑰拷貝到管理主機中.ssh/authorized_keys文件中,實現免密碼登錄遠程管理主機
ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.0.200 # 默認端口22
ssh-copy-id -i ~/.ssh/id_rsa.pub "-p 8822 [email protected]" # 修改了特殊端口
如果在/etc/ansible/hosts中的主機有用戶名,端口,密碼。這裏後面不需要再次輸入密碼
註:ssh-copy-id命令會自動將id_rsa.pub文件的內容追加到遠程主機root用戶下.ssh/authorized_keys文件中
4)調整ansible.cfg參數,優化
vim /etc/ansible/ansible.cfg
1、禁用每次執行ansible命令檢查 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 命令
說明,每臺機器都成功執行了ping 命令
6、批量安裝zabbix_agent客戶端
vim /root/tools/zabbix.sh
#!/bin/sh # yum 安裝,# 號為註釋 # 註意需要關閉selinux # sed -i "s/SELINUX=enforcing/SELINUX=disabled/" /etc/selinux/config # setenforce 0 # 僅適用於centos6版本,並且zabbix為第一次安裝 rpm -ivh http://repo.zabbix.com/zabbix/3.2/rhel/6/x86_64/zabbix-release-3.2-1.el6.noarch.rpm yum install zabbix-sender zabbix-agent zabbix -y cp /etc/zabbix/zabbix_agentd.conf /etc/zabbix/zabbix_agentd.conf_ori.bak # 192.168.40.21 位zabbix服務端的監控地址 sed -i "s/Server=127.0.0.1/Server=192.168.40.21/" /etc/zabbix/zabbix_agentd.conf #sed -i "s/ServerActive=127.0.0.1/ServerActive=192.168.40.21/" /etc/zabbix/zabbix_agentd.conf #sed -i "s/Hostname=Zabbix server/Hostname=192.168.40.21/" /etc/zabbix/zabbix_agentd.conf cp /etc/sysconfig/iptables /etc/sysconfig/iptables_ori.bak sed -i ‘/^COMMIT/i\-A INPUT -m state --state NEW -m tcp -p tcp --dport 10050 -j ACCEPT‘ /etc/sysconfig/iptables service iptables restart service zabbix-agent start chkconfig zabbix-agent on
ansible all -m copy -a "src=/root/tools/zabbix.sh dest=/root" # 推送文件至管理主機
ansible all -a "/bin/sh /root/zabbix.sh" # 遠程執行腳本文件
執行完畢後,連接一下管理主機,查看zabbix_agent是否啟動成功
七、ansible命令的總結
hosts文件寫法===》可考慮加密該文件
192.168.40.70:88 ansible_ssh_user=root ansible_ssh_pass=1234567899
server ansible_ssh_host=192.168.40.20 ansible_ssh_pass="1234567899" ansible_ssh_port=8822
ssh-copy-id -i ~/.ssh/id_rsa.pub "-p 8822 [email protected]" # 拷貝公鑰
ansible + 主機組名稱 + -m + 模塊名稱 + -a + 參數
主機組名稱,即hosts中定義的主機組名稱
all 指所有主機
-m 指使用模塊,後加指定的模塊名稱
-a 指傳給模塊的參數
ansible all -a "mkdir -p /python/python" # 執行管理主機中的命令
ansible all -m copy -a "src=/root/tools/zabbix.sh dest=/root" # 拷貝文件至管理主機
ansible all -a "/bin/sh /root/zabbix.sh" # 遠程執行腳本文件
Linux運維之Ansible自動化運維管理工具