自动化运维工具Ansible,简介及部署
一.简介
- Ansible是一个部署一群远程主机的工具,可以用来批量执行命令,安装程序,支持playbook编排。
- Ansible通过SSH协议来连接主机,去中心化,相对比puppet和saltstack无需安装客户即可实现文件传输、命令执行、应用部署、配置管理、任务编排等,显得更为简单与轻量。
- Ansible是python开发的,故依赖一些python库和组件,如:paramiko,PyYaml和jinja三个关键组件
- Ansible只是提供一种框架,其基于模块工作的,本身没有批量部署。
二.核心组件
- 1.连接插件connection plugins:负责和被监控端实现通信;
- 2.host inventory:指定操作的主机,是一个配置文件里面定义监控的主机;
- 3.各种模块核心模块、command模块、自定义模块;
- 4.借助于插件完成记录日志邮件等功能;
- 5.playbook:剧本执行多个任务时,非必需可以让节点一次性运行多个任务。
##常用模块##
模块 | 作用 |
---|---|
copy模块 | 把主控端/root目录下的a.sh文件拷贝到到指定节点上 |
file模块 | 更改指定节点上/tmp/t.sh的权限为755,属主和属组为root |
cron模块 | 在指定节点上定义一个计划任务,每隔3分钟到主控端更新一次时间 |
group模块 | 在所有节点上创建一个组名为nolinux,gid为2014的组 |
user模块 | 在指定节点上创建一个用户名为nolinux,组为nolinux的用户 |
yum模块 | 在指定节点上安装 lrzsz 服务 |
service模块 | 启动指定节点上的 puppet 服务,并让其开机自启动 |
script模块 | 在指定节点上执行/root/a.sh脚本(该脚本是在ansible控制节点上的) |
ping模块 | 检查指定节点机器是否还能连通 |
command模块 | 在指定节点上运行hostname命令 |
raw模块 | 在10.1.1.113节点上运行hostname命令 |
get_url模块 | 将指定文件下载到指定节点的/tmp目录下 |
synchronize模块 | 将主控方/root/a目录推送到指定节点的/tmp目录下 |
三.工具特性
- 1.no agents:不需要在被管控主机上安装任何客户端;
- 2.no server:无服务器端,使用时直接运行命令即可;
- 3.modules in any languages:基于模块工作,可使用任意语言开发模块;
- 4.yaml,not code:使用yaml语言定制剧本playbook;
- 5.ssh by default:基于SSH工作;
- 6.strong multi-tier solution:可实现多级指挥。
##流程架构##
四.优缺点
##优点##
- 轻量级,无需在客户端安装agent,更新时,只需在操作机上进行一次更新即可;
- 批量任务执行可以写成脚本,而且不用分发到远程就可以执行;
- 使用python编写,维护更简单;
- 使用push方式,控制节点向其他节点推方式,可先测试变更,方便控制管理。
##缺点##
- 基于ssh,串行,故超过500台主机效率较低;
五.Ansible安装部署
1.实验准备
主机 | IP地址 |
---|---|
管理端 | 192.168.160.128 |
被管理端1 | 192.168.160.129 |
被管理端2 | 192.168.160.130 |
2.Ansible环境部署
##首先关闭三台主机的防火墙##
yum install -y epel-release #安装epel源
yum install -y ansible #安装ansible源
yum install -y tree #安装树形展示结构
ansible --version #查看ansible版本
tree /etc/ansible #树形结构展示文件夹
cd /etc/ansible
vim hosts #配置主机清单
[webserver]
192.168.160.129 #被控制端1,ip
[mysql]
192.168.160.130 #被控制的2,ip
##配置密钥对验证##
ssh-keygen -t rsa
ssh-copy-id root@192.168.160.129
ssh-copy-id root@192.168.160.130