ansible的使用

首先确认批量管理咱们为何使用ansible:无外乎主机分组管理、实时批量执行命令或脚本、实时批量分发文件或目录、定时同步文件等。html

 

1.     ansible与saltstack对比linux

前一段时间用了saltstack,免不得要谈一下他们的优缺点。二者都是安装和使用都很是方便的批量管理软件。shell

一、salt要安装agent;ansible不须要,经过ssh链接,省掉装agent的事。centos

二、salt在server端要启进程;ansible不须要,但这都无所谓差很少。服务器

三、salt与ansible都有模块,可以使用任意语言开发模块。网络

四、salt与ansible都使用yaml语言格式编写剧本。并发

为何不使用salt,ssh

1,tcp断开,执行命令会漏装机器,tcp

2,安装agent很麻烦,oop

3,依赖问题麻烦。

 

2.     ansible安装

centos:

yum install epel.repo(默认源会安装失败)

yum install ansible

 

注:在开始ansible操做受控机器前,须要配置好ssh免密码登录

 

3.     ansible命令参数介绍

Ansible中的临时命令的执行是经过Ad-Hoc来完成,可以快速执行,并且不须要保存执行的命令,例如:

ansible -i ~/hosts all -m command -a ‘ls’ -u root

主要参数以下:

 

-u username          指定ssh链接的用户名,即执行后面命令的用户

-i inventory_file    指定所使用的inventory文件的位置,默认为/etc/ansible/hosts

-m module            指定使用的模块,默认为command,可能也是shell ,script

-f 10                指定并发数,并发量大的时候,提升该值

--sudo [-k]          当须要root权限执行的化,-k参数用来输入root密码

-a 指定参数,通常是指定执行脚本或者执行命令

 

4.     ansible主机分组管理:

配置好ssh免密码登录后,就该把那些机器加入到hosts文件中,hosts不限路径,可用-i参数指定路径。

[root@yang ~]# cat  /etc/ansible/hosts

[KD1]    #组名

1.1.1.1:62222    #这里的端口是ssh端口

1.1.1.2:62222

[KD2]

1.1.1.3:62222

1.1.1.4:62222

 

分组的使用情景:1,hosts文件全执行;2,指定组执行;3,指定主机和组混合执行。通常第二种使用常见。

 

全执行效果:ansible -i /etc/ansible/hosts all -m shell -a  'uptime' 

分组执行效果:ansible -i /etc/ansible/hosts KD1 -m shell -a  'uptime' 

连续的主机名使用";"号分隔,如:ansible -i /etc/ansible/hosts  'KD1;1.1.1.3' -m shell -a 'uptime'

 

更多的分组格式参考:

http://www.ibm.com/developerworks/cn/linux/1407_liheng_ansible/

 

还可使用脚本动态获取主机的方式:

官方地址:http://docs.ansible.com/intro_dynamic_inventory.html

网络文档:http://noops.me/?p=1446

 

5.     ansible实时批量执行命令和脚本:

批量执行命令:

ansible -i/etc/ansible/hosts all -m shell -a 'who'

ansible -i/etc/ansible/hosts all -m command -a 'who'

注:shell模块可使用管道,而command则不能够。

 

*批量执行脚本:

ansible all -m script    -a "/root/ceshi.sh"   #这种方式能够替代paybook的使用,直接shell脚本加命令便可,包括文件备份,定时任务等。

 

6.     ansible实时批量拷贝文件或目录

从ansible-doc copy中的帮助信息得知

1,做用是将本机的文件,传送到目标机器;

2,ansible的copy模块是围绕rsync的包装,因此它是增量而不是全量的拷贝。

ansible MachineName   -m copy -a 'src=/etc/fstab dest=/tmp/fstab mode=644 owner=root'  #拷贝文件

ansible MachineName   -m copy -a 'src=/etc/test dest=/root/test mode=755 owner=root '  #此处test为目录

 

7.     ansible定时同步文件

既然ansible的copy模块是rsync的包装,那我按期执行copy目录的命令,就能完成文件的定时同步了。若是文件变化,就会同步过去,若是没变化,就不会拷贝。之后只要把要同步的文件放到该目录下便可。

 

8.     ansible模块帮助

执行命令用到的那些模块是干吗的?使用ansible-doc查看帮助吧。

ansible-doc -l       #查看模块列表

ansible-doc  copy    #查看copy模块的详细信息

ansible-doc  script #查看script模块的详细信息

总结,使用ansible的script功能+copy+shell基本能完成几百台服务器的管理了。

相关文章
相关标签/搜索