标签:规范 directory ESS hpa check 名称 应用 echo 效率
在开始之前我们先试想一个场景,你的公司有成百上千台的服务器,这时候领导要求在所有服务器上都添加一个定时任务,或者是执行某个命令,你可能会说用xshell一个一个去连或者是编写一个shell脚本,但是如果过你经历过类似的事情,你一定可以体会到其中的痛苦,因为这么多服务器你用xshell去连的话工作量将变得特别大,但如果你是选择写一个脚本的话也会特别的麻烦,因为每执行一个不同的东西你就要去修改脚本的类容,而且批量脚本一般采用循环的方式去执行一些任务,如果节点太多的话,执行的效率会变得比较低,而批量管理工具一般采用的是并行的方式去执行一些任务或命令,这样在效率上也得到了一定的提升,常见的批量管理工具有ansible,saltstack,puppetserver 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操作系统
[root@m1 ~]# vim /service/scripts/fenfa_key.sh
#!/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
[root@m1 ~]# vim /service/scripts/jiancha_scripts.sh
#/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==============
nfs01==============info 10.0.0.41==============
backup==============info 10.0.0.7==============
web01
[root@m1 ~]# yum -y install ansible
小提示:在有的时候我们可能为了服务器的安全性开启了系统当中的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命令,可以在线寻求帮助
标签:规范 directory ESS hpa check 名称 应用 echo 效率
原文地址:http://blog.51cto.com/13268236/2294100