在開始以前咱們先試想一個場景,你的公司有成百上千臺的服務器,這時候領導要求在全部服務器上都添加一個定時任務,或者是執行某個命令,你可能會說用xshell一個一個去連或者是編寫一個shell腳本,可是若是過你經歷過相似的事情,你必定能夠體會到其中的痛苦,由於這麼多服務器你用xshell去連的話工做量將變得特別大,但若是你是選擇寫一個腳本的話也會特別的麻煩,由於每執行一個不一樣的東西你就要去修改腳本的類容,並且批量腳本通常採用循環的方式去執行一些任務,若是節點太多的話,執行的效率會變得比較低,而批量管理工具通常採用的是並行的方式去執行一些任務或命令,這樣在效率上也獲得了必定的提高,常見的批量管理工具備ansible,saltstack,puppet
ansible是用python開發的一款自動化運維工具,基於ssh協議進行遠程的批量管理,ansible與同類別的軟件對比,最大的有優點就是使用起來方便,簡單,快捷,因此被諸多的運維小夥伴兒所喜好html
server type | ipaddress | hostname |
---|---|---|
管理主機 | 10.0.0.61 | m01 |
受控主機 | 10.0.0.41 | backup |
受控主機 | 10.0.0.31 | nfs01 |
受控主機 | 10.0.0.7 | web01 |
PS:以上全部主機均爲centos6.9操做系統python
[root@m1 ~]# vim /service/scripts/fenfa_key.sh linux
#!/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 -p666666 ssh-copy-id -i /root/.ssh/id_dsa.pub "-o StrictHostKeyChecking=no 10.0.0.$ip"
done
[root@m1 scripts]# sh fenfa_key.sh web
[root@m1 ~]# vim /service/scripts/jiancha_scripts.sh shell
#/bin/bash
if [ $# -ne 1 ]
then
echo "pls input one agrs"
exit 1
fi
for ip in 31 41 7
do
echo ==============info 10.0.0.$ip==============
ssh 10.0.0.$ip $1
echo ""
done
[root@m1 ~]# sh /service/scripts/jiancha_scripts.sh hostname
==============info 10.0.0.31==============
nfs01vim==============info 10.0.0.41==============
backupcentos==============info 10.0.0.7==============
web01安全
[root@m1 ~]# yum -y install ansiblebash
小提示:在有的時候咱們可能爲了服務器的安全性開啓了系統當中的selinux,這時候selinux就有可能阻止了正常的ssh服務的鏈接,致使ansible命令運行失敗,若是你懂selinux還好,若是你不懂selinux怎麼辦呢?這時候能夠在受控端經過 yum install -y libselinux-python 安裝ansible官方提供的一個軟件來解決因selinux而沒法正常使用ansible命令的問題服務器
[root@m1 ~]# vim /etc/ansible/hosts
[SA]
10.0.0.7
10.0.0.31
10.0.0.41
配置說明:[SA]是受控端主機的組名,下邊的ip地址爲受控端主機的ip地址,若是有須要能夠設置多個組名,方便管理
至此ansible軟件部署完成
在遠程節點上執行命令
shell模塊能夠知足command模塊全部功能,而且能夠支持識別特殊字符信息,能夠理解成一個萬能的模塊,參數也基本與command相同
一個栗子:[root@m1 ~]# ansible 10.0.0.31 -m shell -a "cd /etc/;pwd"
10.0.0.31 | SUCCESS | rc=0 >>
etc
一個專門執行腳本的模塊,即把腳本里邊的類容在遠端節點上執行
一個栗子:[root@m1 scripts]# ansible 10.0.0.31 -m script -a "/service/scripts/test.sh"
將文件複製到遠端節點上
用於修改文件屬性或者建立文件或目錄
用於安裝卸載查看遠程節上的程序包
用於管理遠程節點服務運行狀態及開機自啓
一個栗子
[root@m1 tmp]# ansible 10.0.0.31 -m service -a "name=crond state=stopped enabled=on"-->(將crond這個服務關閉並設置開機不要啓動)
用於管理遠端節點的定時任務
幾個栗子
[root@m1 tmp]# ansible 10.0.0.31 -m cron -a "name=empty minute=0 hour=0 job='cat /dev/null>/tmp/aa.txt' "-->(添加一個定時任務)
[root@m1 tmp]# ansible 10.0.0.31 -m cron -a "name=empty job='cat /dev/null>/tmp/aa.txt' disabled=yes"-->(註釋掉一個定時任務)
[root@m1 tmp]# ansible 10.0.0.31 -m cron -a "name=empty state=absent"-->(刪除掉一個定時任務)
ansible劇本與Linux當中shell腳本相似,在Linux中若是咱們須要執行多條命令實現一個功能這時候咱們就能夠把這些命令寫到一個文件裏生成一個shell腳本,而ansible劇本就是將多個ansible命令語法模塊寫到一個文件裏,從而實現一些自動化的,方便的一些功能
PS:編寫規範遵循pyyaml語法規範,咱們能夠參考官方文檔進行學習:https://docs.ansible.com/ansible/latest/reference_appendices/YAMLSyntax.html
格式說明
空格 對內容進行分級,每隔一級前邊須要有兩個空格
一個栗子
使用ansible一鍵安裝httpd服務
總結:學好ansible的兩個重點一是學好ansible的模塊二是學好ansible劇本的編寫,固然前者是爲後者作鋪墊的,因此想要學好ansible除了參考官方文檔之外還可使用ansible-doc命名,這個命令至關與shell中的man命令,能夠在線尋求幫助