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


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 502 root@119.75.216.201"  # 修改了特殊端口

  如果在/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連接加速配置

1
2
3
4
5
6
7
8
9
10
11
[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

六、測試。

6.1)測試在管理機器批量執行一個ping 命令

說明,每台機器都成功執行了ping 命令

6.2)批量安裝zabbix_agent客戶端

vim /root/tools/zabbix.sh

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#!/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  - "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  - '/^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是否啟動成功

七、分組測試結果

1)hosts文件,分組

[web01]
myredis ansible_ssh_host=192.168.10.25 ansible_ssh_pass="123456" ansible_ssh_port=22
myweb ansible_ssh_host=192.168.10.242 ansible_ssh_pass="123456" ansible_ssh_port=22

[db01]
server ansible_ssh_host=192.168.10.5 ansible_ssh_pass="123456" ansible_ssh_port=22

如果可以使用ssh 免密登錄服務器的話

[web]
k1 ansible_ssh_host=192.168.10.41 ansible_ssh_user=root ansible_ssh_pass=123456
k3 ansible_ssh_host=192.168.10.20

 k3 ansible_ssh_host=192.168.10.20  

ansible_ssh_host=192.168.10.20  

只要有IP在,就可以

2)執行web01組內容

[root@web01 ansible]# ansible web01 -a "df -h"
myweb | SUCCESS | rc=0 >>
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3        15G  2.0G   13G  14% /
tmpfs           931M     0  931M   0% /dev/shm
/dev/sda1       190M   32M  149M  18% /boot

myredis | SUCCESS | rc=0 >>
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3        19G  1.8G   17G  10% /
tmpfs           491M     0  491M   0% /dev/shm
/dev/sda1       190M   27M  153M  15% /boot

3)執行單台機器內容

[root@web01 ansible]# ansible myweb -a "df -h"
myweb | SUCCESS | rc=0 >>
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3        15G  2.0G   13G  14% /
tmpfs           931M     0  931M   0% /dev/shm
/dev/sda1       190M   32M  149M  18% /boot

4)特別注意前面定義的主機名,最好不要重名,建議使用IP地址

5)ls顯示文件

[root@k8s6 .ansible]# ansible web -a 'ls /root/.ssh/'
k5 | CHANGED | rc=0 >>
authorized_keys
id_rsa
id_rsa.pub

k4 | CHANGED | rc=0 >>
authorized_keys
id_rsa.pub

k3 | CHANGED | rc=0 >>
authorized_keys
id_rsa
id_rsa.pub

八、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 root@192.168.1.167" # 拷貝公鑰

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"             # 遠程執行腳本文件

ansible zabbix -m shell  -a "free -g"                                                  # 調用shell命令

 

ansible命令的並發

-f 參數。默認為 5。執行很多機器的時候,可以選擇加該參數

 

ansible命令自主選擇執行的文件host

-i 參數。默認為 /etc/ansible/hosts

 

實例:ansible zk -m shell -a "sudo yum install wget -y" -f 1 -i /etc/ansible/hosts      循環執行,線程數為1

原文鏈接:http://blog.csdn.net/xyang81/article/details/51568227


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM