1. 程式人生 > >Linux運維之Ansible自動化運維管理工具

Linux運維之Ansible自動化運維管理工具

不同 log 腳本 默認端口 遠程管理 modules 用戶 兩個 簡單的

原文鏈接: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自動化運維管理工具