常见的运维工具
CFengine 最早的自动化运维工具
Chef
Puppet
基于Ruby开发,采用C/S架构,扩展性强,基于SSL认证
SaltStack
基于Python开发,采用C/S架构,相对于puppet更轻量级,配置语法采用YMAL,使得配置脚本更为简单
Ansible
基于Pyton开发,无需客户端,轻量级,配置语言采用YAML
为什么选择Ansible
相对于puppet和saltstack,ansible无需客户端,更轻量级
ansible甚至都不用启动服务,仅仅只是一个工具,可以很轻松的实现分布式扩展
更强的远程命令执行操作
不输于puppet和saltstack的其他功能
基本框架
核心:ansible
核心模块(Core Modules):这些都是ansible自带的模块
扩展模块(Custom Modules):如果核心模块不足以完成某种功能,可以添加扩展模块
插件(Plugins):完成模块功能的补充
剧本(Playbooks):ansible的任务配置文件,将多个任务定义在剧本中,由ansible自动执行
连接插件(Connectior Plugins):ansible基于连接插件连接到各个主机上,虽然ansible是使用ssh连接到各个主机的,但是它还支持其他的连接方法,所以需要有连接插件
主机群(Host Inventory):定义ansible管理的主机
工作原理图
从上图看出,其实ansible也可以用0mq的方式和节点主机连接,但是需要节点主机安装0mq,这样就是C/S模式了,一般不用
开始安装
配置好epel源,在我的博客中有一篇文章介绍了各种网络源的配置,自己搜索
然后yum install -y ansible
安装后
/etc/ansible会有ansible.cfg hosts两个文件
ansible.cfg是ansible的配置文件
hosts是ansible管理节点主机的清单文件
常用命令
ansible -h 帮助
-u ssh连接的用户,默认是root
-i 指定主机清单,默认是/etc/ansible/hosts
-m 指定模块,默认指定是command模块
-a 指定模块参数
-k 指定ssh密码,后面不接密码,回车后会提示输入密码
我们在/etc/ansible/hosts文件中定义一个组名为test
[test]
172.16.18.185
ansible -i /etc/ansible/hosts test -u root -m command -a ''ls /root" -k
这个命令的意思查看172.16.18.195这台机器上根目录有什么
hosts文件的写法
如果是写一批连续的IP地址
可以这样写
[test]
172.16.0.[100:254] //这个指的是100到254的间的所有IP都是test组中的
组中还包含组的
比如
[test:children]
test1
test2
test3
[test1]
172.16.0.111
[test2]
172.16.3.88
[test3]
下面一定要写这包含的三个组,就算组里没有ip(如test3),也一定要写,否则会报错的