在开始以前咱们先试想一个场景,你的公司有成百上千台的服务器,这时候领导要求在全部服务器上都添加一个定时任务,或者是执行某个命令,你可能会说用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命令,能够在线寻求帮助