CentOS7系統 ansible自動化部署多台服務器部署


CentOS7系統 ansible自動化部署多台服務器部署

 

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的優點

簡單易用,學習門檻低、問題少、安裝快、執行快,可進行批量命令和模塊擴展,操作完全依賴 SSH 而不需要安裝 agent。Ansible 結合 Docker、Mesos、Puppet、Vagrant、Git 等系統可以構建出非常好的自動化運維平台。
 

ansible的缺點

簡單的設計從而導致沒有依賴管理功能,另外當被管理的服務器達到一定數量時,執行效率會大大降低。
 
一台控制主機:192.168.222.137
 
三台管理主機:
l 192.168.222.135
l 192.168.222.136
l 192.168.222.129
 
安裝要求:
l 控制服務器:需要安裝 Python2.6/2.7
l 管理服務器:需要安裝 Python2.4 以上版本,若低於 Python2.5 需要安裝 pythonsimplejson; 若啟用了 selinux,則需要安裝 libselinux-python。
 
臨時關閉selinux
setenforce 0
 
本次安裝基於CentOS7系統環境、Python2.7.5、root用戶。
 

yum安裝

yum -y install epel-release ansible
 

配置

控制主機:用於控制其它機器的主機 
管理主機:被控制主機管理的主機

配置管理主機

vim /etc/ansible/hosts
在hosts文件中添加管理主機的IP地址列表:
 
 
 

配置控制主機SSH密鑰

在控制主機中生成ssh密鑰對
ssh-keygen -t rsa
 
一路回車即可在$HOME/.ssh目錄下生成id_rsa和id_rsa.put私鑰和公鑰兩個文件。

 
注: 如果在生成密鑰的時候設置了密碼,ansible每次執行命令的時候,都會提示輸入密鑰密碼,可通過下面的命令記住密碼。
 
ssh-agent bsh
ssh-add ~/.ssh/id_rsa
 
 

將公鑰拷貝到管理主機中.ssh/authorized_keys文件中,實現免密碼登錄遠程管理主機

ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.222.135
ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.222.136
ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.222.129
 
注:ssh-copy-id命令會自動將id_rsa.pub文件的內容追加到遠程主機root用戶下.ssh/authorized_keys文件中。
 
 
 
 
 

擴展內容:

免交互批量分發公鑰腳本:
      #!/bin/bash
            \rm  /root/.ssh/id_dsa*
            ssh-keygen -t dsa -f /root/.ssh/id_dsa -N ""
 
            for ip in 31 41 7
            do
            sshpass -p333333 ssh-copy-id -i /root/.ssh/id_dsa.pub "-o StrictHostKeyChecking=no 172.16.1.$ip"
            done            
done密碼 ssh-copy-id 指定ssh  17524端口在/root/.ssh/下添加config文件內容為port 17524
 

檢查是否可以進行基於密鑰遠程管理

   ssh 172.16.1.31 uptime
   免交互批量檢查測試腳本
 
   #!/bin/bash/
 
   if [ $# -ne 1 ];then
   echo "input one agrs"
   exit 1
   fi
 
   for ip in 31 41 7 8 9
   do
   echo ===== info 172.16.1.$ip =====
   ssh -p17524 172.16.1.$ip $1
   echo ""
   done

ansible配置

vim /etc/ansible/ansible.cfg
 
1> 禁用每次執行ansbile命令檢查ssh key host
host_key_checking = False
 
2> 開啟日志記錄
log_path = /var/log/ansible.log
 
3> ansible連接加速配置

 
 

測試

最后測試下在三台管理機器批量執行一個date命令
ansible all -m command -a 'date'

 
 

主機分組管理

vim /etc/ansible/hosts
 
 
 
測試ansible
 
 
 

#參數解釋:

 
n -i:  指定主機列表文件        
n -u: 指定遠程主機登陸用戶        
n -m:指定使用ansible 的模塊                
n -a: 指定模塊下使用的參數        
n -k: 指定遠程登陸用戶的密碼
 
測試遠程主機狀態,查看是否存活
 
ansible all -m ping
 
 


免責聲明!

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



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